1. 程式人生 > >淺談ServletContext,HttpServletRequest,HttpServletResponse,HttpSession的獲取

淺談ServletContext,HttpServletRequest,HttpServletResponse,HttpSession的獲取

(1)對於一個web容器,ServletContext 是Servlet與Servlet容器之間直接通訊的介面,Servlet容器在啟動一個web應用時,會為它建立一個ServletContext物件,每個web應用有唯一的ServletContext物件,同一個web應用的所有Servlet物件共享一個 ServletContext,Servlet物件可以通過它來訪問容器中的各種資源。簡單的說,對於一個web應用,servletContext物件就是這個web容器的全域性物件。
(2)網上很多人提問題想要在一個普通java類中獲取這四個物件,自我感覺是沒有什麼意義的,除非有特殊需求,而真正需要這四個類的地方現在無非就是servlet和由struts2封裝了的servlet也就是action,下面舉出幾種常見的獲取方法。
普通servlet中:
servlet是繼承了httpServlet的java普通類,因此在其方法(比如doGet,doPost)的引數中都會預設取到HttpServletRequest,HttpServletResponse這個兩個類,同樣ServletContext和HttpSession也夠可以通過HttpServletRequest這個類取到:

request.getSession().getServletContext();
request.getSession();
方法取得。 在action中:
(1)在繼承ActionSupport後,可以通過ServletActionContext這個類獲得。
(2)可以通過繼承ServletRequestAware,ServletResponseAware, ServletContextAware這三個類獲得。
public class HelloWorldAction implements ServletRequestAware,
		ServletResponseAware, ServletContextAware {
	private HttpServletRequest request;
	private ServletContext servletContext;
	private HttpServletResponse response;


	public void setServletRequest(HttpServletRequest req) {
		this.request = req;
	}


	public void setServletResponse(HttpServletResponse res) {
		this.response = res;
	}


	public void setServletContext(ServletContext ser) {
		this.servletContext = ser;
	}
}