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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Struts2学习总结(完整版)

發布時間:2023/12/10 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Struts2学习总结(完整版) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Struts2學習總結(完整版)

一、搭建struts2環境

1、jar包的導入

主要是到

?

?

解壓其中的一個工程,得到里面lib下包含的jar

?

?

?

?

把這里的所有的jar包拷貝到項目的

WEB-INF目錄下的lib文件夾下面。

?

2、配置struts.xml文件

注意:必須要放在src目錄下,因為struts2源碼就是這樣設計的,只有在src目錄下才讀取得到。

?

?

每一個package都要extends=”struts-default”namespace 是 訪問的路徑

????

?

Action中的namepackage中的namespace組成完整的訪問路徑

?

3、配置web.xml

<filter>

????????<filter-name>action2</filter-name>

<filter-class>

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

</filter-class>

</filter>

<filter-mapping>

????????<filter-name>action2</filter-name>

????????<url-pattern>/*</url-pattern>

</filter-mapping>

?

?

4、編寫的Action類都要繼承ActionSupport類或者implements Action接口

?

??默認action類訪問的是里面的execute方法

?

?

如果要訪問特定的方法,可以這樣:

(1)action 后面指定 method=“方法名”

(2)使用通配符 ?<action name=”example_*”??class=”com.XX.YY.ZZ”?method=”{1}”?/>

(3)使用動態表達式 ?比如example!execute(不常用)

?

5、接收表單提交的數據

(1)屬性驅動獲取表單參數

--action類中定義與表單的input中 ?name ?一樣的屬性(必須一樣,否則注入不進去)

同時還要生產屬性對應的set 方法,因為 action類要調用set方法把表單中的參數注入到屬性中

(2)模型驅動獲取表單參數

--模型驅動首先action類要實現ModelDrivern,然后重寫getModel方法

--action類中聲明并創建接收表單參數的實體類(Student user = new Student())

--原理分析:struts2調用action類的getModel方法,得到user對象,然后利用user對象里面的set屬性的方法,設置user對象的屬性值

--注意,表單的參數name必須要跟Student的屬性值一致,否則注入不進去。

(3)表達式驅動獲取表單數據

--表單提交的時候要注明是哪個類的,比如user.name

--然后action類要生成user對象的get方法,可以讓struts2獲取到actionuser對象,然后調用user對象里面的get set方法,把參數注入到user對象的屬性中去。

--表達式驅動的方式的好處是,表單可以傳遞多個不同pojo的對象上來,比如不僅可以上傳user的,也可以上傳book的。這樣,在表單中input中表明 name的時候,寫上 ?user.xxx ?book.xxx

--表達式還支持 ?map list 表單,可以同時上傳多分一樣的參數(不常用)

Map[“one”].name -> getMap<String , Student>

List[0].name ???-> getList<Student>

下面的圖是參考這貨的

http://www.cnblogs.com/lolybj/tag/struts2/

?

?

?

6、把要顯示的數據傳給前端JSP頁面

? 原理是利用到struts2的值棧空間,每一次request請求,都會重新創建出一個action類出來,然后在執行action類的方法之前,要經過一系列攔截器的攔截,比如ModelDrivern過濾器進行表單參數的注入。放行后才執行action方法。

以下是action類在值棧中設置數據的三種方法:

1、執行action方法的時候,可以獲取ValueStack,并向ValueStack中插入數據。

2、直接在action類中定義pojo類,并創建好實例,生成get方法,方便jsp那邊獲取。

3、直接在action類中定義list對象,并將pojo類存入到list對象中去。

設置完之后,就會跳轉到指定的jsp頁面。

在指定的jsp頁面中必須導入<%@?taglib?uri="/struts-tags"?prefix="s"?%>?

Struts2的表達式,其實這個表達式底層調用的是ognl表達式,所以一開始的時候要導入ognl表達式的jar包。

Jsp中獲取值棧的數據。有3中方式

1、<s:property value=”插入值棧的變量名”/>

2、<s:iterator value=”list”?>

???<s:property value=”user.username”/> ??//對象名稱.對象屬性

???<s:property value=”user.password”/>

????????</s:iterator>

????3<s:iterator value=”list”?var=”user”>

???<s:property value=”#user.username”/> ??//對象名稱.對象屬性

???<s:property value=”#user.password”/>

????????</s:iterator>

3種為什么要加#號,那是因為 iterator遍歷的時候,先把list中的元素對象先存儲到context的值棧空間里,context值棧空間的數據結構是map 的。所以要提供user作為鍵值,獲取到user對象,然后根據對象的get方法,得到user的屬性值。

這里要說明一下,action的值棧空間有兩部分組織,一部分是root空間,數據類型是list類型的;另一部分是context空間,數據類型是map的。

?

7、最后是攔截器

攔截器和過濾器是不同的概念的東西;

過濾器:在容器上運行的,會過濾htmlimage... 網頁文件。理論上是過濾所有的網頁的

攔截器:只是攔截某一個action操作的

?

攔截器主要運用是 AOP 和 責任鏈的設計模式。所以可以做到在創建action類對象后,但是在執行action方法之間執行。

?

posted on 2017-03-17 14:57 臥似長劍 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/chencanjian/p/6566186.html

總結

以上是生活随笔為你收集整理的Struts2学习总结(完整版)的全部內容,希望文章能夠幫你解決所遇到的問題。

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