Struts2访问ServletAPI(Request, Session, ServletContext,Application,response)

来源:互联网 发布:第十届华人网络春晚 编辑:程序博客网 时间:2024/06/06 02:05

访问Servlet API
有时我们需要用到Request, Response, Session,Page, ServletContext这些我们以前常用的对象,那么在Struts2中怎么样使用到这些对象呢,通常有三种方式.
间接访问1
//向Session中放
   ActionContext.getContext().getSession().put("wdpc", "Session中的WDPC");
  
   //向request中放
   ActionContext.getContext().put("wdpc","request中的WDPC");
  
   //向application中放
   ActionContext.getContext().getApplication().put("wdpc", "Application中的WDPC");
   
取值方式:
ActionContext.getContext().getSession().get("wdpc");
间接访问2


Struts2中提供了一个静态类,他里面的方法可以获取到我们的HttpServletResponse, HttpServletRequest, 然后呢就可以还原到我们以前的使用方式了.

直接访问
虽然Struts2提供了ActionContext来访问Servlet API,但是这种方式毕竟不能直接获取Servelt API实例,为了在Action中直接访问Servlet API,Struts2还提供了一系列接口
ServletContextAware   实现此接口后,可以取得ServletContext
ServletRequestAware   实现此接口后,可以取得HttpServletRequest
ServletResponseAware 实现此接口后,可以取得HttpServletResponse
SessionAware         实现此接口后,可以取得HttpSession,注意,这里有点特殊,取得的是一个Map<String,Object> session,拦截器负责将session中存储的键值进行解析,并一一对应.

所以我们通常的做法是:
public class BaseAction implements ServletResponseAware, ServletRequestAware,
   SessionAware {

protected HttpServletResponse response;
protected HttpServletRequest request;
protected Map<String, Object> session;

public void setServletResponse(HttpServletResponse response) {
   this.response = response;
}

public void setServletRequest(HttpServletRequest request) {
   this.request = request;
}

public void setSession(Map<String, Object> session) {
   this.session = session;
}

public HttpServletResponse getResponse() {
   return response;
}

public void setResponse(HttpServletResponse response) {
   this.response = response;
}

public HttpServletRequest getRequest() {
   return request;
}

public void setRequest(HttpServletRequest request) {
   this.request = request;
}

public Map<String, Object> getSession() {
   return session;
}
}

为了让BaseAction能有验证的功能,并且不能被实例化,开发中我们会这样做:
public abstract class BaseAction extends ActionSupport implements
ServletResponseAware, ServletRequestAware, SessionAware 
然后让我们每个模块的Action来继承这个BaseAction类,然后我们就可以在Action中直接使用Servelt的API了.

原创粉丝点击