java通过反射实现HttpServlet

来源:互联网 发布:淘宝买啥弓箭好 编辑:程序博客网 时间:2024/04/30 16:38

jsp第一次访问服务器时被编译成servlet,然后通过servlet去进行操作。我们通常去继承HttpServlet,然后实现doGet()和doPost()方法.

java的反射原理其实就是先创建一个实例,然后给它的属性逐一赋值,再把方法绑定到其所属方法内。

所以我们利用反射可以拿到一个类的方法而无需关心其他属性参数,用一个新的servlet继承了这个反射Servlet之后只需要把方法名与http请求的函数名相同即可调用该方法。

详见代码注释。

public class CommonServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 解决乱码问题request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");try {
                        //获得要反射的类模板Class<? extends CommonServlet> clazz = this.getClass();// 获得函数String method = request.getParameter("method");// 获得方反射方法Method method2 = clazz.getMethod(method, HttpServletRequest.class, HttpServletResponse.class);// 调用方法,获得目标路径Object path = method2.invoke(this, request, response);// 调用requset的转发方法,与反射无关if (path != null)request.getRequestDispatcher(path.toString()).forward(request, response);} catch (Exception e) {e.printStackTrace();}}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}