`

BaseAction的java多态思考

    博客分类:
  • ssh
阅读更多

对于struts框架,我们都知道我们写的*Action类是继承struts的Action(org.apache.struts.action.Action)类,并重写其定义的execute方法,进而来实现我们自己的业务逻辑。

但考虑到到一些需求,我们可以在struts的Action和我们自己写的*Action类之间加一层Action类来实现过滤功能 ,我们将其定义为BaseAction,整个继承关系:*Action--extends---->BaseAction---extends--->Action。

举例如下:

在ListAction类和Struts框架的Action类之间加一层BaseAction类。

ListAction:

//extends BaseAction
public class ListAction extends BaseAction {

 public ActionForward doExecute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception {
 
  Connection conn = null;
  conn = this.getDataSource(request).getConnection();
  BookDAO bookDAO  = DAOFactory.getBookDAO(conn);
  List list = bookDAO.findAll();
  request.setAttribute("books", list);
  return mapping.findForward(Constants.FORWARD_LIST);
 }
 
 //实现BaseAction中的needLogin方法,判断*Action是否需要登陆验证
 public boolean needLogin() { 
  return true;
 }
}

BaseAction:

public abstract class BaseAction extends Action {

  //override the method execute of Action 
 public final ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception {

  if(needLogin()){
     //取出LoginAction中放入session中的用户名"aaa"
     Object o = request.getSession().getAttribute("aaa");
   if(o == null){
     //登陆验证失败,返回login.jsp
     return actionMapping.findForward("login");
   }
  }
  //返回调用ListAction中的doExcute()方法,执行业务逻辑
  return doExecute(actionMapping, actionForm, request, response);
 }

 //abstract method
 public abstract ActionForward doExecute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest  request, HttpServletResponse response)  throws Exception;
 
 //abstract method
 public abstract boolean needLogin();

}

在BaseAction中重写struts中Action的excute()方法,在ListAction中定义doexcute()方法并extends BaseAction类,登陆系统是根据login.do进入LoginAction,调用重写struts中的excute()方法,此时LoginAction没有,就到父类BaseAction去调用excute()方法,执行其业务逻辑后,如过用户是已经登陆过就返回doExcute()方法,回到ListAction调用doExcute()的业务逻辑,如果是非登陆用户则直接转向Login.jsp。这里将java中多态,抽象类以及回调的思想体现得淋漓尽致。

分享到:
评论

相关推荐

    BaseAction

    BaseAction.java

    BaseAction.rar_Java编程_Java_

    action的超类 其他类的继承它,里面有详细说明

    BaseAction的小测试代码

    有关BaseAction,DispatchAction,XXXAction的一个小测试工程,希望对刚接触BaseAction的人有用

    抽取的BaseAction通用工具类

    很好用的工具类,希望帮助到大家

    utils类及baseAction

    utils类及baseAction 非常详细哦

    java命名规范 开发规范

    该类必须继承com.hikvision.swdf.xx.BaseAction<{EntityName}>,该Action类有一个关键属性entity,即泛型Entity类的一个实体,该属性默认填充好了请求提交过来的entity对应参数(即entity.propertyName);...

    Java通用代码生成实用程序XDoclet(源码包)

    public class CarriageBidQueryAction extends BaseAction { protected ActionForward execute(BActionContext context) throws Exception { System.out.println("------- CarriageBidQueryAction execute...

    java javascript

    Service继承了baseSevice,baseSevice已经声明了一些基本方法,需要自己定制的方法在service中声明,然后在...BaseService需要一个Dao对实体进行操作,如果要使用BaseAction中的方法,需要把Dao注入到BaseService中。

    初学JAVA-WEB开发的小项目

    sql文件夹里存放的是mysql建表,src文件夹里的是java代码,WEBCONTENT里的是页面。 实现了用户的注册、邮件激活、登陆、支付、商品的添加搜索和显示等功能 2.SSH_CRM 是一个简单的spring+struts2+Hibernate整合项目 ...

    设备管理 java对日项目 SSH框架

    public class BaseAction extends DispatchAction { public FdlUserService fus; public FdmShisanhachuService chus; public FdlMachineService mas; public FdlTenkaService tens; public FdmShisanService ...

    jQuery EasyUI与Struts2的整合—属性驱动篇

    jQuery EasyUI与Struts2 的整合—属性驱动篇 如果你是用模型驱动,或者是直接把属性写在action里面,你不会...BaseAction.java ApproveAction.java approveList.jsp jQuery EasyUI与Struts2 的整合—属性驱动篇.docx

    一套适合初学者的JAVA-WEB开发的小项目

    sql文件夹里是mysql建表,src文件夹里java代码,WEBCONTENT里是页面。 实现了用户的注册、邮件激活、登陆、支付、商品的添加搜索和显示等功能 2.SSH_CRM是一个简单的spring+struts2+Hibernate整合项目 是一个crm人员...

    基于JAVA SMART系统-系统框架设计与开发(源代码+论文).zip

    因此,在对本系统进行架构设计的时候,考虑建立一个抽象的BaseAction类,该类继承LookupDispatchAction,实现LookupDispatchAction类中的getKeyMethodMap方法,在方法中返回本系统中请求参数值与资源文件中参数值的...

    路由:提供将路由段绑定到特定Extbase Action端点的功能

    TYPO3扩展routes 此扩展使您可以将URL终结点与某些Extbase Action绑定。 简而言之,您可以为TYPO3项目创建一个API。 特征: ... 开箱即用。 您的路线的其他中间件。... 用于一般信息的简单模块。...

    ssh:struts-2.5+spring4+hibernate5

    简单的ssh项目,泛型BaseAction配置,简单注解配置,applicationContext.xml配置,jar包地址 链接:https://pan.baidu.com/s/14NkywuhG6mESyhE1VMkhOQ 密码:en19

    halloworld

    ..........\...\..\..\......\BaseAction.java ..........\...\..\..\dao\XiangmubiaoDAO.java ..........\...\..\..\persist\Xiangmubiao.hbm.xml ..........\...\..\..\.......\Xiangmubiao.java ..........\...

    web资源 完本

    包含WEB开发的Servlet,Struts2等开发所需的构架文件,底层的BaseAction,JDBC等底层封装

    PHP 登录完成后如何跳转上一访问页面

    具体实现 我现在的程序是基于ThinkPHP框架的,我们会有一个父类控制器,下面我就把这个设置cookie的代码加到这个BaseAction里面的_initialize()函数中,这样程序就大大简化工作量了。 复制代码 代码如下:$refer = ...

    struts1.2,spring2,hibernate3整合实例代码

    代码清晰,分层清楚,jstl页面多层循环,BaseAction整合业务层。myeclipse开发,包含包图片,没有具体包。注意解决包冲突。

Global site tag (gtag.js) - Google Analytics