日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Struts快速入门

發布時間:2025/3/21 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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、業務邏輯組件

用于實現具體的業務邏輯。

三、配置

  • 從Struts官網下載相應版本的壓縮文件,解壓縮
  • 將需要的jar包拷貝到工程WEB-INF/lib目錄下
  • 配置struts.xml文件,添加Action的相關配置
  • 配置web.xml文件,添加啟動Struts的過濾器
  • 四、工作流程

  • 客戶端瀏覽器發送HTTP請求
  • Servlet容器通過web.xml映射請求,獲得控制器的名字,并調用控制器FilterDispatcher(2.1版本以前)或StrutsPrepareAndExecuteFilter(2.1版本以后)
  • 控制器通過ActionMapper獲得Action的信息,并調用ActionProxy
  • ActionProxy通過ConfigurationManager讀取struts.xml文件獲取action和interceptor信息,并把請求傳遞給ActionInvocation
  • ActionInvocation依次調用action和interceptor,根據action的配置信息,產生result
  • 將Result信息返回給ActionInvocation
  • 生成HttpServletResponse響應,并將其發送給客戶端
  • 五、攔截器

    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快速入门的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。