struts获取request等对象

来源:互联网 发布:淘宝兼职 编辑:程序博客网 时间:2024/05/16 10:36

     有时我们需要用到Request, Response, Session,Page, ServletContext这些我们以前常用的对象,那么在Struts2中怎么样使用到这些对象呢。

     方式1(和servlet API耦合)

            获取request实例:

HttpServletRequest request = ServletActionContext.getRequest();

           获取session实例:

HttpSession session = ServletActionContext.getRequest().getSession();


            获取application实例:

ServletContext application = ServletActionContext.getServletContext();


    方式2:(和servlet API耦合)

             获取request实例:

 ActionContext context = ActionContext.getContext(); HttpServletRequest request = (HttpServletRequest) context.get(ServletActionContext.HTTP_REQUEST);

 
间接访问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来访问request等对象,但是这种方式毕竟不能直接获取request等实例,为了在Action中直接访问这些实例,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了.

原创粉丝点击