Struts2中获取Web元素requestsessionapplication对象的四种方式

Posted 南阳客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2中获取Web元素requestsessionapplication对象的四种方式相关的知识,希望对你有一定的参考价值。

       我们在学习web编程的时候,一般都是通过requet、session、application(servletcontext)进行一系列相关的操作,request、session、和application他们都是web开发最常用和最实用的对象,有了它们可以大大方便开发人员进行开发和操作。但是在struts2中,基本都是action,这些个方法都是没有requet、session、application,所以如何获取这几个常用对象,也成了大家都比较关注的问题,下面我就来演示下,如何在struts2中来获取这三个对象。

方式一:通过ActionContext对象来获取

package com.action.day01;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

/**
 * 取map类型的request、session、servletcontext
 *  通过ActionContext对象来获取
 * @author Administrator
 *
 */
public class AccessWebElementAction extends ActionSupport {
    private Map<String, Object> request;
    private Map<String, Object> session;
    private Map<String, Object> application;

    public AccessWebElementAction() {
        request = (Map<String, Object>) ActionContext.getContext().get("request");
        session = ActionContext.getContext().getSession();
        application = ActionContext.getContext().getApplication();
    }

    public String getWebElement() {
        //将数据存到requet中
        request.put("r1", "r1");
        //将数据存到session中
        session.put("s1", "s1");
        //将数据存到application中
        application.put("a1", "a1");
        return SUCCESS;
    }
}

方式二:通过实现RequestAware, SessionAware,  ApplicationAware这三个接口的方式来获取(最常用)

package com.action.day01;

import java.util.Map;

import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

/**
 * 取map类型的request、session、servletcontext 通过是实现RequestAware, SessionAware,
 * ApplicationAware 然后把我们定义的变量传递进去,进行初始化,由容器自动办帮我们创建,我们只是传递个参数变量进去接收对象即可
 * 
 * @author Administrator
 *
 */
public class AccessWebElementAction2 extends ActionSupport implements RequestAware, SessionAware, ApplicationAware {
    private Map<String, Object> request;
    private Map<String, Object> session;
    private Map<String, Object> application;

    public AccessWebElementAction2() {
        request = (Map<String, Object>) ActionContext.getContext().get("request");
        session = ActionContext.getContext().getSession();
        application = ActionContext.getContext().getApplication();
    }

    public String getWebElement() {
        // 将数据存到requet中
        request.put("r1", "r1");
        // 将数据存到session中
        session.put("s1", "s1");
        // 将数据存到application中
        application.put("a1", "a1");
        return SUCCESS;
    }

    @Override
    public void setApplication(Map<String, Object> application) {
        this.application = application;
    }

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

    @Override
    public void setRequest(Map<String, Object> request) {
        this.request = request;
    }
}

 方式三:通过ServletActionContext对象来获取Http类型的request、session、application

package com.action.day01;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

/**
 * 取Http类型的request、session、servletcontext 通过ServletActionContext对象来获取
 * 
 * @author Administrator
 *
 */
public class AccessWebElementAction3 extends ActionSupport {
    private HttpServletRequest request;
    private HttpSession session;
    private ServletContext application;

    public AccessWebElementAction3() {
        request = ServletActionContext.getRequest();
        session = ServletActionContext.getRequest().getSession();
        application = ServletActionContext.getServletContext();
    }

    public String getWebElement() {
        // 将数据存到requet中
        request.setAttribute("r1", "r1");
        // 将数据存到session中
        session.setAttribute("s1", "s1");
        // 将数据存到application中
        application.setAttribute("a1", "a1");
        return SUCCESS;
    }
} 

方式四:通过实现ServletRequestAware接口获取HttpServletRequest对象,进而通过request对象获取session和application对象

package com.action.day01;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;

import com.opensymphony.xwork2.ActionSupport;

/**
 * 取Http类型的request、session、servletcontext 通过实现ServletRequestAware接口来获取
 * 
 * @author Administrator
 *
 */
public class AccessWebElementAction4 extends ActionSupport implements ServletRequestAware {
    private HttpServletRequest request;
    private HttpSession session;
    private ServletContext application;

    public AccessWebElementAction4() {

        session = request.getSession();
        application = request.getServletContext();
    }

    public String getWebElement() {
        // 将数据存到requet中
        request.setAttribute("r1", "r1");
        // 将数据存到session中
        session.setAttribute("s1", "s1");
        // 将数据存到application中
        application.setAttribute("a1", "a1");
        return SUCCESS;
    }

    @Override
    public void setServletRequest(HttpServletRequest request) {
        // 使用我们定义的属性来获取容器自动创建的HttpServletRequest对象
        this.request = request;

    }
}

 

至此,在struts2中方式,获取request、sessioin、application对象三种方法已经说明完毕了,有不足的地方,希望大家多多提意见!

以上是关于Struts2中获取Web元素requestsessionapplication对象的四种方式的主要内容,如果未能解决你的问题,请参考以下文章

Struts2中访问web元素

Struts2中访问web元素的四种方式

关于Struts2中Action从表单取值并且存到Web元素中(session)

Struts2之web元素访问与模板包含与默认Action使用

struts2文件上传

web.xml