Struts2的Action访问ServletAPI的方式
2017-03-24 18:42
369 查看
Struts2的Action没有与任何的ServletAPI耦合,增强了Action的可测试性
但是不访问ServletAPI是不可能的,所以Struts2提供了几种访问ServletAPI的方式
Action访问ServletAPI的方式大致有三种:
1:通过Struts2提供的ActionContext类
2:直接通过XxxAware接口来访问
3:使用ServletActionAPI工具类
一、ActionContext类
常用方法包括:
Object get(Object key) 类似于HttpServletRequest的getAttribute(String name)方法
Map getApplication() 返回一个Map对象,该对象模拟了该应用的ServletContext实例
static ActionContext getContext() 静态方法,获取系统的ActionContext实例
Map getParameters() 获取所有的请求参数,类似于HttpServletRequest对象的getParameterMap()方法
Map getSession() 返回一个Map对象,该对象模拟了HttpSession对象
void setApplication(Map application) 直接传入一个Map实例,将Map实例里的Key-Value对转换成Application的属性名和属性值
void setSession(Map Session) 直接传入一个Map实例,将Map实例里的Key-Value对转换成Session的属性名和属性值
代码演示如下:
二、XxxAware接口
为了在Action中直接访问ServletAPI,struts2还提供了如下接口:
ServletContextAware:直接访问ServetContext
ServletRequestAware:直接访问HttpServletRequest
ServletResponseAware:直接访问HttpServletResponse一定要注意的是:
虽然在action中获取了HttpServletResponse,但是如果想要使用HttpServletResponse直接来生成相应是不可能的,因为Acion只是业务控制器,并不是标准的servlet,所以一定不要尝试在Action中直接对客户端生成响应!
代码演示如下:
三、使用ServletActionAPI工具类
该工具类包含如下几个静态方法:
static PageContext getPageContext() 取得web应用的PageContext实例
static HttpServletRequest getRequest() 取得web应用的HttpServletRequest实例
static HttpServletResponse getResponse() 取得web应用的HttpServletResponse实例
static ServletContext getServletContext() 取得web应用的ServletContext实例
这种方式虽然简单,但是不利于高层次的解耦!
代码演示如下:
但是不访问ServletAPI是不可能的,所以Struts2提供了几种访问ServletAPI的方式
Action访问ServletAPI的方式大致有三种:
1:通过Struts2提供的ActionContext类
2:直接通过XxxAware接口来访问
3:使用ServletActionAPI工具类
一、ActionContext类
常用方法包括:
Object get(Object key) 类似于HttpServletRequest的getAttribute(String name)方法
Map getApplication() 返回一个Map对象,该对象模拟了该应用的ServletContext实例
static ActionContext getContext() 静态方法,获取系统的ActionContext实例
Map getParameters() 获取所有的请求参数,类似于HttpServletRequest对象的getParameterMap()方法
Map getSession() 返回一个Map对象,该对象模拟了HttpSession对象
void setApplication(Map application) 直接传入一个Map实例,将Map实例里的Key-Value对转换成Application的属性名和属性值
void setSession(Map Session) 直接传入一个Map实例,将Map实例里的Key-Value对转换成Session的属性名和属性值
代码演示如下:
ActionContext atx = ActionContext.getContext(); // 通过ActionContext设置application范围的属性 atx.getApplication().put(); // 通过ActionContext设置session范围的属性值 atx.getSession().put();
二、XxxAware接口
为了在Action中直接访问ServletAPI,struts2还提供了如下接口:
ServletContextAware:直接访问ServetContext
ServletRequestAware:直接访问HttpServletRequest
ServletResponseAware:直接访问HttpServletResponse一定要注意的是:
虽然在action中获取了HttpServletResponse,但是如果想要使用HttpServletResponse直接来生成相应是不可能的,因为Acion只是业务控制器,并不是标准的servlet,所以一定不要尝试在Action中直接对客户端生成响应!
代码演示如下:
public class LoginAction1 implements Action,ServletResponseAware { @Override public void setServletResponse(HttpServletResponse response) { this.response = response; } @Override public String execute() throws Exception { ... // 通过response添加cookie Cookie cookie = new Cookie(.....); cookie.setMaxAge(60*60); response.addCookie(cookie); ... } }
三、使用ServletActionAPI工具类
该工具类包含如下几个静态方法:
static PageContext getPageContext() 取得web应用的PageContext实例
static HttpServletRequest getRequest() 取得web应用的HttpServletRequest实例
static HttpServletResponse getResponse() 取得web应用的HttpServletResponse实例
static ServletContext getServletContext() 取得web应用的ServletContext实例
这种方式虽然简单,但是不利于高层次的解耦!
代码演示如下:
... Cookie c = new Cookie(...); c.setMaxAge(60*60); ServletActionContext.getResponse().addCookie(c); ...
相关文章推荐
- Struts2的Action中访问servletAPI方式
- struts2中,action访问servlet api的两种方式
- Struts2的Action访问Session对象的两种方式及原理
- [原创]java WEB学习笔记55:Struts2学习之路---详解struts2 中 Action,如何访问web 资源,解耦方式(使用 ActionContext,实现 XxxAware 接口),耦合方式(通过ServletActionContext,通过实现 ServletRequestAware, ServletContextAware 等接口的方式)
- Struts2中访问Servlet中的API(ActionContext,ServletActionContext)两种方式
- S5.1_Struts2_AccessWebElements action访问web对象的4种方式
- struts2 lesson one: 的action特征,三种创建方法,action接收表单数据的三种访问,读取方式
- 框架 day27 Struts2 入门(概述,基本xml配置,动态方法调用,Action类,ServletAPI访问,结果集)
- Struts2的Action中方法的几种访问方式
- Struts2的Action访问Servlet API的方式
- Struts2中Action访问ServletAPI
- struts2学习(11)——action访问ServletAPI
- Struts2 Action访问web元素的四种方式
- Structs中Action访问ServletAPI的几种方式
- STRUTS2 ACTION 访问WEB元素的四种方式
- Struts2的访问路径为什么可以用.action或不写,以及Struts2访问路径的搜索方式
- 【SSH三大框架】Struts2基础第二篇:Struts2的Action访问ServletAPI
- 解决Struts2的Action通过get方式访问乱码的问题
- Struts2中访问ServletAPI的四种方式
- Struts2中解耦的方式访问appliactionContext对象