1. 關於strut2攔截器:一個總的strut.xml文件,多個其他模塊的配置文件。
試試external-ref
<external-ref name="mydefault">???</external-ref>
2. struts攔截器,在struts2配置文件中加入自定義的攔截器就出錯
<package name="myinterceptor" extends="struts-default">
<interceptors>
<interceptor name="myInerceptor" class="com.interceptor.MyInterceptor1"/>
<interceptor-stack name="my">
<interceptor-ref name="myInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="my"/>
<action name="test_interceptor" class="com.action.InterceptorTest">
<result name="success">/interceptorsuccess.jsp</result>
<result name="input">/Hello.jsp</result>
</action>
</package>
//試試沒壞處
3. 如何配置struts2的過濾器
你說的是攔截器吧
第一步:創建一個昌顫類實現Intercepter介面並實現其中方法
第二步:注冊攔截器(在struts.xml)如:
<package name="cust"
namespace="/cust"
extends="struts-default">
<interceptors>
<!-- 注冊攔截器 -->
<interceptor name="first"
class="com.interceptor.FirstInterceptor"/>
<interceptor name="second"
class="com.interceptor.SecondInterceptor"/>
<!-- 注冊攔截器棧,將所有攔皮中截器打包在一起 -->
<interceptor-stack name="mystack">
<interceptor-ref name="first"/>
<interceptor-ref name="second"/>
<!-- 引用自定義的攔截器時,會使struts2自帶的攔截器失效
因此,要將默認的攔截器加入到自定義的攔截器棧中 -->
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<!--第三步: 引用攔截器 ,
<action name="toUpdateCustomer"
class="com.action.ToUpdateCustomerAction"
method="execute">
<!-- 引用攔截器 ,
<interceptor-ref name="first"/>
<interceptor-ref name="first"/>-->
<!-- 引用攔截器棧,會一次將所有的攔截器引用燃迅山 -->
<interceptor-ref name="mystack"/>
<result name="success">
/WEB-INF/cust/update_customer.jsp
</result>
</action>
</package>
供參考
4. 誰能詳細給我解釋一下struts2的一個配置文件中<action name,class,method,result>
java">配置包時必須指定name屬性,該name屬性值可以任意取名,但必須唯一,如果其他包要繼承該包,必須通過該屬性進行引用,包的namespace屬性用於定義該包的命名空間,命名空間作用為訪問該包下的action路徑的一部分,見示例.namespace屬性可以不配置,如果不指定該屬性,默認的命名空間為」」
通常每個包都應該繼承struts-default包,因為struts2很多核心功能都是攔截來實現的,如,從請求中把請求參數封閉到action,文件上傳和數據驗證等都是通過攔截器實現的,struts-default定義了這些攔截器和Result類型,可以這么說,當包繼承了struts-default才能使用struts2提供的核心功能,struts-default包是在struts2-core-2.xx.jar文件中的struts-defalut.xml中定義,struts-default.xml也是struts2默認配置文件,struts2每次都會自動載入struts-default.xml文件.
Action元素method屬性,默認值為method=」execute」,也就是當action接收到請求後,交給哪個方法去處理,默認的是交給execute方法去處理,當然,也可以交給其他方法,{1}代表通配符,比如你上面的{1}index,我訪問aaidex,bbindex都能夠跳到此控制機器定義的這個方法
<resultname="success">/WEB-INF/JspPage/chapter1/HelloWorld.jsp</result>
result元素主要定義視圖的跳轉和返回的行為及類型、你定義的indexAction變小寫是因為這是為spring接管了,。你spring配置文件中肯定有個bean的id是indexAction,class路徑指向包名+類名。
struts.enable.SlashesInActionNames:該常量設置struts2是否允許action名中使用斜線,該常量的默認值是false。如果希望使用斜線,將該常量值設置成true即可。比如actionname="aa/bb"
5. struts2的web.xml有哪些配置
<!--配置過濾器,如下設置是struts2的主要攔截器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<!-- 對應於<filter>配置的<filter-mapping>,一個filter可以對應配置多個<filter-mapping> -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
注意:<filter-mapping>中的<filter-name>必須跟<filter>中的<filter-name>相同。
這些個東西是在你發出請求的時候就執行的,比如你配置的那個/*是指無論你發出什麼請求都要走struts2的攔截器,通過攔截器來查找你請求的東西,並作出響應;我後來配置的那個*.action是當你發出action請求時也得經過struts2的攔截器,你也可以只寫
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
6. struts2 的struts.xml文件怎麼配置
<!-- include節點是struts2中組件化的方式 可以將每個功能模塊獨立到一個xml配置文件中 然後用include節點引用 -->
<include file="struts-default.xml"></include>
<!-- package提供了將多個Action組織為一個模塊的方式
package的名字必須是唯一的 package可以擴展 當一個package擴展自
另一個package時該package會在本身配置的基礎上加入擴展的package
的配置 父package必須在子package前配置
name:package名稱
extends:繼承的父package名稱
abstract:設置package的屬性為抽象的 抽象的package不能定義action 值true:false
namespace:定義package命名空間 該命名空間影響到url的地址,例如此命名空間為/test那麼訪問是的地址為http://localhost:8080/struts2/test/XX.action
-->
<package name="com.kay.struts2" extends="struts-default" namespace="/test">
<interceptors>
<!-- 定義攔截器
name:攔截器名稱
class:攔截器類路徑
-->
<interceptor name="timer" class="com.kay.timer"></interceptor>
<interceptor name="logger" class="com.kay.logger"></interceptor>
<!-- 定義攔截器棧 -->
<interceptor-stack name="mystack">
<interceptor-ref name="timer"></interceptor-ref>
<interceptor-ref name="logger"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 定義默認的攔截器 每個Action都會自動引用
如果Action中引用了其它的攔截器 默認的攔截器將無效 -->
<default-interceptor-ref name="mystack"></default-interceptor-ref>
<!-- 全局results配置 -->
<global-results>
<result name="input">/error.jsp</result>
</global-results>
<!-- Action配置 一個Action可以被多次映射(只要action配置中的name不同)
name:action名稱
class: 對應的類的路徑
method: 調用Action中的方法名
-->
<action name="hello" class="com.kay.struts2.Action.LoginAction">
<!-- 引用攔截器
name:攔截器名稱或攔截器棧名稱
-->
<interceptor-ref name="timer"></interceptor-ref>
<!-- 節點配置
name : result名稱 和Action中返回的值相同
type : result類型 不寫則選用superpackage的type struts-default.xml中的默認為dispatcher
-->
<result name="success" type="dispatcher">/talk.jsp</result>
<!-- 參數設置
name:對應Action中的get/set方法
-->
<param name="url">http://www.sina.com</param>
</action>
</package>