您的位置:首页 > 编程语言 > Java开发

模仿struts1的servlet页面分发

2011-10-13 19:19 190 查看


 DispatchServlet类:package com.zzz.jbpm.web;

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;
import javax.servlet.http.HttpSession;

/**
* 分发请求,处理中文,控制登录
*
*/
public abstract class DispatchServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
System.out.println("DispatchServlet uri:" + request.getRequestURI());

// jbpm.do:index
String method = request.getParameter("method");
System.out.println("DispatchServlet method:" + method);
if (method == null || "".equals(method.trim())) {
index(request, response);
return;
}

dispatchMethod(request, response, method);

}

protected HashMap methods = new HashMap();
protected Class clazz = this.getClass();
protected Class[] types = { HttpServletRequest.class, HttpServletResponse.class };

// 实现回调子类的公共方法
private void dispatchMethod(HttpServletRequest request, HttpServletResponse response, String name) throws ServletException, IOException {
Method method = null;
try {
synchronized (methods) {
method = (Method) methods.get(name);
if (method == null) {
method = clazz.getMethod(name, types);
methods.put(name, method);
}
}
} catch (Exception e) {
throw new RuntimeException(clazz.getSimpleName() + "子类没有找到对应的方法:" + e.getMessage());
}

try {
Object[] args = { request, response };
method.invoke(this, args);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("不能成功调用子类的方法:" + e.getMessage());
}

}

// 没有输入method,默认访问此方法
protected abstract void index(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;

}
使用方法:
public class DeployServlet extends BaseServlet {

@Override
protected void index(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//TODO
}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息