BaseServlet
package com.cn; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class BaseServlet extends HttpServlet { @Override public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //根据请求的uri获取对应的请求方法 然后在执行对应的方法即可 String requestURI = request.getRequestURI(); int i = requestURI.lastIndexOf("/")+1; String method = requestURI.substring(i); //@WebServlet("/userServlet/*") 这样就从uri中获取到了需要执行的方法 // this 就是 com.cn.UserServlet@78d81ec1 //public class UserServlet extends BaseServlet {} //System.out.println(this); Class clazz = this.getClass(); //获取字节码中所有的方法 try { Method m = clazz.getMethod(method,HttpServletRequest.class,HttpServletResponse.class); m.invoke(this,request,response); } catch (Exception e) { e.printStackTrace(); } } }
Servlet
@WebServlet("/userServlet/*") public class UserServlet extends BaseServlet { public void hello(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("我是hello的方法"); } }
//启动测试 调用Hello方法
http://localhost:8080/Re_Servlet/userServlet/hello