一、什么是WEB资源?
HttpServletRequest,HttpSession,ServletContext等原生的Servlet API
二、为什么访问WEB资源?
B\S的应用的Controller中必须需要访问WEB资源
向域对象中读写属性,读写Cookie,获取realPath
三、如何访问?
1、:和Servlet API解耦的方式:只能访问有限的Servlet API对象,且只能访问有限的方法。(读取请求参数,读写域对象的属性,使session失效)
具体请参照博文:Struts2之Session
(1)使用ActionContext
通过import com.opensymphony.xwork2.ActionContext;
(2)实现XxxAware接口
通过Action实现如下接口
import org.apache.struts2.dispatcher.SessionMap; import org.apache.struts2.interceptor.ApplicationAware; import org.apache.struts2.interceptor.SessionAware;
(3)选用的建议:若一个Action类中有多个action方法,且多个方法都需要使用域对象的Map或parameters,则建议使用Aware接口的方式
(4)session对应的Map实际上是SessioMap类型的,强转后若调用invalidate()方法,可以使其session失效。
2、和Servlet API耦合的方式 :可以访问更多的Servlet API对象,且可以调用原生态的方法。
(1)使用ServletActionContext
public String execute(){ //ServletActionContext:可以从中获取到当前Action对象需要的一切Servlet API 相关的对象 //1、获取HttpServletRequest:ServletActionContext.getRequest(); //2、获取HttpSession:ServletActionContext.getRequest().getSession(); //3、获取ServletContext HttpServletRequest request=ServletActionContext.getRequest(); HttpSession session=ServletActionContext.getRequest().getSession(); ServletContext servletContext=ServletActionContext.getServletContext(); System.out.println("execute..."); return "success"; }
(2)实现ServletXxxAware接口
import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.interceptor.ServletResponseAware; import org.apache.struts2.util.ServletContextAware; //通过实现ServletXxxAware接口的方式可以由Struts2注入需要的Servlet相关的对象 //ServletRequestAware:注入HttpServletRequest对象(比较常用) //ServletContextAware:注入ServletContext对象(比较常用) //ServletResponseAware:注入HttpServletResponse对象 public class TestServletAware implements ServletRequestAware,ServletContextAware,ServletResponseAware{ public void setServletRequest(HttpServletRequest request) { System.out.println(request); } private ServletContext context; public void setServletContext(ServletContext context) { System.out.println(context); this.context=context; } public void setServletResponse(HttpServletResponse response) { System.out.println(response); } public String execute(){ System.out.println("ServletContext:" + context); return "success"; } }