9、action中取得原始的request等

本文介绍在Struts2框架中获取原始request、response和session的方法,包括使用ServletActionContext类和实现相关接口两种途径,以及如何通过封装BaseAction简化操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习目标:

1、了解Struts获得原始的request、response的信息

学习过程:

在前面的例子中我们知道,struts2中要获得页面的传值,只需要在Action类中定义一个全局变量,然后给予get/set方法,那么页面的值就会自动绑定,不需要使用原始的request方法。这是struts2最好用的功能之一了。但是在有些情况之下我们还是需要用到原始的request、response和session的。所以这里我们讲讲如何获得这三个对象,一般来说有两种方法。

一、第一种方法

如果我们只是在一个方法中获得这些对象,那么我是可是使用ServletActionContext类。我们可以新建一个GoodsAction类,同时新建一个方法addgoods,实现代码如下:

/**

 * 如何获得原始的request和response session 两种方法 

 */

public class GoodsAction extends ActionSupport{ 

    public String addgoods() {

         //第一种方式 
        HttpServletRequest request=ServletActionContext.getRequest();
        HttpServletResponse response = ServletActionContext.getResponse();
        HttpSession session = request.getSession();

        String gname = request.getParameter("gname");
        System.out.println(gname);
        return SUCCESS;

    }
}

struts.xml的配置文件如下:

<action name="addgoods" class="com.action.GoodsAction" method="addgoods">
   <result name="success">/success.jsp</result>
</action>

在index.jsp中新建一个超链接测试。注意看后台输出。

<a href="addgoods.action?gname=cookie">添加商品</a>

后台应该会输出:cookie。证明后台是可以获得页面传过来的值的,也就是我们的request是可以正常使用的。

二、第二种方法

第一种方法比较适合在一个方法中使用,如果这个类的全部方法都会使用,那么可以把request、response和session声明为全局变量,然后实现相关的接口,织入这些对象。实现代码如下:

/**

 * 如何获得原始的request和response session 两种方法

 */

public class GoodsAction extends ActionSupport implements ServletRequestAware,
        ServletResponseAware, SessionAware {
    protected HttpServletRequest request;
    protected HttpServletResponse response;
    protected Map<String, Object> session;//这个地方要注意

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

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

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

    public String addgoods() {
        String gname = request.getParameter("gname");
        System.out.println(gname);
        return SUCCESS;
    }
}

你可以重启启动项目后,再次测试,后台还是可以打印gname的数据。

在这里有一点需要特别注意的,就是struts2对HttpSession封装成为一个Map对象,所以在我们定义的是一个Map<String, Object> 类型来保持session的对象。

三、封装BaseAction

如果有好几个Action都需要用到这三个对象,每个Action都实现这三个对象,确实又有点麻烦,我们可以封装一个BaseAction实现这个三个接口,如果那个Action需要用到这三个对象,直接继承BaseAction就可以了。BaseAction类代码如下:

public class BaseAction extends ActionSupport implements ServletRequestAware,
        ServletResponseAware, SessionAware {
    protected HttpServletRequest request;
    protected HttpServletResponse response;
    protected Map<String, Object> session;

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

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

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

}

GoodsAction可以修改成为这样了:

/**
 * 如何获得原始的request和response session 两种方法
 */
public class GoodsAction extends BaseAction{
    public String addgoods() {
        String gname = request.getParameter("gname");
        System.out.println(gname);
        return SUCCESS;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值