`

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.rar_Java编程_Java_

    在Java编程领域,"BaseAction"常常被用作一个基类或者抽象类,为其他类提供通用的功能和行为。在给定的`BaseAction.rar`压缩包中,包含了一个名为`BaseAction.java`的源代码文件,这通常意味着这个文件定义了一个名...

    BaseAction

    BaseAction.java

    BaseAction的小测试代码

    在Java Web开发中,我们经常会遇到Action类,它是Struts框架中的核心组件,负责处理用户的请求。本测试代码主要关注`BaseAction`,一个常见的Action基类,它为其他具体的业务Action提供了一些基础功能和通用逻辑。`...

    Java实现真分页.自己领悟.

    `GenPage.java`、`BaseAction.java`、`AreaAction.java`、`AccNodes.java`等文件共同构成了分页的后端逻辑,而`index.jsp`、`left.jsp`和`pager-taglib.tld`则负责前端展示和标签定义。这种做法使得分页功能既直观又...

    utils类及baseAction

    在Java编程中,`Utils` 类和 `BaseAction` 是两个常见的概念,它们在软件开发中扮演着重要的角色。下面将详细阐述这两个概念及其在实际应用中的作用。 首先,我们来了解一下 `Utils` 类。`Utils`(工具类)通常是...

    抽取的BaseAction通用工具类

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

    JAVA读取同一路径下所有类及其方法

    JAVA读取同一路径下所有类及其方法 在 Java 中,获取同一路径下所有类及其方法是非常重要的,这样才能对权限进行控制。在本文中,我们将提供一种获取所有类及其方法的方法。 获取同一路径下所有类及其方法 在开发...

    java中如何实现同一账号不能同时登录

    在这个方法中,我们首先在baseAction中或者直接在action中写一个方法,并将其静态map保存唯session。下面是Java代码: ```java private static Map, HttpSession> httpssessionmap = new Hashtable, HttpSession>()...

    java使用memcached的实例

    本文将详细解析如何在Java项目中使用Memcached,包括其配置方法以及一个具体的示例代码,旨在帮助开发者深入理解并掌握这一技术。 ### 一、Memcached简介 Memcached是一种开源的高性能内存键值存储系统,主要用于...

    java 实现大文件上传

    public class FileUploadAction extends BaseAction { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { ActionForward ...

    java编程:找回密码

    #### 五、扩展思考 1. **前端交互**:设计友好的前端界面,引导用户输入邮箱地址,点击提交后发送邮件。 2. **多步骤验证**:除了发送重置密码邮件外,还可以增加手机短信验证码验证,提高安全性。 3. **日志记录**...

    Java实训教程 Java软件开发实战 Java开发框架介绍 struts2_表单校验失败跳input视图问题共13页.pptx

    ### Java Struts2框架中的表单校验及处理机制 #### Struts2简介 Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架,它简化了Web应用程序的开发过程,提供了丰富的特性来支持复杂的业务...

    java struts2接收参数的几种方法

    在Java的Struts2框架中,接收参数是实现动态页面与后台交互的关键步骤。本文将深入探讨Struts2接收参数的几种主要方法,包括通过Action的属性、使用Domain Model(领域模型)以及采用DTO(数据传输对象)进行参数...

    在线短信发送功能实现(java)

    public class SendMessageAction extends BaseAction { // 实现发送短信的逻辑 } ``` 4. **前端页面开发**: - 在`web`目录下创建一个JSP页面,提供用户输入手机号和短信内容的表单。 - 添加JavaScript脚本来...

    java javascript

    在Java Web开发中,通常采用分层架构来组织应用程序,如描述中所示,主要分为四层:Action层、Service层、DAO层以及Domain层。这种结构有助于提高代码的可维护性和可扩展性。 1. **Action层**: Action层是业务...

    原创技术:史上最灵活,强大的分页框架

    本篇将深入探讨一个被誉为“史上最灵活、强大”的分页框架,结合提供的`BaseAction.java`源码,我们将分析其设计思路和技术要点。 首先,强大的分页框架应具备以下几个核心特性: 1. **灵活性**:框架需要适应不同...

    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.lang.NoSuchMethodException: com.sun.proxy.$Proxy58.list错误解决办法

    Java中的`java.lang.NoSuchMethodException`异常通常表明在运行时尝试调用一个不存在的方法。这个错误通常发生在动态代理、反射或者其他需要在运行时查找或调用特定方法的场景。在这个特定的问题中,错误提示是`java...

Global site tag (gtag.js) - Google Analytics