Struts快速入门
一、概述
Struts是Apache基于Model2模型(MVC設計模式)開發的一個開源的Web應用框架,由一組相互協作的類或組件、Servlet以及jsp標簽庫組成。
Struts采用攔截器的機制來處理用戶的請求,也使得業務邏輯控制器能夠與Servlet完全脫離,大大縮減了使用MVC模式開發web應用的時間,降低了程序的復雜度,提高了開發效率。
Struts具有如下一些特點:
- 提供了攔截器,利用攔截器可以進行AOP(面向方面)編程,實現如權限攔截等功能
- 提供了類型轉換器,可以把特殊的請求參數轉化成需要的類型
- 提供支持多種表現層技術,如:JSP、FreeMarker等
- 輸入校驗可以對指定的方法進行校驗
- 提供了全局范圍、包范圍和Action范圍的國際化資源文件管理實現
官網地址
二、原理
1、核心控制器FilterDispatcher
FilterDispatcher是Struts框架的核心和基礎,包含了框架內部的控制流程和處理機制。該控制器作為一個Filter運行在Web應用中,負責攔截web.xml文件中指定的用戶請求。如果請求以action結尾,該請求將被轉入Struts框架處理,否則將略過該請求。Struts框架獲得請求后,將根據請求的前面部分決定調用哪個業務邏輯組件。
2、業務控制器Action
Struts應用中的Action都被定義在struts.xml文件中,在該文件中定義了Action的name屬性和class屬性。其中name屬性決定了該Action處理哪個請求,class屬性決定了該Action的實現類。Struts用于處理用戶請求的Action實例,并不是用戶所實現的業務控制器,而是Action代理。Struts框架提供了攔截器,負責將HttpServletRequest請求中的參數解析出來,傳入到Action中,并回調Action的execute方法來處理用戶請求。
3、業務邏輯組件
用于實現具體的業務邏輯。
三、配置
四、工作流程
五、攔截器
Struts2框架的絕大部分功能是通過攔截器來完成的。當FilterDispatcher攔截到用戶請求后,對用戶請求進行處理,然后調用用戶自定義的Action類中的方法來處理請求。
在struts.xml文件中,使用<interceptor>元素來進行定義:
<interceptor name="攔截器名" class="攔截器實現的類"><param name="參數名">參數值</param> </interceptor>有時一個Action要配置不止一個攔截器,這時就要配置多個攔截器組成的攔截器棧:
<interceptor-stack name="攔截器棧名"><interceptor-ref name="攔截器一"></interceptor-ref><interceptor-ref name="攔截器二"></interceptor-ref><interceptor-ref name="攔截器三"></interceptor-ref> </interceptor-stack>Tips:每個包中只能有一個默認的攔截器,一旦為包中的某個action指定了攔截器,則默認的攔截器將不起作用。
Struts提供了攔截器接口Interceptor,其中包含三個方法:
- init(),初始化要使用的資源
- intercept(ActionInvocation invocation),實現攔截的動作
- destroy(),銷毀在init方法中打開的資源
六、校驗
可以通過兩種方式進行校驗:實現validate方法和通過validation配置文件。
1、實現validate方法
在Validateable接口中定義了一個validate()方法,在用戶自定義的Action類中重寫該方法就可以實現校驗功能。當數據校驗發生錯誤時,調用addFieldError()方法向相同的fieldErrors添加校驗錯誤信息。
public?void?validate()?{//會對action中的所有方法進行校驗if(this.username?==?null?||?this.username.trim().equals(""))?{this.addFieldError("username",?"用戶名不能為空!");}if(this.mobile?==?null?||?this.mobile.trim().equals(""))?{this.addFieldError("mobile",?"手機號不能為空!");}?else?{if(!Pattern.compile("^1[358]\\d{9}{1}quot;).matcher(this.mobile).matches())?{this.addFieldError("mobile",?"手機號格式不正確!");}} }如果系統的fieldErrors包含錯誤信息,Struts會將請求結果發送到名為input的result。在Action的配置中添加對input的響應并指定要跳轉的頁面:
<action name="LoginAction" class="com.login.LoginAction"><!-- 定義邏輯視圖和物理資源之間的映射 --><result name="input">/login.jsp</result><result name="error">/error.jsp</result><result name="success">/main.jsp</result> </action>result的name屬性有如下幾種方式:
- success:表示請求處理成功,默認值
- error:表示請求處理失敗
- none:表示請求處理完成后不跳轉
- input:表示輸入時如果驗證失敗應跳轉何處
- login:表示登錄失敗后跳轉何處
在input映射的頁面中通過顯示錯誤信息:
<s:fielderror></s:fielderror> <form?method="post"?action="<%=basePath%>person/save.action">用戶名:<input?type="text"?name="username"/>不能為空<br/>手機號:<input?type="text"?name="mobile"/>不能為空,并且要符合手機號的格式<br/><input?type="submit"?value="提交"/> </form>2、通過validation配置
另一種方式是提供校驗文件,校驗文件和action類在同一個包下,文件命名規則是ActionClassName-validation.xml。在校驗文件中,使用數據校驗器來對表單進行校驗。
<validators><field?name="username"><field-validator?type="requiredstring"><param?name="trim">true</param><message>用戶名不能為空!</message></field-validator></field><field?name="mobile"><field-validator?type="requiredstring"><param?name="trim">true</param><message>手機號不能為空!</message></field-validator><field-validator?type="regex"><param?name="expression"><![CDATA[^1[358]\d{9}$]]></param><message>手機格式不正確!</message></field-validator></field> </validators>Struts提供了大量的數據校驗器,包括表單校驗器和非表單校驗器:
- 必填校驗器,類型為required
- 整數校驗器,類型為int
- 日期校驗器,類型為date
- 郵件地址校驗器,類型為email
- 網址校驗器,類型為url
- 必填字符串校驗器,類型為requiredstring
- 字符串長度校驗器,類型為stringlength
- 正則表達式校驗器,類型為regex
七、標簽
按照標簽的功能大致可以分為兩類:UI標簽和非UI標簽。要想使用Struts標簽,需要在使用標簽的jsp頁面引入標簽庫。
<%@ taglib uri="/struts-tags" prefix="s" %>1、UI標簽
主要用于生成HTML元素,可分為表單標簽和非表單標簽。
表單標簽在語法上與普通的HTML元素標簽類似,在HTML元素前加上“s:”前綴即可。在用法上也基本與普通元素相同。通常情況下,會使用與UI有關的框架來代替這部分標簽。
- <s:form>表單標簽,通常會使用action屬性指定Action類
- <s:submit>、<s:reset>用來提交/重置表單
- <s:hidden>用來表示表單的隱藏域
非表單標簽主要用于生成非表單的可視化元素,如:Tab頁、樹形結構等,也可以用于自定義的組件。還可以用來顯示Action的信息。
- <s:component>用來表示自定義組件
- <s:fielderror>用來輸出表單域的錯誤信息
- <s:actionerror>用來輸出getActionErrors()方法返回的非空信息
- <s:actionmessage>用來輸出getActionMessage()方法返回的信息
2、非UI標簽
主要用于邏輯控制、數據訪問等,可分為控制標簽和數據訪問標簽。
控制標簽包括:
- <s:if>、<s:elseif>、<s:else>用于控制選擇輸出
- <s:append>用于將多個集合拼成一個新的集合,按照集合的排列順序拼接
- <s:generator>用于將一個字符串解析成一個集合
- <s:iterator>用于將集合中的元素迭代輸出
- <s:merge>用于將多個集合拼成一個新的集合,按照各集合中元素的順序拼接
- <s:sort>用于對集合進行排序
- <s:subset>用于截取集合生成新的子集合
數據訪問標簽包括:
- <s:action>允許在jsp頁面中直接使用Action
- <s:bean>用來實例化一個JavaBean
- <s:date>用來格式化輸出日期
- <s:property>用來輸出對象的屬性值
- <s:url>用來創建一個URL地址
- <s:param>用來為其他標簽提供參數
轉載于:https://www.cnblogs.com/gefenghua/p/6403578.html
總結
以上是生活随笔為你收集整理的Struts快速入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: token的理解
- 下一篇: 交互神器 Facebook Origam