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);//获取值栈