Struts2的Action访问ServletAPI的方式

本文介绍了Struts2框架中Action访问ServletAPI的三种方式:通过ActionContext类、实现特定的Aware接口以及使用ServletActionContext工具类。这些方法使得开发者能够在保持业务逻辑的同时灵活地与Web容器交互。

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的属性名和属性值

代码演示如下:

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);
...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值