struts2框架是如何應用反射的
阿新 • • 發佈:2019-01-22
在實際開發中很少用到反射,但在許多框架,像struts2等,下面我就用個簡單的例子解釋反射在struts2中的應用過程
// 根據使用者請求的action名,從配置檔案找到該action結點得到class路徑及呼叫的action方法名,以以下片斷為例 /** * <action name="testAction" class="com.action.StrutsTest" method="execute"> <result * name="success">/WEB-INF/jsp/userManage/login.jsp</result> </action> */ String actionClass = "com.action.StrutsTest";// action的執行class String actionMethod = "execute";// 要執行的action方法 // 對應表單裡的引數,呼叫action對應引數的setter方法來注入 Map<String, String> paramMap = (Map<String, String>) request.getParameterMap();// 在這裡我假設所有action的屬性都是String型別的 Class class1 = Class.forName(actionClass); // 得到action的class物件 Object object = class1.newInstance();// 構造一個action例項 // 將表單裡的所有引數值設定到action中 for (Entry<String, String> entry : paramMap.entrySet()) { // 得到每個引數的setter方法 Method method = class1.getMethod(new StringBuffer("set").append(entry.getKey().substring(0, 1).toUpperCase()) .append(entry.getKey().substring(1)) .toString(), entry.getKey().getClass()); // 呼叫action中每個引數的setter方法來給action屬性注入值 method.invoke(object, entry.getValue()); } // 得到處理action請求的函式入口 Method method2 = class1.getMethod(actionMethod); String returnSuccess = String.valueOf(method2.invoke(object));//處理請求,得到返回值 // 實際上這裡應該是根據returnSuccess去對應action下取出jsp路徑的,這裡我就寫死 String jspPath = "index.jsp"; request.getRequestDispatcher(jspPath).forward(request, response);// 類似struts1跳到指定頁面