BaseServlet为某个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; @SuppressWarnings("all") public class BaseServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); try { //1、获得请求的method的名称 String methodName = req.getParameter("method"); //2、获得当前被访问的对象的字节码对象 Class clazz = this.getClass();//ProductServlet.class ---- UserServlet.class //3、获得当前字节码对象的中的指定方法 Method method = clazz.getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class); //4、执行相应功能方法 method.invoke(this, req,resp); } catch (Exception e) { e.printStackTrace(); } } }
那么,可以将Servlet写在一起,指定某个方法名即可代替原来的Servlet,避免过多的Servlet出现
public class ProductServlet extends BaseServlet { public void findAllCategory(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException { //代码 }
}在请求servlet时,只需要传递一个method参数即可调用相应的servlet方法了!