Action应用总结
之前我们已经总结了Struts2的基本配置和设置。下面我来说一下具体的实现流程。
一、实现Action的三种方式
Action类就是一个POJO类
POJO类:
POJO(Plain Ordinary Java Object)简单的Java对象。简单来说,没有继承某个类,没有实现接口,就是POJO的类。
Action类可以实现Action接口
Action接口中定义了5个常量,5个常量的值对应的是5个逻辑视图跳转页面(跳转的页面还是需要自己来配置),还定义了一个方法,execute方法。
大家需要掌握5个逻辑视图的常量
SUCCESS -- 成功.
INPUT -- 用于数据表单校验.如果校验失败,跳转INPUT视图.
LOGIN -- 登录.
ERROR -- 错误.
NONE -- 页面不转向.
Action类可以去继承ActionSupport类
对请求参数进行校验
设置错误信息
读取国际化信息
二、在Action中获取Servlet相关API的三种方式
在Action类中也可以获取到Servlet一些常用的API,有如下三种方式获取
* 完全解耦合的方式
* 使用接口注入的方式
* 使用ServletActionContext中静态方法直接访问Servlet的API
完全解耦合的方式
如果使用该种方式,Struts2框架中提供了一个类,ActionContext类,该类中提供一些方法,通过方法获取Servlet的API
一些常用的方法如下:
static ActionContext getContext() 获取ActionContext对象实例
java.util.Map<java.lang.String,java.lang.Object> getParameters() 获取请求参数,相当request.getParameterMap();
java.util.Map<java.lang.String,java.lang.Object> getSession() 获取的代表session域的Map集合,就相当于操sessio域
java.util.Map<java.lang.String,java.lang.Object> getApplication() 获取代表application域的Map集合
void put(java.lang.String key, java.lang.Object value) 注意:向request域中存入值。
使用接口注入的方式
Struts2框架中提供了一些接口,编写的Action类可以是去实现这些接口,然后实现这些接口中的方法,这些方法都是把一些Servlet的常用对象通过参数的方式传递进来。
常用的接口如下:
*ServletRequestAware -- 注入request
*ServletContextAware -- 注入ServletContext
*ServletResponseAware -- 注入response.
使用ServletActionContext中静态方法直接访问Servlet的API
Struts2框架提供了一个类,ServletActionContext,该类中提供了一些静态的方法
具体的方法如下:
* getPageContext();
* getRequest()
* getResponse();
* getServletContext();
三、访问Action的三种方式
通过<action>标签中的method属性,访问到Action中的具体的方法
传统的配置方式
具体的实例如下:
页面代码
配置文件的代码
通配符的访问方式
使用通配符的方式可以简化配置文件的代码编写,而且扩展和维护比较容易。
具体实例如下:
页面代码
<a href="${pageContext.request.contextPath}/order_add.action">添加订单</a> <a href="${pageContext.request.contextPath}/order_delete.action">删除订单</a>
配置文件代码
通配符更抽象的写法
具体的实例如下:
页面的代码
<a href="${pageContext.request.contextPath}/OrderAction_add.action">添加订单</a>动态方法访问的方式
如果想完成动态方法访问的方式需要开启一个常量,struts.enable.DynamicMethodInvocation = false,把值设置成true。
注意:不同的Struts2框架的版本,该常量的值不一定是true或者false,需要自己来看一下。如果是false,需要自己开启。
在struts.xml中开启该常量。
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>具体代码如下
页面的代码
<a href="${pageContext.request.contextPath}/product!add.action">添加商品</a>
四、对结果页面的跳转
结果页面存在两种方式
全局结果页面
条件:
如果<package>包中的一些action都返回success,并且返回的页面都是同一个JSP页面,这样就可以配置全局的结果页面。
全局结果页面针对的当前的包中的所有的Action,但是如果局部还有结果页面,会优先局部的。
使用的标签是
局部结果页面
<result>/demo/suc.jsp</result>
结果页面的类型
结果页面使用<result>标签进行配置,包含两个属性
name -- 逻辑视图的名称
type -- 跳转的类型,值一些,需要掌握一些常用的类型。常见的结果类型去struts-default.xml中查找。
*dispatcher -- 转发.type的默认值.Action--->JSP
*redirect -- 重定向. Action--->JSP
*chain -- 多个action之间跳转.从一个Action转发到另一个Action. Action---Action
*redirectAction -- 多个action之间跳转.从一个Action重定向到另一个Action. Action---Action
*stream -- 文件下载时候使用的.
下一章节:Struts2的知识整理总结(三)—— 数据封装和类型转换