Action

2018-12-18  本文已影响0人  volenqar

访问Servlet接口

  1. ActionContext
  2. 实现接口ServletContextAware...
  3. ServletActionContext工具类

配置Action

定义Action通过使用<package.../>下的<action.../>子元素来完成,而每一个package元素配置一个包
每个包就是多个Action、多个拦截器、多个拦截器引用的集合
子包可以从一个或多个父包中继承到拦截器、拦截器栈、action等配置
struts-default抽象包,该包下包含了大量结果类型定义、拦截器定义、拦截器引用定义等,这些定义是配置普通Action的基础,所以开发者定义的package通常应该继承struts-default包

Action的基本配置

每个<result.../>元素定义逻辑视图和物理视图之间的一次映射

使用Action的动态方法调用(Dynamic Method Invocation)

action="actionName!methodName"

指定method属性及使用通配符

一个Action处理类定义成多个逻辑Action
使用通配符
当用户请求的URL同时匹配多个Action时,究竟由哪个Action来处理用户请求呢?

配置默认Action

<default-action-ref.../>

配置Action的默认处理类

<default-class-ref.../>

配置处理结果

理解处理结果

Action处理完用户请求后,并未直接将请求转发给任何具体的视图资源,而是返回一个逻辑视图(这个逻辑视图只是一个普通字符串),Struts 2框架收到这个逻辑视图后,把请求转发到对应的视图资源,视图资源将处理结果呈现给用户。

配置结果

局部结果:

Struts 2支持的结果类型

介绍plainText redirect redirectAction
使用plainText结果类型时可指定如下两个参数。
location:指定实际的视图资源
charSet:指定输出页面时所用的字符集

redirect(重定向)会丢失所有的请求参数、请求属性——当然也丢失了Action的处理结果
使用redirect结果类型的效果是,系统将调用HttpServletResponse的sendRedirect(String)方法来重定向指定视图资源,这种重定向的效果就是重新产生一个请求,因此所有的请求参数、请求属性、Action实例和Action中封装的属性全部丢失。
使用redirect结果类型时可指定如下两个参数
location:
parse:

redirectAction使用ActionMapperFactory提供的ActionMapper来重定向请求。
使用redirectAction结果类型时可指定如下两个参数
actionName:
namespace:

动态结果

Action属性值决定物理视图资源

使用PreResultListener
Struts2 应用可由Action、拦截器添加PreResultListener监听器
一旦为拦截器添加了PreResultListener监听器,该监听器会对该拦截器所拦截的所有Action都起作用

配置Struts 2的异常处理

最好的方式是可以通过声明式的方式管理异常处理
Action接口里的execute()方法签名:
public String execute throws Exception
Struts 2 的异常处理机制是通过在struts.xml文件中配置<exception-mapping.../>元素完成的,配置该元素时,需要指定如下两个属性。

Convention插件与“约定”支持

从Struts 2.1开始,Struts引入了Convention插件来支持零配置, 借鉴了Rails的创意,“约定优于配置”原则

Action链的约定

上一篇 下一篇

猜你喜欢

热点阅读