Struts2之在Action中访问 WEB资源

在Action中访问  WEB资源  
一、什么是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";
	}
}

你可能感兴趣的:(struts2)