struts2知識點總結1
struts2知識點總結
- 什麼是Struts2
Struts2 是一個MVC框架,重點在控制器上
Struts1 + xword=Struts2
背景:在web開發中,不同的功能採用不同的Servlet,造成維護和管理的不便;
struts2通過過濾器,將不同的操作引導到不同的方法執行中去。
- Struts2 的配置
- 匯入jar包 Struts2的壓縮包->apps->struts2-rest-showcase.war->
WEB-INF->lib(匯入struts2-rest-plugin-2.5.18.jar可能會報錯,所以可以不匯入該包)
- 建立action,action是一個類,每次訪問action的時候,預設會執行execute()
- 配置action的訪問路徑,建立Struts2核心配置檔案:核心配置檔名稱和位置是固定的,名稱:struts.xml 位置:/src (普通javaee專案),maven專案在資原始檔下
- 引入dtd的約束:struts2-core-2.* ->struts-2.*.dtd中有對應的約束
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
- action的配置(核心標籤):
package:
name屬性:包的名稱,用於區分Action
extends:標準宣告,繼承struts-default
namespace:名稱空間,用於宣告訪問專案的根路徑
action:
name 屬性:action 的訪問名稱
class:action 類的全路徑
method:執行action中的指定方法(預設執行execute)
result:
name:和方法的返回值對應
type:指定頁面請求的方式
dispatcher(預設,轉發)
redirect:重定向(到jsp)
redirect-action:重定向到(action)
chain:訪問鏈
- 在web.xml 中配置過濾器
<filter>
<filter-name>action</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>action</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- struts2的執行過程
關於過濾器:StrutsPrepareAndExecuteFilter
過濾器在服務啟動的時候建立,建立過程時執行init方法,並載入配置檔案,包括自帶的配置檔案
default.properties
struts-default.xml
struts-plugin.xml
struts.xml
struts.propersties
web.xml
前三個是struts2 的標準內部配置檔案,無法修改,後三個可以,我們的配置重點在後面三個檔案中;啟動載入有順序;struts2 可以配置常量,後三個檔案都可以,但後面宣告的會覆蓋之前的常量
- 在struts2中配置修改常量
在struts.xml中修改(常用)
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
在src下建立struts.properties,並在其中修改(較少用)
在web.xml中建立(少用)
在struts2中,通過表單向action提交資料中含有中文時,框架會幫我們解決編碼的問題,不需要額外處理
- struts2的分模組開發
使用include標籤
<include file="com/ehome/action/hello.xml"></include>
- action的三種編寫方式
- 宣告一個普通的action類,不繼承也不實現任何介面
- 建立類,實現Action介面
- 建立類,繼承ActionSupport(主要)
- 訪問action的方法(重要)
- 使用action標籤的method屬性,通過設定,指定要執行的action
- 使用萬用字元,在action標籤中,用*來設定name屬性
但struts2 2.5需要在package中配置
<global-allowed-methods>regex:.*</global-allowed-methods>
- 動態訪問方式(瞭解)
在action方法中存在返回值,如果有返回值則必須是String,也可以沒有返回值,指定execute方法返回值為void,或者返回NONE,在result標籤中就不需要配置
- 結果頁面配置
全域性結果頁面:
如果有多個action,它們的返回值相同、配置的頁面也相同
<!--全域性結果配置,區域性優先順序更高-->
<global-results>
<result name="success">/hello.jsp</result>
</global-results>
注:注意標籤的順序 <global-results> 要在<global-allowed-methods>regex:.*</global-allowed-methods> 之前,攔截器在最前面
區域性結構介面:
<action name="form_*" class="com.xh.ehome.control.FromAction" method="{1}">
<result name="context">/context.jsp</result>
</action>
- 在action中獲取表單提交的順序
- 使用ActionContext獲取(非重點)
- 使用ServletActionContext(重要)
- 使用介面注入方式(少用)
核心: 實現ServletRequestAware介面
實現介面:
重寫setServletRequest方法,一旦被呼叫,就可以獲取request物件
把該物件賦值給Action自己定義的request物件(傳遞引用)
4、在action中操作域物件
request、session、servletContext 三種作用域的傳值
核心:使用ServletActionContext
在jsp中通過域物件獲取資料
- Struts2 提供獲取表單資料的方式(將獲取的表單資料進行封裝)
4.1 使用request分別獲取屬性,並呼叫bean方法(原始)
4.2屬性封裝:在action中宣告表單項對應的欄位,並指定bean方法即可
4.3 模型驅動封裝(可以直接把值封裝到物件中,重點)
核心:
action實現ModelDriven介面,並重寫getModel方法
在action中宣告實體類物件並例項化
在getModel方法中返回該實體物件,完成
注意:不能同時使用屬性封裝和模型驅動封裝,如果都用,只會執行模型驅動封裝(定義的屬性將得不到值)
4.4 表示式封裝(非重點)
核心:
把表單資料封裝到實體類物件中,只需建立物件不需例項化,
為該物件宣告get和set
在表單輸入項中寫表示式: user.username
表示式封裝和模型驅動封裝對比:都可以把資料封裝到實體類物件中去
但,模型驅動封裝只能封裝到一個實體類物件中,而表示式封裝可以封裝到多個不同的物件中
4.5表單資料封裝到List/Map 中(和表示式封裝類似)
List的封裝
Map的封裝