BaseServlet的作用:
我们先写一个工具类:BaseServlet。
我们知道,写一个项目可能会出现N多个Servlet,而且一般一个Servlet只有一个方法(doGet或doPost),如果项目大一些,那么Servlet的数量就会很惊人。为了避免Servlet的“膨胀”,我们写一个BaseServlet。它的作用是让一个Servlet可以处理多种不同的请求。不同的请求调用Servlet的不同方法。我们写好了BaseServlet后,让其他Servlet继承...
package com.itheima.web.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; /** * 通用的serlvet */ public class BaseServlet extends HttpServlet { @Override public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置编码表 request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); // 接收参数 String methodName = request.getParameter("method"); //System.out.println(methodName); // 如果method传递的参数为空或者为空字符串,做出提示 if (methodName == null || "".equals(methodName)) { methodName = "index";//不传方法名称,直接访问主页 response.getWriter().print("method参数为null"); } // 获得子类的class对象 /** * 反射 反射 反射 * * this.class代表加载继承了BaseServlet的class对象 * 比如UserServlet继承BaseServlet,那么this.getClass()就是获取它的字节码对象 */ Class<? extends BaseServlet> clazz = this.getClass(); //System.out.println(clazz); // 通过字节码获得子类的方法 try { //通过方法名称获取方法的反射对象 Method method = clazz.getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class); // 执行方法,获取子类return回来的字符串 String path = (String) method.invoke(this, request, response); // 转发 if (path != null) { request.getRequestDispatcher(path).forward(request, response); } } catch (Exception e) { e.printStackTrace(); } } //所有的servlet的index方法,子类可以重写 public String index(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { return null; } }
    小楼昨夜又东风
倾听一夜相思雨
 
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号