struts2中的action结果处理与组织(六)

来源:互联网 发布:慈溪行知 编辑:程序博客网 时间:2024/06/05 04:28

在上几篇中我们把Action得一些原理基本讲完了,接下来就该对result进行讲解了~~


在这篇中大家需要了解结果视图的种类,掌握全局结果视图的定义与使用,了解Action的管理思想,掌握<package>定义与应用技巧。


【结果视图种类】
      结果视图的类型有多种,可以通过type属性进行说明,缺省时的类型为dispatcher(其它类型后续章节中介绍):
     dispatcher类型的结果视图,是采取服务器端分发模式,将当前的请求转发到一个JSP网页,这种方式可以将请求资源进行传递,与资源重定向不同。


下面通过一张图来理解一下请求转发和资源重定向的不同原理:









       请求转发的特点是将客户端发送的请求进行处理后传递给下一个应用程序,因此请求中的参数和属性都可以传递给目标应用程序,在目标应用程序中即可以获取客户端的请求参数,也可以获取上一个应用程序中设置的请求对象的属性。

一般来说,在struts.xml中result是从属于action进行定义的,是局部的,但有些时候多个Action处理后可能要返回同一个结果视图,此时就需要定义全局的结果视图


【定义方法】
     在<package>元素内,所有<action>定义之前使用<global-results>元素进行定义 





【案例步骤】
    1、以demo6-3(一个Action处理多个业务)为基础,在Action登录和注册方法中分别加入程序出错的处理(如:当用户输入的用户名超过6个字符时返回ERROR)
    2、在struts.xml中填加全局result定义






接下来我们讲一下Action的组织问题:


【Action管理问题】
    1、如何管理不同模块中同名的Action?
    2、如何以模块为单位组织Action?    
           package(包)在Java中用于管理同名的类或将类按照不同的功能模块进行组织,同样,在Action的管理中package也起到相同的作用。
          使用package可以将逻辑上相关的一组Action、Result、Intercepter等组件分为一组。


package的属性
name:必填属性,用来指定包的名称,一般与对应模块名称相同
extends:可选属性,用来指定从哪个package继承,可以继承其他包中的Action定义和拦截器定义
namespace:可选属性,用来指定该包的命名空间


extends属性的应用


创建JSP网页,分别创建如下页面,设置相应内容
index.jsp
index2.jsp
test.jsp
test1.jsp
test2.jsp
在struts.xml中进行如下定义










【说明】
Action请求匹配过程总结


http://localhost:8080/action5/aaa/bbb/xxx.action
(1)首先匹配命名空间为"/aaa/bbb"的包中的xxx
(2)匹配命名空间为"/aaa/bbb"的父包中的xxx
(3)匹配命名空间为"/aaa"的包中的xxx
(4)匹配命名空间为"/aaa"的父包中的xxx
(5)匹配命名空间为"/"的包中的xxx
(6)匹配命名空间为"/"的父包中的xxx
(7)匹配命名空间为"",即缺省命名空间的包中的xxx
struts.xml是自上而下解析的,被继承的package要放在继承package的前面定义



组织Action时的注意事项



1、不要将业务组件Action放在默认namespace的包中,它有可能被其他命名空间下的错误请求调用
2、将业务相关的Action组件放到同一个package内,便于共享相同资源包括全局Result和拦截器
3、一般结果视图中的URL使用绝对路径
           Action组件所在的包的命名空间是结果视图中定义的相对路径的上级资源路径,相对路径的引用容易造成引用的混乱。







原创粉丝点击