一、Action对象
Action对象是Struts2框架中的重要对象,主要用于对HTTP请求进行处理,在Struts2 API中,Action对象是一个接口,位于com.opensymphony.xwork2包中。在Struts2项目开发中,创建Action对象都要直接或间接实现此对象。
在Action接口中,包含了5个静态成员变量:
- 静态变量SUCCESS,代表Action执行成功的返回值。如果在Action执行成功的情况下,需要返回到成功的页面,此时就可以将返回值设置为SUCCESS。
- 静态变量NONE,代表Action执行成功的返回值,但不需要返回到成功的页面。主要用于处理不需要返回结果页面的业务逻辑。
- 静态变量ERROR,代表Action执行失败的返回值。如在一些信息验证失败的情况下,可以使Action返回此值。
- 静态变量INPUT,代表需要返回到某个输入信息的页面的返回值。如在修改某些信息时,加载数据后需要返回到修改页面,此时就可以将Action对象的返回值设置为INPUT。
- 静态变量LOGIN,代表需要用户登录的返回值。如在验证用户是否登录时,Action验证失败,需要用户重新登录,此时就可以将Action对象的返回值设置为LOGIN。
二、请求参数的注入
在Struts2框架中,表单提交的数据会自动注入到与Action对象相对应的属性。通过Action对象为属性提供setter方法进行注入。
基本流程:
Struts2框架的工作,主要是通过Struts2的过滤器对象拦截HTTP请求,然后将请求分配到指定的Action进行处理。由于在Web项目中配置的是Struts2过滤器,所以当浏览器向Web容器发送一个HTTP请求时, Web容器就要调用Struts2过滤器的doFilter()方法。此时Struts2就接收到了HTTP请求,通过Struts2的内部处理机制,它会判断这个HTTP请求是否与某个Action对象相匹配。如果找到了与之匹配的Action,就会 调用Action对象的execute()方法,并根据处理结果返回相应的值,然后Struts2就会通过Action的返回值查找返回值所映射的页面,最后通过一定的视图回应给浏览器。
三、动态Action
动态Action的处理方式,是通过请求Action对象中一个具体的方法来实现的操作,具体方式,是在Action的URL地址后方加上请求的字符串(方法名称),与Action对象的方法进行匹配,Action对象地址ui请求字符串之间以“!”进行分隔。例如:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <body> 2 <a href="userAction!add">添加用户</a> 3 <a href="userAction!updatee">更新用户</a> 4 5 </body>
可知,Action请求的处理方式并非一定要通过execute()方法进行处理,使用动态Action的处理方式更加方便。所以,在实际开发中个,可以将同模块的一些请求封装到一个Action对象中,使用Struts2提供的动态Action对不同请求进行处理。
四、Struts2的相关配置
<1> Struts2的配置文件主要有4个,如下。
名称 | 说明 |
struts-default.xml | 位于struts2-core-2.1.14.1.jar文件的org.apache.struts2包中 |
struts-plugin.xml | 位于Struts2提供的各个插件的包中 |
struts.xml | Web应用默认的Struts2配置文件 |
struts.properties | Struts2框架中属性配置文件 |
web.xml | 在该文件中也可以设置Struts2框架的一些信息 |
<2> Struts2的包配置
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <struts> 2 <!-- 声明包--> 3 <package name="user" extends="struts-default" namespace="/user"> 4 ...... 5 </package> 6 </struts>
名称 | 说明 |
name | 声明包的名称,以方便在其他地方引用此包,此属性是必须的 |
extends | 用于声明继承的包,也就是它的父包 |
namespace | 指定名称空间,也就是访问此包下的Action需要访问的路径 |
abstract | 将包声明为抽象类型(包中不定义action) |
<3> Struts2中Action的对象相关配置
Action对象起到一个控制器的作用,Struts2框架通过Action对象处理HTTP请求。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <action name="userAction" class="com.wyao.action.UserAction" method="save"> 2 <result>success.jsp</result> 3 </action>
属性 | 说明 |
name | 用于配置Action对象被请求的URL映射 |
class | 指定Action对象的类名 |
method | 设置请求Action对象时,调用Action对象的哪一个方法 |
converter | 指定Action对象类型转换器的类 |
调用一个Action对象,默认情况下,它执行的是execute()方法。如果需要请求指定的方法,就可以通过<action>元素的method属性进行配置,将一个请求交给指定的业务逻辑方法进行处理。使用Action元素的method属性,其属性值需要与Action对象中的方法名一致,Struts2框架是通过method属性值查找与之配置的方法。
<4> Struts2通配符匹配值
通配符的配置方式主要针对在非常多的Action的情况下,通过一定的命名约定,使用通配符来配置Action对象,达到简化。
常用的通配符有两个,
-
- 通配符“*” : 匹配0或多个字符。
- 通配符“\” :是一个转义字符,如需匹配“/”,则使用通配符“ V”。
在struts.xml中,结果映射使用<result>元素进行映射,如:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <action name="register" class="com.shengsiyuan.struts2.RegisterAction"> 2 <!-- 结果映射 --> 3 <result>/user/Result.jsp</result> 4 <!-- 结果映射 --> 5 <result name="success">/registerResult.jsp</result> 6 <!-- 结果映射 --> 7 <result name="input" type="dispatcher">/register.jsp</result> 8 </action>
<result>元素有两个属性,name和type。其中name属性与Action对象中方法的返回值相对应,如果execute()方法返回值为input,那么,将<result>元素的name属性配置为input,对应Action对象返回值。type属性用于设置结果的返回值类型,如请求转发、重定向等。如果不设置<result>元素的name属性,那么默认为success。