Struts2获取servletAPI的几种方式

Struts2的Action并未直接与任何servletAPI耦合,但对于Web应用的控制器而言,不访问Servlet API几乎是不可能的,例如跟踪HTTP Session状态等。

web应用中通常需要访问的servlet API就是HttpServletRequest、httpSession和ServletContext,这三个接口分别代表JSP内置对象中的request、session和application。


struts2有两种方式获取servletAPI:非IOC方式和IOC方式


一、非IOC方式


·struts2提供了一个ActionContext类,struts2可以通过该类来访问servletAPI(推荐使用该方法)

ActionContext类中包含的几个常用的方法:

1、Object get(Object key):该方法类似于调用HttpServletRequest的getAttribute(String name)方法

2、Map getApplication():返回一个Map对象,该对象模拟了该应用的ServletContext实例

3、static ActionContext getContext():静态方法,获取系统的ActionContext实例

4、Map getParameters():获取所有的请求参数。类似于调用HttpServletRequest对象的getParameterMap()方法

5、Map getSession():返回一个Map对象,该Map对象模拟了HttpSession实例

6、void setApplication(Map application):直接传入一个Map实例。将该Map实例里的key-value对转换成application的属性名,属性值

7、void setSession(Map session):直接传入一个Map实例,将该Map实例里的key-value转换成session的属性名、属性值

示例:


public String execute() throws Exception {
        String name="admin";
        //获取session
        Map session=ActionContext.getContext().getSession();
        //将想要存放的值放到session域中
        session.put("sessionName",name);
        //获取request--获取的是HttpServletRequest对象的attribute
        Map request=(Map) ActionContext.getContext().get("request");
        //将值存放到request域中
        request.put("requestName", name);
        //获取application
        Map application=ActionContext.getContext().getApplication();
        //将值存入application域中
        application.put("applicationName", name);
        return null;
    }

以上获取得到的三大域都是Map类型的,比如对于request来说,我们通常喜欢获取HttpServletRequest类型的,因为这个类型的request功能要强大 的多,用ActionContext也是可以获取的,而且也是我们更常用的一种方式,如下:


//获取HttpServletRequest
HttpServletRequest request=(HttpServletRequest) ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST);
//通过request获取session
HttpSession session=request.getSession();


·通过ServletActionContext的静态方法获取


ServletActionContext工具类包含如下的几个静态方法:

static PageContext getPageContext();取得web应用的PageContext对象

static HttpServletRequest getRequest();取得web应用的HttpServletRequest对象

static HttpServletResponse getResponse();取得web应用的HttpServletResponse对象

static ServletContext getServletContext();取得web应用的ServletContext对象

public String execute() throws Exception {
        //获取HttpServletRequest
        HttpServletRequest request=ServletActionContext.getRequest();
        //通过request获取session
        HttpSession session=request.getSession();
        return null;
    }


二、IOC(控制反转Inversion of Control)


为了在Action中直接访问ServletAPI,Struts2还提供了如下几个接口

1)request 对应ServletRequestAware接口

2)response 对应ServletResponseAware接口

3)session 对应SessionAware接口

4)application 对应ServletContextAware接口

Struts2在实例化一个action对象时,如果发现他实现了相关的Aware接口,就会把相应的资源通过Aware接口方法注入进去,所以叫做注入方式(IOC 方式),以request为例,实现了ServletRequestAware接口,就会有一个setServletRequest()方法获取request对象,Aware接口实际上是一种拦截 器,它会在执行Action前执行,把相关的servlet对象设置进来,代码如下:

import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport implements ServletRequestAware{
    HttpServletRequest request;
    public String execute() throws Exception {
        String name="admin";
        request.setAttribute("name", name);
        return null;
    }
    @Override
    public void setServletRequest(HttpServletRequest request) {
        //通过该方法可直接获取到request对象
        this.request=request;
    }
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值