9.Struts 2配置詳解
1.Struts 2執行過程解析
簡單程式執行流程圖如下:
logon.jsp——>StrutsPrepareAndExecuteFilter——>Action——>Result——>manager.jsp
1.1web.xml
Struts 2框架需要在web.xml中配置其核心控制器——StrutsPrepareAndExecuteFilter
用於對框架進行初始化,以及處理所有的請求。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter< /filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
StrutsPrepareAndExecuteFilter作為一個Filter在web應用中執行,他負責攔截所有的使用者請求,當用戶請求達到時,該Filter會過濾使用者請求
2.Action
在Struts 2框架上,控制器由兩部分組成,分別如下:
核心控制器(Filter),用於攔截使用者請求,對請求進行處理.
業務控制器(Action):呼叫相應的Model類實現業務處理,返回結果
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<action name="login" class="action.UserAction">
<result name="success">main.jsp</result>
<result name="error">login.jsp</result>
</action>
</struts>
2.Struts 2的配置檔案
2.1Struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="" value=""/>
<action name="" class="">
<result name=""></result>
</action>
</struts>
constant元素:用於配置常量,通過常量的配置,改變struts 2框架的一些行為,從而滿足不同應用的需求.name表示敞亮的名稱,value屬性表示常量的值
比如:解決亂碼:
constant name="struts.il8n.encoding" value="UTF-8"/>
name:為必須的並且是唯一的,用來指定包的名稱(被其他包引用)
extends:類似java中extends關鍵字,指定要拓展的包
namespace:可選屬性,指該包中action的名稱空間
2.2 拆分配置檔案
<struts>
<include file="action/Userstruts.xml"></include>
<include file="action/Housestruts.xml"></include>
</struts>
3.Action的配置
action的作用:
- 最重要的作用是給指定的請求封裝需要做的實際工作(呼叫特定的業務處理類)
- 為資料的轉移提供場所
- 幫助框架決定由那個結果呈現請求響應
method屬性:
指定具體方法執行處理邏輯
3.1萬用字元的使用
<action name="*User" class="action.UserAction" method="{1}">
<result name="success">{1}_success.jsp</result>
<result name="input">{1}.jsp</result>
<result name="error">error.jsp</result>
</action>
*:只要是User結尾的URL,都可以進入這個action
{1}:使用相對用的,也就是星號所代表的一個字串
3.2配置預設的action
解決:不存在的action
元素:<default-action-ref/》
注意:每個package下只能有一個元素
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="defaultAction">
<action name="defaultAction">
<result>error.jsp</result>
</action>
</package>
4.Result配置
兩部分組成:
所代表的實際資源的位置及result名稱
另一部分是result型別,由result元素的type屬性進行設定
4.1常用結果型別
1.dispatcher型別(預設)
轉發
2.redirect型別
重定向
3.redirectAction型別
重定向到一個action。也就是說,當請求完成後,需要在另一個action中繼續處理請求
4.2動態結果
4.3全域性結果
在一些情況下,多個action可能需要訪問一個結果,這時需要配置全域性結果來滿足多個action共享一個結果的要求
<package name="demo1" extends="struts-default">
<global-results>
<result name="success">showHouse.jsp</result>
<result name="error">login.jsp</result>
</global-results>