struts是一個基於MVC的Web開發架構。使用Struts的目的是為了協助我們減少在運用MVC設計模型來開發Web應用的時間。如果我們想混合使用Servlets和JSP的優點來建立可擴充的應用,struts是一個不錯的選擇。那麼學習struts首先就是要理解它的架構實現原理,以及如何搭建它的開發環境。正如上所說,struts是基於MVC的,其架構原理如下:
ActionServlet 是一個中央控制器,核心控制類,它與一般的servlet一樣繼承與HttpServlet。
ActionForm 用於頁面收集資料,其實可以理解為頁面資料的實體類。並且它可以自動轉換成相應的資料類型,如age是int類型,那麼從ActionForm擷取getAge時的類型也會是int類型,而不用以前類似(Integer)request.getAttribute("age")那樣強制轉換了。需要注意的是ActionForm的get、set方法後的名稱必須與頁面中資料名稱相同,且首字母大寫,(如:頁面為age,ActionForm中則為getAge、setAge)
Action 是商務邏輯層控制器,傳回型別為ActionForward,他是底層Model的核心控制類,根據商務邏輯來組建表單資料與Model層的交流調用,處理完商務邏輯後返回最終要轉向的頁面資訊ActionForward類。
ActionForward 是封裝了頁面轉向資訊的一個對象,也可以看做是一個實體類。目的是方便資訊傳遞和調用。
Struts環境搭建1. 首先要下載struts的jar包,地址http://struts.apache.org/2. 解壓後將lib檔案夾裡的jar包都加入到項目中3. 在webapps檔案夾中解壓struts-blank.war,將其中的struts-config.xml拷貝到項目中4. 配置web.xml部署ActionServlet。這個格式是相對固定的,所以一般複製即可
<servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>2</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>2</param-value> </init-param> <load-on-startup>2</load-on-startup></servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern></servlet-mapping>
5. 配置struts-config.xml部署Action、ActionForm。其中type均為你項目中Action和ActionForm所在包的完整路徑;name可以隨便起,但是Action中的name必須與它用到的ActionForm的name相一致;再有就是action中要添加scope="request"這個屬性,因為scope預設是session,這個可以根據實際情況自己定。
<struts-config> <form-beans> <form-bean name="loginForm" type="com.wang.struts.LoginActionForm"></form-bean> <!-- 可以有多個ActionForm --> </form-beans> <action-mappings> <action path="/login" type="com.wang.struts.LoginAction" name="loginForm" scope="request"> <forward name="success" path="/login_success.jsp"></forward> <forward name="error" path="/login_error.jsp"></forward> </action> <!-- 可以有多個Action --> </action-mappings></struts-config>
6. 必須繼承Action的類。程式碼範例:
package com.wang.struts; import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping; public class LoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { LoginActionForm loginActionForm = (LoginActionForm)form; String username = loginActionForm.getUsername(); String password = loginActionForm.getPassword(); if ("admin".equals(username) && "admin".equals(password)) { return mapping.findForward("success"); } else { return mapping.findForward("error"); } }}
7. 必須繼承ActionForm的類。範例程式碼:
package com.wang.struts; import org.apache.struts.action.ActionForm; public class LoginActionForm extends ActionForm { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}8. login.jsp、success.jsp、error.jsp這三個頁面略。需要注意的就是login.jsp中的頁面元素要注意與ActionForm中的對應。 好啦,這樣struts的環境架構就基本搭建好了。以上這都是學習Struts的基礎,因此必須多加練習呀。