对于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.java
action的超类 其他类的继承它,里面有详细说明
有关BaseAction,DispatchAction,XXXAction的一个小测试工程,希望对刚接触BaseAction的人有用
很好用的工具类,希望帮助到大家
utils类及baseAction 非常详细哦
该类必须继承com.hikvision.swdf.xx.BaseAction<{EntityName}>,该Action类有一个关键属性entity,即泛型Entity类的一个实体,该属性默认填充好了请求提交过来的entity对应参数(即entity.propertyName);...
public class CarriageBidQueryAction extends BaseAction { protected ActionForward execute(BActionContext context) throws Exception { System.out.println("------- CarriageBidQueryAction execute...
Service继承了baseSevice,baseSevice已经声明了一些基本方法,需要自己定制的方法在service中声明,然后在...BaseService需要一个Dao对实体进行操作,如果要使用BaseAction中的方法,需要把Dao注入到BaseService中。
sql文件夹里存放的是mysql建表,src文件夹里的是java代码,WEBCONTENT里的是页面。 实现了用户的注册、邮件激活、登陆、支付、商品的添加搜索和显示等功能 2.SSH_CRM 是一个简单的spring+struts2+Hibernate整合项目 ...
public class BaseAction extends DispatchAction { public FdlUserService fus; public FdmShisanhachuService chus; public FdlMachineService mas; public FdlTenkaService tens; public FdmShisanService ...
jQuery EasyUI与Struts2 的整合—属性驱动篇 如果你是用模型驱动,或者是直接把属性写在action里面,你不会...BaseAction.java ApproveAction.java approveList.jsp jQuery EasyUI与Struts2 的整合—属性驱动篇.docx
sql文件夹里是mysql建表,src文件夹里java代码,WEBCONTENT里是页面。 实现了用户的注册、邮件激活、登陆、支付、商品的添加搜索和显示等功能 2.SSH_CRM是一个简单的spring+struts2+Hibernate整合项目 是一个crm人员...
因此,在对本系统进行架构设计的时候,考虑建立一个抽象的BaseAction类,该类继承LookupDispatchAction,实现LookupDispatchAction类中的getKeyMethodMap方法,在方法中返回本系统中请求参数值与资源文件中参数值的...
TYPO3扩展routes 此扩展使您可以将URL终结点与某些Extbase Action绑定。 简而言之,您可以为TYPO3项目创建一个API。 特征: ... 开箱即用。 您的路线的其他中间件。... 用于一般信息的简单模块。...
简单的ssh项目,泛型BaseAction配置,简单注解配置,applicationContext.xml配置,jar包地址 链接:https://pan.baidu.com/s/14NkywuhG6mESyhE1VMkhOQ 密码:en19
..........\...\..\..\......\BaseAction.java ..........\...\..\..\dao\XiangmubiaoDAO.java ..........\...\..\..\persist\Xiangmubiao.hbm.xml ..........\...\..\..\.......\Xiangmubiao.java ..........\...
包含WEB开发的Servlet,Struts2等开发所需的构架文件,底层的BaseAction,JDBC等底层封装
具体实现 我现在的程序是基于ThinkPHP框架的,我们会有一个父类控制器,下面我就把这个设置cookie的代码加到这个BaseAction里面的_initialize()函数中,这样程序就大大简化工作量了。 复制代码 代码如下:$refer = ...
代码清晰,分层清楚,jstl页面多层循环,BaseAction整合业务层。myeclipse开发,包含包图片,没有具体包。注意解决包冲突。