一个 package内的结构
package标签的书写格式与命名属性
<package name="package的名字" extends="struts-default" namespace="默认值是/">
</package>
action标签在package中可以有多个,它内部可以配置result标签和拦截器 interceptor
<package name="package的名字" extends="struts-default" namespace="默认值是/">
<action name="action的名字,未来与namespace一起书写在地址栏中"
calss="action的全限定名"
method="在DMI开发模式中使用,制定当次请求调用方法的名字"
</action>
</package>
result标签写在action中,用于指定跳转的页面,一个action可以有多个result标签
<!--跳转类型分为
action到action
请求转发:type="chain" 请求重定向:="redirectAction"
action到jsp
请求转发: 默认:type="request" 请求重定向:="redirect"
-->
<package name="package的名字" extends="struts-default" namespace="默认值是/">
<action name="action的名字,未来与namespace一起书写在地址栏中"
calss="action的全限定名"
method="在DMI开发模式中使用,制定当次请求调用方法的名字">
<result name="书写在action中的返回值" type="跳转类型">
</result>
</action>
</package>
如果多个action中有相同的result时可以把这个result写在全局配置中
<!--
全局跳转标签写在action标签的上方
-->
<package name="package的名字" extends="struts-default" namespace="默认值是/">
<global-results>
<result name="书写在action中的返回值" type="跳转类型">
</global-results>
<action name="action的名字,未来与namespace一起书写在地址栏中"
calss="action的全限定名"
method="在DMI开发模式中使用,制定当次请求调用方法的名字">
<result name="书写在action中的返回值" type="跳转类型">
<!--一般这里添加的是要跳转的页面,在跨包跳转需要在这里添加
一组<param>标签-->
<param name="namespace">跳转的包的namespace</param>
<param name="actionname">跳转的action的名字</param>
</result>
</action>
</package>
在package中配置拦截器
拦截器的主要作用是讲多个action中的共性的冗余的代码定义到过滤器中提高代码的复用性,例如强制登录。
拦截器类似于过滤器的使用,需要先写一个类实现interceptor接口重写其中的intercept方法,还需要在Struts.xml中对拦截器进行配置
public class MyInterceptor implements Interceptor{
//核心需要实现的方法,返回值的含义和result中的需要跳转的视图的返回值含义相同,如果是null的话不做跳转。
public String intercept(ActionInvocation ai) throws Exception{
//让请求向下面执行
ai.invoke();//类似于chain.dofilter();
return null;
}
}
在Struts.xml中配置拦截器的格式
<!--拦截器需要在package内配置-->
<interceptors>
<interceptor name="拦截器的名字" class="拦截器的全限定名"></interceptor>
</interceptors>
拦截器配置需要在包内,在全局跳转的上方
<package name="package的名字" extends="struts-default" namespace="默认值是/">
<interceptors>
<interceptor name="拦截器的名字" class="拦截器的全限定名"></interceptor>
</interceptors>
<global-results>
<result name="书写在action中的返回值" type="跳转类型">
</global-results>
<action name="action的名字,未来与namespace一起书写在地址栏中"
calss="action的全限定名"
method="在DMI开发模式中使用,制定当次请求调用方法的名字">
<!--在需要拦截器的action中进行配置-->
<interceptor-ref name="引用拦截器的名字"></interceptor-ref>
<result name="书写在action中的返回值" type="跳转类型">
<!--一般这里添加的是要跳转的页面,在跨包跳转需要在这里添加
一组<param>标签-->
<param name="namespace">跳转的包的namespace</param>
<param name="actionname">跳转的action的名字</param>
</result>
</action>
</package>
拦截器栈的概念:拦截器栈中可以存放多个拦截器供action使用
<interceptor-stack name="拦截器栈的名字">
<interceptor-ref name="存放的拦截器的名字"></interceptor-ref>
<!--在action中引用拦截器栈和引用拦截器操作是一样的,只是<interceptor-ref>中name属性的由拦截器的名字改为了拦截器栈的名字
拦截器栈中拦截器的执行顺序是定义拦截器的顺序
-->
</interceptor-stack>
定义当前包内所有action默认使用的拦截器或拦截器栈
注意: 当引用了自己的拦截器栈或拦截器后, 会覆盖掉系统默认拦截器,导致无法使用Struts2框架的很多功能。
<default-interceptor-ref name="拦截器或拦截器栈的名字"></default-interceptor-ref>