包配置和命名空间配置
这种设计是为了企业应用的模块化开发,把多个配置文件以include的方式包含进来
处理结果的控制
-------------------- | -------根据逻辑视图跳转物理视图2 | | -------根据逻辑视图跳转物理视图1 ^ | 逻辑视图<-------------------- | | | | 发送请求----->struts分发器---->创建action实例,调用execute
- action只是负责struts2控制器的部分,所以它不能直接生成浏览者的响应
- action只会负责处理请求,负责生成响应的视图组件,通常是JSP页面,而action会为JSP页面提供显示的数据
- 当action处理用户请求后,控制器根据
<result.../>
元素决定具体使用哪个资源生成响应- 配置逻辑视图和物理视图之间的映射关系是通过result子元素来定义的。每个result定义逻辑视图和物理视图之间的一次映射
<result .../>
支持的属性 <result name="" type>
<param></param>
<param></param>
....
</result>
如果有如下的配置
<result name="逻辑视图" type="视图配型">
<param name="location">物理视图位置<param>
<param name="parse">true<param>----是否解析OGNL表达式的值
</result>
就可以简化为
<result name="逻辑视图" type="视图配型">物理视图位置</result>
<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-type name="postback" class="org.apache.struts2.dispatcher.PostbackResult"/>
</result-types>
从以上可知,type的默认值是dispatch。
1、chain
假设在regist的action里注册成功之后跳转到一个浏览所有用户的action
<action name="regist" class="registAction">
<result type="chain">userList</result>
</action>
<action name="userList" class="userListAction">
<result ...> .... </result>
</action>
2、redirect
直接“重定向”到新的URL,生成一次新的请求,原有的请求参数请求属性都会丢失。
与默认的dispatch(“转发”)相应
3、 dispatch
4、plainText
直接显示视图页面的源代码
<action name="login" class="loginAction">
<!--当处理方法返回success,系统跳转到welcome.jsp-->
<result type="plainText">
<param name="locaiont">/WEB-INF/content/welcome.jsp</param>
<!-- 指定物理视图资源的编码字符集-->
<param name="charSet">utf-8</param>
</result>
</action>
一般没有太大的用处,主要用于显示源代码,教学类型的,为了让学生看到源代码学习
5、stream —直接生成“二进制”文件流
1、局部
将<result .../>
作为<action>
的子元素,只对action有效
2、全局
将<result .../>
用于全局
<global-results>
<result type="">
</result>
</global-results>
1、当全局result配置与局部result配置冲突时,局部result会覆盖全局result
尽量少用全局result,只有在多个action都具有某个通用性质的result,才考虑全局result
2、不同的result类型,可使用的参数不同
/*********
struts的配置文件,包括:
struts-default.xml: 核心包使用该配置文件
struts-plugin.xml: 插件包使用该配置文件
struts.xml : struts2应用使用该配置文件
struts-abc.xml : 其他的配置文件,必须被include加载
**********/
如dispatch的参数有location和parse
需要使用的时候,查阅文档,
使用{1},{2}….
例:
通用的action
<action name="*">
<result>
/WEB-INF/content/{1}.jsp
</result>
</action>
{1}匹配*所匹配的第一个匹配值
<action name="*Action">
<result>
/WEB-INF/content/{1}_{2}.jsp
</result>
</action>
Action属性值决定视图资源
不仅可以使用{1}…,还可以使用${属性}
<action name="myPro" class="">
<!--在定义物理视图资源时,可以直接使用OGNL表达式,所以这个物理视图可以动态的改变。通过OGNL来计算${res}表达式的值
-->
<result>
/WEB-INF/content/{res}.jsp
</result>
动态方法调用(DMI Dynamic Method Invocation)
用法不是特别大,大致了解
功能:可以在提交请求的时候,直接提交给action的指定方法。
<form action="myPro" method="post"></form>
上述代码只能看出提交给哪个action,而无法看到提交给哪个方法,
具体调用的需要查看struts.xml
<form action="myPro!login" method="post"></form>
缺点:
1、安全性不高
2、没有必要,完全可以在action元素中指定method来代替动态方法调用
第一次用markdown的语法写,总体感觉还是可以,就是有序列表不是很好,或许是自己没用好,以后多多体会
原文地址:http://blog.csdn.net/havedream_one/article/details/45555575