Action 中访问servletAPI的方式总结

  

   在Struts2的框架中,ActionServlet API相互分离,这是Struts2相对于Struts1的一个优化之处。相互分离

的好处就是便于测试action,但是这样的话,Action便无法访问Servlet API

       Web应用中通常需要访问的Servlet API 就是HttpServletRequest,HttpServletResponse,HttpSession这三个类,分别代表jsp内置对象request,response,session。所以,在Struts2框架中,提供了以下几种方法:

 

1、使用ActionContext

 

       Struts2提供了一个ActionContext类,action运行期间所用到的数据都保存在ActionContext类中,例如session,客户端传递的参数等等。ActionContextAction中的一个上下文对象。可以通过该类直接访问ServletAPI,此种方式没有侵入性

    

  
//第一种使用ActionContext访问session,如果为空,则重定向到登录页面
ActionContextactionContext = ActionContext.getContext();
if(actionContext.getSession().get("user")== null){
return"login";
}

      通过如上方式先创建actionContext对象,然后通过调用getSession()方法获得HttpSession对象。并对该对象取值进行下一步判断。

      下面是ActionContext常用的几个方法:

          

       Object get(Object key ):该方法类似于HttpServletRequestgetAttribute(Stringname) 方法。

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

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

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

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

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

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

 

 

2·实现相应的接口:

在Action中实现如下的一些接口:

org.apache.struts2.util.ServletContextAware:实现该接口的Action可以访问ServletContext对象。

org.apache.struts2.interceptor.ServletRequestAware:实现该接口的Action可以访问ServletRequest对象。

org.apache.struts2.interceptor.ServletResponseAware:实现该接口的Action可以访问ServletResponse对象。

org.apache.struts2.interceptor.SessionAware:实现该接口的Action可以访问HttpSession对象。

 

看下面的例子:

packagecom.shengsiyuan.struts2;
 
importjavax.servlet.http.HttpServletRequest;
importorg.apache.struts2.interceptor.ServletRequestAware;
importcom.opensymphony.xwork2.Action;
 
publicclass VerifyAction implements Action,ServletRequestAware {
 
privateHttpServletRequest request;
 
publicHttpServletRequest getRequest() {
returnrequest;
}
 
publicvoid setRequest(HttpServletRequest request) {
this.request= request;
}
 
@Override
publicString execute() throws Exception {
//第二种  通过实现接口ServletRequestAware
if(request.getSession().getAttribute("user")!= null){
return"must";
}
return"login";
 
}
 
@Override
//必须要实现接口的set方法
publicvoid setServletRequest(HttpServletRequest request) {
this.request=request;
}
 
}


 

3·使用ServletActionContext

      通过ServletActionContext提供的一系列的静态方法访问Servlet API

*getPageContext();

*getRequest();

*getResponse();

*getServletContext();

 

看下面实例:

 

packagecom.shengsiyuan.struts2;
 
importorg.apache.struts2.ServletActionContext;
importcom.opensymphony.xwork2.Action;
 
public classVerifyAction implements Action,ServletRequestAware {
 
 
@Override
publicString execute() throws Exception {
//判断session中是否存在值,如果存在,则进入受保护页面,如果不存在,则“重定向”到登录页面
//第三种  通过实现类ServletActionContext的静态方法getRequest()
if(ServletActionContext.getRequest().getSession().getAttribute("user")!= null)
{
return"must";
}
return"login";
}
}


评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值