BaseServlet的模板

来源:互联网 发布:云收银软件 编辑:程序博客网 时间:2024/05/16 14:10

如何编写BaseServlet

对于初学JavaWeb的同学来讲,写一个又一个servlet真是显得非常的冗余,所以最后都会整理一个BaseServlet来吧所有servlet共同的代码整合到一块,这样不仅大大提高了代码的可辨识度,而且使文件很清晰。使用时只需让别的servlet继承BaseServlet即可。
package cn.pxty.servlet;import java.io.IOException;import java.lang.reflect.Method;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * BaseServlet用来作为其它Servlet的父类 * 一个类多个请求处理方法,每个请求处理方法的原型与service相同!  * 原型 = 返回值类型 + 方法名称 + 参数列表 */@SuppressWarnings("serial")public class BaseServlet extends HttpServlet {@Overridepublic void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");//处理响应编码request.setCharacterEncoding("UTF-8");/** * 1. 获取method参数,它是用户想调用的方法  * 2. 把方法名称变成Method类的实例对象  * 3. 通过invoke()来调用这个方法 */String methodName = request.getParameter("method");Method method = null;/** * 2. 通过方法名称获取Method对象 */try {method = this.getClass().getMethod(methodName,HttpServletRequest.class, HttpServletResponse.class);} catch (Exception e) {throw new RuntimeException("您要调用的方法:" + methodName + "它不存在!", e);}/** * 3. 通过method对象来调用它 */try {String result = (String)method.invoke(this, request, response);if(result != null && !result.trim().isEmpty()) {//如果请求处理方法返回不为空int index = result.indexOf(":");//获取第一个冒号的位置if(index == -1) {//如果没有冒号,使用转发request.getRequestDispatcher(result).forward(request, response);} else {//如果存在冒号String start = result.substring(0, index);//分割出前缀String path = result.substring(index + 1);//分割出路径if(start.equals("f")) {//前缀为f表示转发request.getRequestDispatcher(path).forward(request, response);} else if(start.equals("r")) {//前缀为r表示重定向response.sendRedirect(request.getContextPath() + path);}}}} catch (Exception e) {throw new RuntimeException(e);}}}


0 0
原创粉丝点击