Struts2的常見的配置檔案介紹
1:package 定義一個包。 包作用,管理action。 (通常,一個業務模板用一個包)
常見屬性及其說明:
(1)name 包的名字;以方便在其他處引用此包,此屬性是必須的。 包名不能重複;
(2)extends 當前包繼承自哪個包,用於宣告繼承的包。在struts中,包一定要繼承struts-default ;
struts-default在struts-default.xml中定的包
(3)abstract 表示當前包為抽象包; 抽象包中不能有action的定義,否則執行時期報錯
abstract=true 只有噹噹前的包被其他包繼承時候才用!
如:
<package name="basePackage" extends="struts-default" abstract="true"></package>
<package name="user" extends="basePackage">
(4) namespace 指定名稱空間,也就是訪問此包下的Action需要訪問的路徑,預設為"/"
作為路徑的一部分
訪問路徑= http://localhost:8080/專案/名稱空間/ActionName
2:action 配置請求路徑與Action類的對映關係, 常見屬性及其說明:
(1)name 請求路徑名稱,用於配置Action物件被請求的URL對映
(2)class 請求處理的aciton類的全名
(3)method 請求處理方法,設定請求Action物件時,呼叫物件的哪一個方法。
3:result 常見屬性及其說明:
(1)name action處理方法返回值 。
(2)type 跳轉的結果型別,用於設定返回結果的型別,如請求轉發,重定向等。
(3)標籤體中指定跳轉的頁面。
簡單的配置如下所示:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 4 "http://struts.apache.org/dtds/struts-2.0.dtd"> 5 6 <struts> 7 <!-- 生命包 --> 8 <package name="helloWorld" extends="struts-default" abstract="false" namespace="/"> 9 <!-- 定義action --> 10 <action name="hello" class="com.bie.HelloAction" method="execute"> 11 <!-- 顯示成功的jsp頁面 --> 12 <result name="success" type="dispatcher">success.jsp</result> 13 </action> 14 </package> 15 </struts>
4:萬用字元實現簡化配置
第一步:引包,略過,前面已經寫過
第二步:配置web.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 3 <display-name>struts2_20170219</display-name> 4 <welcome-file-list> 5 <welcome-file>index.html</welcome-file> 6 <welcome-file>index.htm</welcome-file> 7 <welcome-file>index.jsp</welcome-file> 8 <welcome-file>default.html</welcome-file> 9 <welcome-file>default.htm</welcome-file> 10 <welcome-file>default.jsp</welcome-file> 11 </welcome-file-list> 12 13 <!-- 引入struts2的核心過濾器 --> 14 <filter> 15 <!-- 過濾器的名稱 --> 16 <filter-name>struts2</filter-name> 17 <!-- 過濾器類 --> 18 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 19 </filter> 20 <filter-mapping> 21 <!-- 過濾器名稱 --> 22 <filter-name>struts2</filter-name> 23 <!-- 過濾器對映 --> 24 <url-pattern>/*</url-pattern> 25 </filter-mapping> 26 </web-app>
第三步:開發action
1 package com.bie; 2 3 import com.opensymphony.xwork2.ActionSupport; 4 5 /** 6 * @author BieHongLi 7 * @version 建立時間:2017年2月20日 下午1:29:55 8 * 9 */ 10 public class RegisterAction extends ActionSupport{ 11 12 private static final long serialVersionUID = 1L; 13 14 public String login(){ 15 System.out.println("登陸的方法"); 16 return SUCCESS; 17 } 18 19 public String register(){ 20 System.out.println("註冊的方法"); 21 return SUCCESS; 22 } 23 }
第四步:配置struts.xml,先使用了普通的方法,後使用了萬用字元進行配置;
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 4 "http://struts.apache.org/dtds/struts-2.0.dtd"> 5 6 <struts> 7 <!-- 宣告包 --> 8 <package name="helloWorld" extends="struts-default" abstract="false" namespace="/"> 9 <!-- 定義action --> 10 <action name="hello" class="com.bie.HelloAction" method="execute"> 11 <!-- 顯示成功的jsp頁面 --> 12 <result name="success" type="dispatcher">success.jsp</result> 13 </action> 14 </package> 15 16 <!-- 宣告包 --> 17 <package name="login" extends="struts-default" abstract="false" namespace="/"> 18 <action name="login" class="com.bie.RegisterAction" method="login"> 19 <result name="success">success.jsp</result> 20 </action> 21 22 <action name="register" class="com.bie.RegisterAction" method="register"> 23 <result name="success">success.jsp</result> 24 </action> 25 </package> 26 27 <!-- 萬用字元的實現簡單配置 --> 28 <package name="loginRegister" extends="struts-default" abstract="false" namespace="/"> 29 <action name="login_*_*" class="com.bie.RegisterAction" method="{1}"> 30 <result name="success">success.jsp</result> 31 </action> 32 </package> 33 </struts>
結果如下,訪問的時候如此訪問即可。
5:struts-default.xml詳解
目錄:struts-core.jar/struts-default.xml詳解
內容:
(1):bean節點指定了struts在允許的時候建立的物件型別
(2):指定struts-default包【使用者寫的package一樣要繼承此包】
(3):package struts-default中定義了:
a:跳轉的結果型別:
dispatcher轉化,不指定預設為轉發;
redirect重定向;
redirectAction重定向到action資源;
stream檔案下載的時候使用;
b:定義了所有的攔截器;
定義了32個攔截器,
為了攔截器引用方便,可以通過定義棧的方式引用攔截器
此時如果引用了棧,棧中的攔截器都會被引用;
c:預設執行的攔截器棧,預設執行的action;
<default-interceptor-ref name="defaultStack"/>
<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
6:攔截器,攔截器功能與過濾器功能類似
相同點和不同點:
共同點:都是攔截資源的;
不同點:攔截器,攔截所有資源都可以,包括.jsp,servlet,css,js,img等等,過濾器是servlet的概念,可已在struts中使用和servlet中使用;
過濾器,只攔截action請求;是struts的概念,攔截器只在struts2中使用。
7:struts2的執行流程
伺服器啟動
(1):載入專案web.xml
(2):建立struts核心過濾器,執行filter--->init()方法
struts-default.xml---》核心功能的初始化;
struts-plugin.xml---》struts的相關外掛;
struts.xml使用者編寫的配置檔案;
訪問:
(3):使用者訪問action,伺服器根據訪問路徑名稱,找到對應的action配置,建立action物件。
(4):執行預設的攔截器棧中定義的18個攔截器。
(5):執行action的業務處理方法。