怎样在struts2的Action中获取request、response、session对象。

使用习惯servlet技术之后,
在进行后台操作的时候通常会用到 request、response、session这些服务器对象,
request 通常用来接收前台传来的参数,
在 struts 中通常都用自动注入的方式解决,
respone 是后台处理完成后向前台输出结果的一个对象,
这个在 struts 也给了对应的处理方案,比如根据返回值的不同跳转不同的界面,或者传入一些值。
session 最常见的一种使用场景就是一些常用数据的记录和短时间的数据对比,
比如记录一些登陆信息,在跳转页面或者进行后台操作的时候减少对数据库的访问而直接在 session 中取。
虽然 struts 对这些情况都有了一些对应的解决方案,但是有时候还是需要使用到这些东西。
那么怎样获取他们就成了一个问题。
大概我知道的有下面3种方法:
1)在方法中,用 ActionContext 获取:

ActionContext ac = ActionContext.getContext();
ac.put("request","request对象");
ac.put("response","response对象");

这里是获取了 ActionContext ,这个类是 action 的上下文,里面包含很多在action运行过程中需要使用的数据,比如:session, parameters, locale等,数据结构是映射结构,即键值对的形式,直接能取到的服务器对象只有 session,其他的是可以通过自行设置的,这个上下文最大的好处就是后台和页面都可以自由的使用它,所以你自定义的一些变量,只需要在页面上用 el 表达式便可以轻松取出。
在第一行代码中直接使用了 ActionContext.getContext(); 就说明了获取上下文是一个静态的方法,所以在非 action 类中都是可以调用的,但是 ActionContext 只有在一次请求的时候才会生成,但是在仅仅启动服务器的一些线程中是没有对应的上下文的。

2)获取HttpXXX对象:

HttpServletRequest request = ServletActionContext.getRequest();
request.getSession();
HttpServletResponse response = ServletActionContext.getResponse();

这里用到了 ServletActionContext 这个类的父类便是 ActionContext ,这个类的扩展就是能够直接获取到 request、response、servletContext 和 pageContext 这四大对象,所以这里也可以用这种方式或者这些服务器对象。

3)实现struts提供的接口:

public class TestAction extends ActionSupport implements ServletRequestAware, ServletResponseAware, ServletContextAware{
    private HttpServletRequest request;
    private ServletContext servletContext;
    private HttpServletResponse response;

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

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

    public void setServletContext(ServletContext sc) {
        this.servletContext=sc;
    }

    req.getSession();
}

这样就可以直接获取 request、resposne、servletContext、session 对象了。

对于request和session也可以通过以下形式:

public class TestAction extends ActionSupport implements RequestAware,SessionAware{
    private Map<String,Object> request;
    private Map<String,Object> session;

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

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

这样也能够获取 session 和 request 对象,只不过这里struts耦合了这两个对象,转换成了Map类型,但是使用起来还是很方便的。

上面就是在 struts 框架中, Action 怎么取出对应服务器对象的方法。如有不对,欢迎指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值