如何利用反射簡化Servlet操作
一、反射的實現
新建類BaseServlet,繼承HttpServlet(不需要在web.xml文件中配置)
1、在doPost()方法中處理請求亂碼,並調用doGet()方法
//處理post請求亂碼,只需要在getParamter方法第一次調用前,設置request的編碼
request.setCharacterEncoding("utf-8");
調用doGet()
2、doGet()中:
//獲取用戶傳遞的請求參數
String methodName = request.getParameter("method");
//通過方法名獲取到方法的對象
//獲取當前類的Class對象
Class cla = this.getClass();
//獲取cla的方法(Method對象)
//getDeclaredMethod需要兩個參數,方法名和參數名
//因為在java需要通過方法名和參數列表來確定一個方法
try {
//獲取方法對象
Method method = cla.getDeclaredMethod(methodName, HttpServletRequest.class , HttpServletResponse.class);
//設置方法的訪問權限
method.setAccessible(true); //該方法可以取消Java的權限控制檢查,就可以調用類的私有屬性和方法
//調用方法
//invoke用於調用一個方法,第一個參數時要調用方法的對象,剩下是調用方法需要的參數
method.invoke(this, request , response); //方法調用,傳遞調用對象及參數
} catch (Exception e) {
e.printStackTrace();
}
二、反射的應用
1、新建的Servlet繼承BaseServlet類,不需要重寫doGet和doPost方法,直接寫不同的處理方法,注意方法名要與methodName的值相匹配
2、執行流程:
頁面提交表單到對應Servlet
該Servlet由於繼承了BaseServlet類,會調用父類的doGet或doPost方法,
通過頁面獲取的參數,調用該Servlet對應名稱的方法