Struts2访问Servlet API的三种方式

Servlet API的方法和类

Struts2提供了一个ActionContext类,Struts2的Action可以通过该类来访问ServletAPI。下面是ActionContext类中包含的几个常用方法:

       Object get(Object key ):该方法类似于HttpServletRequest的getAttribute(String name) 方法。

       Map  getApplication():返回一个Map对象,该对象模拟了该应用的ServletContext实例。

       Static ActionContext getContext():静态方法,获取系统的ActionContxt对象。

       Map getParameters():获取所有的请求参数,类似于HttpServletRequest对象的getParameterMap()方法。

       Map getSession():返回一个map对象,该Map模拟了HttpSession实例。

       Void setApplication(map Aapplication)直接传入一个Map实例,讲Map实例里的key=value对转换成application 的属性名,属性值。

       Void setSession(Map Session)直接传入一个Map实例,讲该map实例的key-value转换成Session的属性名属性值。

Action直接访问ServletAPI

       ServletContextAware :实现了该接口的Action可以直接访问web应用的ServletContext实例。

       SerlvetRequestAware:实现了该接口的Action可以直接访问web的HttpSerlvetRequest实例。

       ServletResponseAware 实现了该接口的Action可以直接访问服务器的相应的HttpServletResponse对象。

      

       如果实现了ServletResponseAware只需要实现之中的public void setServletResponse(HttpServletResponse response)方法即可,然后就可以使用httpServletResponse对象进行操作。

       ServletRequestAware对象也是这样的。

       为了直接访问Servlet API Struts2还提供了一个ServletActionContext,这个类包含了如下几个静态方法:

       Static PageContext getPageContext():取得Web应用PageContext对象。

       Static HttpServletRequest getRequest();

       Static HttpServletResposne getResponse();

       Static SevletContext getSevletContext();取得web应用的ServletContxt对象。

实例

Struts是构建在servlet基础之上的框架,它提供了一系列的servlet api,允许我们对request、response、session对象进行操作。

1、最常用的一种方式是使用ServletActionContext访问Servlet API

ServletActionContext是面向action,特定于上下文的信息。继承于ActionContext

      public String execute() throws Exception
{
	if(!"admin".equals(username))
		throw new UsernameException("username invalid");
	if(!"admin".equals(password))
		throw new PasswordException("password invalid");
	<span style="color:#ff0000;">HttpServletRequest request=ServletActionContext.getRequest();
	HttpSession session=request.getSession();
	session.setAttribute("hello", "helloworld");</span>
	return SUCCESS;
}</span>
比如 以上是LoginAction的execute方法,将hello属性值设置为helloworld并放入session中,在结果页面通过sessionScope.hello就可以将值取出来。

2、使用ActionContext访问ServletAPI,将红字部分替换成以下内容也可以。

        ActionContext actionContext=ActionContext.getContext();
	Map<String,Object> map=actionContext.getSession();
	map.put("hello","helloworld");
从以上代码可以看出,map所对应的就是session的内容。将session转换为map,方便我们进行web的单元测试。

3、通过实现指定接口ServletContextAware,ServletRequestAware,ServletResponseAware,这种方式不推荐使用,与ServletAPI的耦合性大。

下面以ServletRequestAware为例,介绍如何在Action中访问HttpServletRequest对象

public class LoginAction extends ActionSupport implements <span style="color:#ff0000;">ServletRequestAware</span>{
private String username;
private String password;
<span style="color:#FF0000;">HttpServletRequest request;</span>
public String getUsername() {
	return username;
}
public void setUsername(String username) {
	this.username = username;
}
public String getPassword() {
	return password;
}
public void setPassword(String password) {
	this.password = password;
}
public String execute() throws Exception
{
	if(!"admin".equals(username))
		throw new UsernameException("username invalid");
	if(!"admin".equals(password))
		throw new PasswordException("password invalid");
	HttpSession session=request.getSession();
	session.setAttribute("hello", "helloworld");
	return SUCCESS;
}
@Override
<span style="color:#ff0000;">public void setServletRequest(HttpServletRequest request) {
	// TODO Auto-generated method stub
	this.request=request;
}</span>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值