对于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中多态,抽象类以及回调的思想体现得淋漓尽致。
分享到:
相关推荐
在Java编程领域,"BaseAction"常常被用作一个基类或者抽象类,为其他类提供通用的功能和行为。在给定的`BaseAction.rar`压缩包中,包含了一个名为`BaseAction.java`的源代码文件,这通常意味着这个文件定义了一个名...
BaseAction.java
在Java Web开发中,我们经常会遇到Action类,它是Struts框架中的核心组件,负责处理用户的请求。本测试代码主要关注`BaseAction`,一个常见的Action基类,它为其他具体的业务Action提供了一些基础功能和通用逻辑。`...
`GenPage.java`、`BaseAction.java`、`AreaAction.java`、`AccNodes.java`等文件共同构成了分页的后端逻辑,而`index.jsp`、`left.jsp`和`pager-taglib.tld`则负责前端展示和标签定义。这种做法使得分页功能既直观又...
在Java编程中,`Utils` 类和 `BaseAction` 是两个常见的概念,它们在软件开发中扮演着重要的角色。下面将详细阐述这两个概念及其在实际应用中的作用。 首先,我们来了解一下 `Utils` 类。`Utils`(工具类)通常是...
很好用的工具类,希望帮助到大家
JAVA读取同一路径下所有类及其方法 在 Java 中,获取同一路径下所有类及其方法是非常重要的,这样才能对权限进行控制。在本文中,我们将提供一种获取所有类及其方法的方法。 获取同一路径下所有类及其方法 在开发...
在这个方法中,我们首先在baseAction中或者直接在action中写一个方法,并将其静态map保存唯session。下面是Java代码: ```java private static Map, HttpSession> httpssessionmap = new Hashtable, HttpSession>()...
本文将详细解析如何在Java项目中使用Memcached,包括其配置方法以及一个具体的示例代码,旨在帮助开发者深入理解并掌握这一技术。 ### 一、Memcached简介 Memcached是一种开源的高性能内存键值存储系统,主要用于...
public class FileUploadAction extends BaseAction { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { ActionForward ...
#### 五、扩展思考 1. **前端交互**:设计友好的前端界面,引导用户输入邮箱地址,点击提交后发送邮件。 2. **多步骤验证**:除了发送重置密码邮件外,还可以增加手机短信验证码验证,提高安全性。 3. **日志记录**...
### Java Struts2框架中的表单校验及处理机制 #### Struts2简介 Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架,它简化了Web应用程序的开发过程,提供了丰富的特性来支持复杂的业务...
在Java的Struts2框架中,接收参数是实现动态页面与后台交互的关键步骤。本文将深入探讨Struts2接收参数的几种主要方法,包括通过Action的属性、使用Domain Model(领域模型)以及采用DTO(数据传输对象)进行参数...
在Java Web开发中,通常采用分层架构来组织应用程序,如描述中所示,主要分为四层:Action层、Service层、DAO层以及Domain层。这种结构有助于提高代码的可维护性和可扩展性。 1. **Action层**: Action层是业务...
本篇将深入探讨一个被誉为“史上最灵活、强大”的分页框架,结合提供的`BaseAction.java`源码,我们将分析其设计思路和技术要点。 首先,强大的分页框架应具备以下几个核心特性: 1. **灵活性**:框架需要适应不同...
该类必须继承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...
本仓库仓库是开始学习JAVA-WEB开发的一些练手...技术支持在web层和dao层都提取了公共代码封装到BaseAction和BaseDao中,提高了代码的复用性,同时遵循OO设计原则,接口是针对编程的,而不是针对实现编程的。使用拦截