本博客来自转载 转载地址: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.java
有关BaseAction,DispatchAction,XXXAction的一个小测试工程,希望对刚接触BaseAction的人有用
很好用的工具类,希望帮助到大家
utils类及baseAction 非常详细哦
请求被ActionServlet(控制器)接收,它在struts- config.xml文件中寻找请求的URI,找到对应的Action类后,Action类执行相应的业务逻 辑。Action类执行建立在模型组件基础上的业务逻辑,模型组件是和应用程序关联的...
action的超类 其他类的继承它,里面有详细说明
在页面上经常会出现一个以上的功能按钮,而这些功能按钮基本上都是对应于后台的一个操作实现,由于在本系统中的表现层选用较为成熟Struts框架,该框架中最为核心的部分要属控制器控制转发相应的HttpRequest,...
1.网络商城项目是第一个JAVAWEB项目,适合初学者练手。...使用拦截器的方法对系统权限进行初步控制(后续可以采用Shiro框架进行更新) 对用户的密码采用MD5加密方法进行加密(可以采取多次MD5加密方式,和其他加密方式)
具体实现 我现在的程序是基于ThinkPHP框架的,我们会有一个父类控制器,下面我就把这个设置cookie的代码加到这个BaseAction里面的_initialize()函数中,这样程序就大大简化工作量了。 复制代码 代码如下:$refer = ...
使用拦截器的方法对系统权限进行初步控制(后续可以采用Shiro框架进行更新) 对用户密码采用MD5加密方法进行加密(可以采用多重MD5加密方式,和其他加密方式) 3.BOS Logistics是一个物流管理系统 采用Struts2与前台...
包含WEB开发的Servlet,Struts2等开发所需的构架文件,底层的BaseAction,JDBC等底层封装
TYPO3扩展routes 此扩展使您可以将URL终结点与某些Extbase Action绑定。 简而言之,您可以为TYPO3项目创建一个API。 特征: ... 开箱即用。 您的路线的其他中间件。... 用于一般信息的简单模块。...
Runcobo ... 该分片遵循语义版本控制v2.0.0,因此请检查发行版并相应地更改版本。 运行分shards install 用法 require " runcobo " class Api::V1::Add < BaseAction get " /api/v1/add " quer
简单的ssh项目,泛型BaseAction配置,简单注解配置,applicationContext.xml配置,jar包地址 链接:https://pan.baidu.com/s/14NkywuhG6mESyhE1VMkhOQ 密码:en19
代码清晰,分层清楚,jstl页面多层循环,BaseAction整合业务层。myeclipse开发,包含包图片,没有具体包。注意解决包冲突。
public class SupplierSort_Action extends BaseAction implements ModelDriven<SupplierSort>{ //调用数据访问层 SupplierSort supplierSort = new SupplierSort(); public SupplierSort getModel(){ return ...
struts2、hibernate3、...2:通过基础类和接口BaseDao、BaseDaoImpl、BaseAction类降低代码重用 3:单元测试通过(测试时新建一个名为oa的空数据库,密码自己改) 4:主要是依照传智播客的汤阳光老师讲的OA项目编写的
另外,对于表单的提交,前后台都必须做数据校验,SWDF已提供了此能力,进行简单的配置即可,前台直接提供类似以下代码即可,点此查看前端校验详细规则说明。 前端校验示例; 后台数据校验,点此查看校验详细说明. b...
jQuery EasyUI与Struts2 的整合—属性驱动篇 如果你是用模型驱动,或者是直接把属性写在action里面,你不会...BaseAction.java ApproveAction.java approveList.jsp jQuery EasyUI与Struts2 的整合—属性驱动篇.docx