struts2學習04——資料封裝核心機制
阿新 • • 發佈:2019-02-07
struts2的資料封裝,主要是藉助java反射機制實現的,下面通過簡單的程式碼示例來回顧一下今天的學習。
struts2框架,將資料的封裝工作完成了,我們只需要定義一個例項物件,並按照規定語法來編寫,就可以自動的獲取到頁面表單的資料,並封裝到例項類中,例如上面的us例項。 為了完成從頁面獲取資料,並將其封裝到例項類中,需要以下步驟: 1.在請求傳送過來,進入action之前,先執行getModel方法,獲取要將表單資料封裝到哪個實體類中
2.得到該物件後,我們可以獲得 類型別
3./獲得類型別之後, 獲取類屬性
4.request.getParameterNames()獲取表單提交的資料名
5.從而獲取表單提交的資料
6.如果表單中資料name和實體類中的屬性名一致
7.將表單資料寫入實體類中 例如上面的LoginServlet相當於在struts2開發中的Action,那麼他的父類BaseServlet就相當於struts2開發中的ActionSupport類 則根據上面的分析,我們可以實現出BaseServlet中doPost的程式碼:
通過模型驅動的方式,我們在Action中,常會出現以下的程式碼:
public class LoginServlet extends BaseServlet { Users us = new Users(); public String execute() throws Exception { System.out.println(us.getUsername()); System.out.println(us.getPassword()); return "success"; } public Users getModel() { return us; } }
struts2框架,將資料的封裝工作完成了,我們只需要定義一個例項物件,並按照規定語法來編寫,就可以自動的獲取到頁面表單的資料,並封裝到例項類中,例如上面的us例項。 為了完成從頁面獲取資料,並將其封裝到例項類中,需要以下步驟: 1.在請求傳送過來,進入action之前,先執行getModel方法,獲取要將表單資料封裝到哪個實體類中
2.得到該物件後,我們可以獲得 類型別
3./獲得類型別之後, 獲取類屬性
4.request.getParameterNames()獲取表單提交的資料名
5.從而獲取表單提交的資料
6.如果表單中資料name和實體類中的屬性名一致
7.將表單資料寫入實體類中 例如上面的LoginServlet相當於在struts2開發中的Action,那麼他的父類BaseServlet就相當於struts2開發中的ActionSupport類 則根據上面的分析,我們可以實現出BaseServlet中doPost的程式碼:
public class BaseServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { Method method = this.getClass().getDeclaredMethod("getModel", null); Object ob = method.invoke(this, null); System.out.println(ob); Field[] fd = ob.getClass().getDeclaredFields(); Enumeration<String> em = request.getParameterNames(); while(em.hasMoreElements()){ String fieldName = em.nextElement().toString(); System.out.println("表單的屬性名:"+fieldName); for(int i=0;i<fd.length;i++){ if(fd[i].getName().equals(fieldName)){ String val = request.getParameter(fd[i].getName()); fd[i].setAccessible(true); fd[i].set(ob, val); } } } } catch (Exception e) { e.printStackTrace(); } } }