现在的位置: 首页 > 综合 > 正文

struts2在Action中访问request、session、application属性

2013年03月15日 ⁄ 综合 ⁄ 共 4142字 ⁄ 字号 评论关闭

       在struts1中,获得到系统的request、session或者application对象非常方便,都是按照形参传递的,但是在struts2中,request、session和application都被隐藏了。
      struts提供两种方式访问session、request和application对象,即IOC方式和非IOC方式,其中比较常用的是利用SPRING里面所说的IOC即控制反转。

一、非Ioc方式:

            这种方式主要是利用了com.opensymphony.xwork2.ActionContext类以及org.apache.struts2.ServletActionContext类,具体的方法如下所示。

          (1)与serlvet API耦合的方式(通过ServletActionContext类直接获取)

HttpServletRequest request = ServletActionContext.getRequest(); //获取request对象  
HttpSession session = request.getSession();//获取session对象
ServletContext  application = ServletActionContext.getServletContext(); //获取application对象方式一  
或 ServletContext application = session.getServletContext(); //获取application对象方式二
HttpServletResponse response = ServletActionContext.getResponse(); //获取response对象

        (2)与serlvet API无耦合的方式(通过ActionContext类直接获取)

ActionContext context = ActionContext.getContext();  //requestScope
Map request = (Map) context.get("request");  //获取request
Map session = context.getSession();   //获取session
Map application = context.getApplication();  //获取application

<!-- 赋值示例 -->
ActionContext ctx = ActionContext.getContext();
ctx.getApplication().put("app","application应用范围");
ctx.getSession().put("sess","session应用范围");
ctx.put("req","request应用范围");

二、IOC方式:

       (1)获得request对象:

          第一步:让action实现ServletRequestAware接口
          第二步:在action中声明一个HttpServletRequest类型的实例变量
          第三步:在action中实现ServletRequestAware接口的setServletRequest方法,实现方式很简单,如下所示。 

//1.实现ServletRequestAware接口
public class UserAction implements ServletRequestAware {

    //2.定义HttpServletRequest类型的成员变量并实现getter/setter方法
    private HttpServletRequest request;

    public HttpServletRequest getRequest() {
        return request;
    }
    public void setRequest(HttpServletRequest request) {
        this.request = request;
    }
    
    //3.实现ServletRequestAware接口的setServletRequest方法,并将它的request参数赋值给成员变量request
    @Override
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }
}

       (2)获得Session对象(注意,此时的session是SessionMap类型):

         第一步:让action实现SessionAware接口
         第二步:在action中声明一个Map类型的实例变量
         第三步:在action中实现SessionAware接口的setSession方法,实现方式很简单,如下所示。   

//1.实现SessionAware接口
public class UserAction implements SessionAware {

    //2.定义Map类型的成员变量并实现getter/setter方法
    private Map session;

    public Map getSession() {
        return session;
    }
    
    //3.实现SessionAware接口的setSession方法,并将它的session参数赋值给成员变量session
    @Override
    public void setSession(Map session) {
        this.session = session;
    }
    
}

      (3)获取application对象:

        第一步:让action实现ServletContextAware接口
        第二步:在action中声明一个ServletContext类型的实例变量
        第三步:在action中实现ServletContextAware接口的setServletContext方法,实现方式很简单,如下所示。  

//1.实现ServletContextAware接口
public class UserAction implements ServletContextAware {

    //2.定义ServletContext类型的成员变量并实现getter/setter方法
    private ServletContext application;

    public ServletContext getApplication() {
        return application;
    }

    public void setApplication(ServletContext application) {
        this.application = application;
    }

    //3.实现ServletContextAware接口的setServletContext方法,并将它的application参数赋值给成员变量application
    @Override
    public void setServletContext(ServletContext application) {
        this.application = application;
    }
}

      (4)获取response对象:

        第一步:让action实现ServletResponseAware接口
        第二步:在action中声明一个HttpServletResponse类型的实例变量
        第三步:在action中实现HttpServletResponse接口的setResponse方法,实现方式很简单,如下所示。  

//1.实现ServletResponseAware接口
public class UserAction implements ServletResponseAware {

    //2.定义HttpServletResponse类型的成员变量并实现getter/setter方法
    private HttpServletResponse response;

    public HttpServletResponse getResponse() {
        return response;
    }

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

    //3.实现ServletResponseAware接口的setServletResponse方法,并将它的response参数赋值给成员变量response
    @Override
    public void setServletResponse(HttpServletResponse response) {
        this.response = response;    
    }
    
}

附注:Jps页面获取Scope对象值的几种方式:

(1)${ } 格式

${applicationScope.app}
${sessionScope.sess}
${requestScope.req}

(2)<s:property>标签

<s:property value="#request.req">
<s:property value="#session.sess">
<s:property value="#application.app">

(3)getAttribute()方式

<%=request.getAttribute("req") %><br>
<%=session.getAttribute("ses") %><br>
<%=application.getAttribute("app") %><br>

抱歉!评论已关闭.