如何在Action类中访问Servlet原生的API

1.解耦的方式(使用Map对象代替Servlet原生的API)

  >实现XxxAware接口,得到对应Map对象

    ApplicationAware;RequestAware;SessionAware;ParameterAware;

  >通过ActionContext对象获取对应的Map对象(actionContext实质上是一个Map)(里面没有response)

        // ctx实质上就是一个Map对象。是Action的上下文,可以获取到当前Action需要的一切信息
        ActionContext ctx = ActionContext.getContext();
        Map<String, Object> application = ctx.getApplication();
        //获取到的这个session和其他的Map有点区别:
        //它实际是SessionMap类型,可以对其强转,其中有一个真正的session对象,并且有invalide()方法可以使session失效
        Map<String, Object> session = ctx.getSession();
        // 没有getRequest方法,只能这样获取
        Map<String, Object> request = (Map<String, Object>) ctx.get("request");
        // actionContext里面没有response,下面这种方式获取不到
        // Map<String, Object> response = (Map<String, Object>)ctx.get("response");

        // params其中的Object实质上是String[],需要强转。(注意:只能读,向里面写不起作用)
        Map<String, Object> params = ctx.getParameters();

  >以上两种方式的选用建议

    第一种,一次获取,整个Action方法中都可以直接使用;而第二种,不同action方法需分别获取。

2.耦合的方式(真正的Servlet原生的API)

  >实现ServletXxxAware接口,得到对应的原生API(通过request来获取session和response)

        ServletRequestAware;ServletResponseAware;ServletContextAware;

  >通过ServletActionContext对象的静态方法得到原生API(通过request来获取session和response)

        ServletContext sctx = ServletActionContext.getServletContext();//和application是一个对象
        HttpServletResponse resp = ServletActionContext.getResponse();//获取response
        HttpServletRequest req = ServletActionContext.getRequest();//获取request
        HttpSession sess = ServletActionContext.getRequest().getSession();//获取session
        Map<String, String[]> paramsMap = ServletActionContext.getRequest().getParameterMap();//获取参数的Map
        ValueStack valueStack = ServletActionContext.getValueStack(req);//获取值栈
原文地址:https://www.cnblogs.com/feifeiyun/p/6636806.html