struts-default.xml
文件作用
struts-default.xml文件是Struts核心包中非常重要的配置文件.
在这个文件中,定义了struts启动时默认加载的类和用户使用struts.xml配置Action是需要遵守的约定
bean 节点
bean节点指定了struts在运行时需要创建的对象类型
<struts>
<bean type="com.opensymphony.xwork2.ObjectFactory" name="struts" class="org.apache.struts2.impl.StrutsObjectFactory" />
</struts>
package 节点
package节点用来管理Action . 一个struts下可以有多个package节点, 通常一个业务模板用一个包.
-
name : 是package节点的名称. 一个struts下.name不能重复
-
extends : 在struts.xml文件中.这个属性一定要写,并且一定要继承自"struts-default"包
-
abstract : 如果这个属性为true,表示这个package是个抽象包. 抽象包中不能定义Action,否则会在运行时期报错,只有当前包需要被其他包继承时才使用此属性
-
namespace : 命名空间 . 默认为 " / " .
访问路径 = http://www.google.com / 项目名 / namespace / ActionName
result-type : 跳转结果类型
在页面进行跳转时使用,在struts.xml中配置Action时使用.
常用的跳转结果类型 :
- dispatcher 转发,不指定时,默认为转发
- redirect 重定向
- redirecAction 重定向到Action资源
- stream 文件下载时用
interceptors : 拦截器
拦截器功能与过滤器功能类似
共同点 : 都拦截资源
区别 : 过滤器 : 过滤所有资源都可以 (/index.jsp / servlet / img / css / js)
拦截器 : 只拦截Action请求
- 拦截器是struts的概念.只能在struts中使用
- 过滤器是servlet的概念, 可以在struts项目、servlet项目中使用
<package name="struts-default" abstract="true">
// package节点用来管理Action . 一个struts下可以有多个package节点, 通常一个业务模板用一个包.
// name : 是package节点的名称. 一个struts下.name不能重复
// extends : 在struts.xml文件中.这个属性一定要写,并且一定要继承自"struts-default"包
// abstract : 如果这个属性为true,表示这个package是个抽象包. 抽象包中不能定义Action,否则会在运行时期报错
// 只有当前包需要被其他包继承时才使用此属性
// 跳转的结果类型集合
<result-types>
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
<result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
<result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
<result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
<result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
<result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
</result-types>
// 拦截器
<interceptors>
<interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/>
<interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>
<interceptor name="chain" class="com.opensymphony.xwork2.interceptor.ChainingInterceptor"/>
.........
<!-- Basic stack -->
<interceptor-stack name="basicStack">
<interceptor-ref name="exception"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="checkbox"/>
<interceptor-ref name="multiselect"/>
<interceptor-ref name="actionMappingParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
</interceptor-stack>
</interceptors>
// 默认执行的拦截器
<default-interceptor-ref name="defaultStack"/>
</package>
拦截器什么时候执行? (访问 / 启动)
答 : 用户访问时,按照顺序执行18个默认连接器
先执行Action类创建还是先执行拦截器?
答 : 先创建Action类,再执行拦截器. 最后执行业务方法
struts.xml
Action 节点
Action节点 : 主要用于配置请求路径与Action类的映射关系
-
name : 请求路径名称
-
class : 处理请求的Action类的全名
-
method : 请求调用的处理方法
-
result : 请求的处理结果集合
- name : action处理方法的返回值
- type : 处理结果的跳转类型
- 标签体内容 : 指定跳转的位置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="xxxx" extends="struts-default">
<action name="hello" class="cn.itcast.action.HelloAction" method="execute">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
网友评论