`
leovuyo
  • 浏览: 383 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

纯servlet做控制器时BaseAction的缓存设计思想

阅读更多
本博客来自转载  转载地址:http://blog.tianya.cn/blogger/post_read.asp?BlogID=3283788&PostID=27541263

当我们在javaweb方面的项目时,如果不想用struts等现有的开源框架而只用servlet做控制器时,我们可以对自己servlet进行设计,从而追求更高的效率。以下是我的设计思想(来源于struts):

---------baseAction的代码------------
package org.leovuyo.servlet;

import java.io.IOException;
import java.lang.reflect.Method;
import java.util.HashMap;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class BaseServlet extends HttpServlet {

    /**
     */
    private static final long serialVersionUID = -1000401219832868371L;
    HashMap<String, Method> hashMap = new HashMap<String, Method>(); // 实例化一个hashMap以用作缓存

    /**
     * @see HttpServlet#HttpServlet()
     */
    public BaseServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doPost(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
            IOException {
        // TODO Auto-generated method stub

        String className = this.getClass().getName();// 这里是判断交个哪个子servlet处理
        System.out.println(className);
        String methodName = request.getParameter("do");// 判断交给servlet的哪个方法
        System.out.println("---------" + methodName);
        try {
            Object instance = Class.forName(className).newInstance();// 实例化子servlet
            if (!hashMap.containsKey(methodName)) {// 判断hashMap中是否有这个方法
                Method method = instance.getClass().getMethod(methodName,
                        new Class[] { HttpServletRequest.class, HttpServletResponse.class });// 没有的话就利用反射机制得到子servlet的该方法
                method.invoke(instance, new Object[] { request, response });// 调用invoke执行该方法
                hashMap.put(methodName, method);// 加入hashMap中
            } else {
                Method method = (Method) hashMap.get(methodName);// 有就直接拿出运行
                method.invoke(instance, new Object[] { request, response });
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}


-----------子action的代码--------
package org.leovuyo.servlet;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends BaseServlet {

    /**
     */
    private static final long serialVersionUID = 2341206665438407507L;

    public void login(HttpServletRequest request, HttpServletResponse response) {
        // ��登录的方法
        System.out.println("login!!!");
    }

    public void register(HttpServletRequest request, HttpServletResponse response) {
        // 注册的方法
        System.out.println("register!!!");
    }
}


这里还可以写其他的子servlet来继承该baseAction实现自己的功能,同时你也可以给一个模块定义一个baseAction(注意hashMap中不能有相同的键,所以注意里面的方法名)...
分享到:
评论

相关推荐

    BaseAction

    BaseAction.java

    BaseAction的小测试代码

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

    抽取的BaseAction通用工具类

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

    utils类及baseAction

    utils类及baseAction 非常详细哦

    教务管理系统(概要设计及详细设计).doc

    请求被ActionServlet(控制器)接收,它在struts- config.xml文件中寻找请求的URI,找到对应的Action类后,Action类执行相应的业务逻 辑。Action类执行建立在模型组件基础上的业务逻辑,模型组件是和应用程序关联的...

    BaseAction.rar_Java编程_Java_

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

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

    在页面上经常会出现一个以上的功能按钮,而这些功能按钮基本上都是对应于后台的一个操作实现,由于在本系统中的表现层选用较为成熟Struts框架,该框架中最为核心的部分要属控制器控制转发相应的HttpRequest,...

    初学JAVA-WEB开发的小项目

    1.网络商城项目是第一个JAVAWEB项目,适合初学者练手。...使用拦截器的方法对系统权限进行初步控制(后续可以采用Shiro框架进行更新) 对用户的密码采用MD5加密方法进行加密(可以采取多次MD5加密方式,和其他加密方式)

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

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

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

    使用拦截器的方法对系统权限进行初步控制(后续可以采用Shiro框架进行更新) 对用户密码采用MD5加密方法进行加密(可以采用多重MD5加密方式,和其他加密方式) 3.BOS Logistics是一个物流管理系统 采用Struts2与前台...

    web资源 完本

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

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

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

    runco​​bo:具有简单,直观和一致的DSL的api框架,使用jbuilder呈现json。 https:runco​​bo.github.iodocs

    Runcobo ... 该分片遵循语义版本控制v2.0.0,因此请检查发行版并相应地更改版本。 运行分shards install 用法 require " runcobo " class Api::V1::Add &lt; BaseAction get " /api/v1/add " quer

    ssh:struts-2.5+spring4+hibernate5

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

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

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

    使用模型驱动方便从表单获取用户输入的值

    public class SupplierSort_Action extends BaseAction implements ModelDriven&lt;SupplierSort&gt;{ //调用数据访问层 SupplierSort supplierSort = new SupplierSort(); public SupplierSort getModel(){ return ...

    SSH框架整合

    struts2、hibernate3、...2:通过基础类和接口BaseDao、BaseDaoImpl、BaseAction类降低代码重用 3:单元测试通过(测试时新建一个名为oa的空数据库,密码自己改) 4:主要是依照传智播客的汤阳光老师讲的OA项目编写的

    java命名规范 开发规范

    另外,对于表单的提交,前后台都必须做数据校验,SWDF已提供了此能力,进行简单的配置即可,前台直接提供类似以下代码即可,点此查看前端校验详细规则说明。 前端校验示例; 后台数据校验,点此查看校验详细说明. b...

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

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

Global site tag (gtag.js) - Google Analytics