您的位置:首页 > 其它

Action 中访问servletAPI的方式总结

2016-07-06 17:57 267 查看
  
   在Struts2的框架中,Action与Servlet
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,客户端传递的参数等等。ActionContext是Action中的一个上下文对象。可以通过该类直接访问ServletAPI,此种方式没有侵入性。
    
//第一种使用ActionContext访问session,如果为空,则重定向到登录页面
ActionContextactionContext = ActionContext.getContext();
if(actionContext.getSession().get("user")== null){
return"login";
}
     
通过如上方式先创建actionContext对象,然后通过调用getSession()方法获得HttpSession对象。并对该对象取值进行下一步判断。
     
下面是ActionContext常用的几个方法:
          
       Object get(Object key ):该方法类似于HttpServletRequest的getAttribute(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";
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: