Struts2.5 struts是開源框架。使用Struts的目的是為了幫助我們減少在運用MVC設計模型來開發Web應用的時間。如果我們想混合使用Servlets和JSP的優點來建立可擴展的應用,struts是一個不錯的選擇。 Struts 是Apache軟體基金會(ASF)贊助的一個開源項目。它最 ...
Struts2.5
struts是開源框架。使用Struts的目的是為了幫助我們減少在運用MVC設計模型來開發Web應用的時間。如果我們想混合使用Servlets和JSP的優點來建立可擴展的應用,struts是一個不錯的選擇。 Struts 是Apache軟體基金會(ASF)贊助的一個開源項目。它最初是Jakarta項目中的一個子項目,併在2004年3月成為ASF的頂級項目。它通過採用JavaServlet/JSP技術,實現了基於Java EEWeb應用的MVC設計模式的應用框架,是MVC經典設計模式中的一個經典產品。Struts中的MVC
Model部分
由JavaBean組成,ActionForm用於封裝用戶的請求參數,封裝成ActionForm對象,該對象被ActionServlet轉發給Action,Action根據ActionForm裡面的請求參數處理用戶的請求。 JavaBean則封裝了底層的業務邏輯,包括資料庫訪問等。View部分
該部分採用JSP實現。 Struts提供了豐富的標簽庫,通過標簽庫可以減少腳本的使用,自定義的標簽庫可以實現與Model的有效交互,並增加了現實功能。對應視圖的JSP部分。Controller組件
Controller組件有兩個部分組成——系統核心控制器,業務邏輯控制器。 系統核心控制器,對應視圖的ActionServlet。該控制器由Struts框架提供,繼承HttpServlet類,因此可以配置成標準的Servlet。該控制器負責攔截所有的HTTP請求,然後根據用戶請求決定是否要轉給業務邏輯控制器。 業務邏輯控制器,負責處理用戶請求,本身不具備處理能力,而是調用Model來完成處理。對應Action部分。 還有給大家一張圖,這個圖很形象的描述,也很基礎 請求用set,響應用getStruts2.5的環境搭建
第一步:先上官網下載Struts2.5的相關jar包學慣用處的推薦第一個,第一個是一下全部綜合 ,第二個是帶有struts案例的,第三個是迷你版最終開發上線用,第四個是所有的jar包,第五個是幫助文檔
第二步:創建Web項目,這個不會的可以看看這篇Jsp運行環境——Tomcat
第三步:我們下下來的文件中,搭建環境只需要運用到幾個包,還有聲明一下,不同的struts的版本不一樣他的jar包引用也不一樣的,我這裡是Struts2.5的,還有一個是需要註意的是,一般用JSP的都使用Tomcat,這個tomcat的版本也需要在8.0.9以上才可以運行起來
現在挑選幾個jar包,將其放入WEB_INF下的lib目錄下
小小的解釋一下這幾個包的作用:
- commons-fileupload-1.3.3.jar 用於上傳下載
- commons-io-2.4.jar java.io 擴展包
- commons-lang3-3.6.jar java.lang 擴展包
- freemarker-2.3.23.jar 模板引擎
- javassist-3.20.0-GA.jar Java位元組碼庫
- log4j-api-2.8.2.jar 用於記錄日誌
- ognl-3.1.12.jar 標簽庫
- struts2-core-2.5.12.jar 核心包
第四步:需要編寫web.xml文件,只要添加這個filter就可以
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>StrutsProject</display-name> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
第五步:還需要編寫一個Struts.xml文件,這裡面寫一些控制頁面的走向的action實現一下方法啥的,這個文件在src下建立,這裡面我多寫了幾個,有方法的動態調用,還有普通的調用
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <!-- 設置開發者模式 修改action中的名字可以不用重啟伺服器 --> <constant name="struts.devMode" value="true"></constant> <!-- 只有在尾碼中有(.do)的才經過,這個value可以自己修改 --> <constant name="struts.action.extension" value="do"></constant> <!-- 開啟動態方法調用 --> <constant name="struts.enable.DynamicMethodInvocation" value="true"/> <!-- strict-method-invocation="true"指動態的方法調用 --> <package name="default" extends="struts-default" namespace=""> <!-- 只允許本地的方法通過 regex:.* 返回值類型一樣,後期可以修改通配--> <global-allowed-methods>regex:.*</global-allowed-methods> <action name="demo" class="com.action.DemoAction" method="execute"> <result name="success">/index.jsp</result> </action> <action name="login" class="com.action.LoginAction" method="logintest"> <result name="success">/index.jsp</result> <result name="error">/login.jsp</result> </action> <!-- DMI(DynamicMethodInvocation)動態調用 --> <action name="user" class="com.action.StrutsDemo" > <result name="success">/index.jsp</result> </action> </package> </struts>
在這裡解釋一下其中一些屬性的含義
第六步:我先編寫一個jsp的登入頁面,這裡面的login.do 是我在struts中設定的
<body> <form action="login.do" method="post"> 用戶名:<input type="text" name="username"/><br /> 密—碼:<input type="password" name="password"/><br /> <input type="submit" /><br /> </form> </body>
第七步:創建action,也就是創建幾個類去處理一些業務,繼承於ActionSupport,也可以是action,我先寫一個登入界面的action,在jsp頁面傳來的值來判斷
我先說說其中的一些問題所在,在以前我們用的是Servlet來實現這些業務的,接收也是用request.getParameter()來獲取頁面的值的在創建一些方法,調用這些方法邏輯判斷其中是否正確再返回,現在呢,Struts框架幫我們封裝了,將中間的Servlet不需要我們編寫了,想要更深層次的,需要看Struts的源碼,,,只是運用很簡單,獲取只需要定義這個傳過來知道一個變數在利用set方法,而響應傳給頁面用get方法,一般返回的是字元串
public class LoginAction extends ActionSupport { private String username; private String password; private String rString="成功返回"; public String getrString() { return rString; } 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; } public String logintest() { String string=null; if (password.equals("123456")&&username.equals("admin")) { string=SUCCESS; }else { string=ERROR; } return string; } }
在說一下,關於傳值到頁面上可以用EL表達式直接是變數名
就這樣環境搭建和流程的跑通也完成了
【版本聲明】