Struts2(三)---Action类

一,action与Action类的区别
(1)action:代表一个Struts2的请求
(2)Action类 : 能够处理struts2请求的类(即普通的JAVA类,可以有属性和方法),但是必须遵守以下规则:
* 属性的名字必须遵守与JAVABean属性名相同的命名规则,属性类型可以是任意类型,从字符串到非字符串(基本数据类型)之间的数据转换可以自动发生,但是不能自动完成字符串到引用类型的转换,需要自定义类型转换器.
* 必须有一个无参构造器:通过反射创建 Action类的对象.
* 至少有一个供Struts在执行这个action时调用的方法.
* 同一个Action类可以包含多个action方法.
* Struts2会为每一个HTTP请求创建一个新的Action实例,即Action不是单例的,是线程安全的.
二,在Action中访问Web资源
(1)什么是WEB资源?
HttpServletRequest,HttpSession,ServletContext等原声的API.
(2)如何访问?
I 和Servlet API解耦的方式:只能访问有限的Servlet API对象,且只能访问其有限的方法(读取请求参数,读写域对象属性,使Session失效)
【使用ActionContext】
Actioncontext是Action执行的上下文对象,在ActionContext中保存了Action执行所需要的所有对象,包括Parameters,request,session,application等

//获取Action对象
ActionContext context = ActionContext.getActionContext();
//获取HttpSession对应的Map对象,底层是通过为get()传递"session"参数实现
Map<String,Object> = context.getSession();
//设置属性
sessionMap.put("sessionKey", "sessionValue");
//获取ServletContext对应的Map对象,底层是通过为get()传递"Application"参数实现
Map<String, Object> applicationMap = actionContext.getApplication();
//获取请求参数对应的Map对象,底层是通过为get()传递"Parameters"参数实现
//键: 请求参数的名字, 值: 请求参数的值对应的字符串数组
//注意: 1. getParameters 的返回值为在 Map<String, Object>, 而不是 Map<String, String[]>
//     2. parameters 这个 Map 只能读, 不能写入数据, 如果写入, 但不出错, 但也不起作用!
Map<String, Object> parameters = actionContext.getParameters();
//获取HttpServletRequest对应的Map对象
//注:ActionContext类中没有提供类似getRequest()这样的方法来获取HttpServletContext对应的Map对象,要得到HttpServletRequest对应的Map对象,可以通过为get()方法传递"request"参数实现
Map<String, Object> requestMap = (Map<String, Object>) actionContext.get("request");

【实现XxxAware接口】例如:RequestAware,SessionAware
选用建议:若一个Action类中有多个action方法,且多个方法都需要使用域对象的Map或Parameters,则建议使用Aware接口的方式
II 与Servlet耦合的访问方式,直接访问ServletAPI将使Action与Servlet环境耦合在一起,测试时需要有Servlet容器,不便于单元测试
【使用ServletActionContext】
* 直接获取HttpServletRequest对象 : ServletActionContext.getRequest()
* 直接获取HttpSession对象 : ServletActionContext.getRequest().getSession()
* 直接获取ServletContext对象:ServletActionContext.getServletContext()
【实现ServletXxxAware接口】例:ServletRequestAware
三,ActionSupport
(1)ActionSupport是默认的Action类:若某个action节点没有配置class属性,则ActionSupport即为待执行的Action类,而execute方法即为要默认执行的action方法
(2)在手工完成字段验证,显示错误消息,国际化等情况下,推荐继承ActionSupport

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值