所謂“作用域”就是通過設置屬性的方式,將一些信息綁定到對象上。
Servlet 中能夠設置屬性的對象有ServletRequest
/HttpServletRequest
、HttpSession
、ServletContext
。用於存儲、查詢和刪除這些屬性的方法對於所有的作用域都是相同的。它們是:
Object getAttribute(String name);
void setAttribute(String name, Object value);
void removeAttribute(String name);
Enumeration getAttributeNames();
① ServletRequest
:請求作用域
對應於JSP 中的Request
,封裝了客戶的請求信息, 如客戶的請求方式、參數名和參數值 、客戶端正在使用的協議,以及發出請求的遠程主機信息。HttpServletRequest
接口包含了客戶端的請求信息,通過該接口取得客戶端的一些信息(如:IP地址、瀏覽器類型等)及HTTP 請求類型(如:GET、HEAD、POST、PUT等)。
通過HttpServletRequest
接口中的getSession()
方法還可以獲得會話作用域(HttpSession
) 。
public HttpSession getSession();
如果“當前用戶的會話對象”爲空(第一次訪問時)則創建一個新的會話對象返回
public HttpSession getSession(boolean create); ``create=false
:如果“當前用戶的會話對象”爲空,則返回null(即不自動創建會話對象),create = true
與不帶參數用法一樣。
ServletRequest
對象獲得方法
javax.servlet.ServletRequestWrapper.getRequest();
② HttpSession
:會話作用域
對應於JSP 中的Session
,爲訪客分配一個唯一標識,並存儲在客戶端的Cookie
中。
常用方法:
public boolean isNew();// 判斷這個session是不是新的。
public void invalidate();// 終止這個session。所有綁定在這個session上的數據都會被清除。
public void setMaxInactiveInterval(int interval);// 設置會話的超時值。
HttpSession
對象幾種獲得方法
javax.servlet.http.HttpServletRequest.getSession(boolean create);
javax.servlet.http.HttpServletRequest.getSession();
javax.servlet.http.HttpServletRequestWrapper.getSession(boolean create);
javax.servlet.http.HttpServletRequestWrapper.getSession();
javax.servlet.http.HttpSessionBindingEvent.getSession();
javax.servlet.http.HttpSessionContext.getSession(String sessionID);
javax.servlet.http.HttpSessionEvent.getSession();
③ ServletContext
:上下文作用域
對應於JSP 中的Application
,是Servlet
與Servlet 容器
直接通信的接口,Servlet
容器在啓動一個Web 應用時,會爲它創建一個唯一的ServletContext
對象。同一個Web 應用的所有Servlet
共享一個ServletContext
,Servlet
對象通過它來訪問 Servlet
容器中的各種資源。
常用方法:
1) 訪問當前Web 的應用資源
public String getContextpath();// 返回當前Web應用的入口URL。
public String getInitParameter(String name);//返回Web 應用範圍內的匹配的初始化參數值。在web.xml 中<web-app>元素中<context-param>元素標識應用範圍內的初始化參數。
public Enumeration getInitParameterNames();
public String getServletContextName();// 返回Web 應用名字。即<web-app>元素中<display-name>元素的值。
public RequestDispacher getRequestDispacher(String path);//返回一個像其他Web組件發送請求的RequestDispacher 對象。
2) 訪問 Servlet 容器的相關信息
public ServletContext getContext(String uripath);// 根據指定的URI,返回當前Servlet容器中,其他Web 應用的ServletContext 對象。
3) 訪問Web 容器的相關信息
public String getServerInfo();// 返回Servlet 容器的名字和版本。
public int getMajorVersion();// 返回Servlet 容器支持的java Servlet API 的主版本號。
public int getMinorVersion();// 返回Servlet 容器支持的java Servlet API 的主版次號。
4) 訪問服務器端的文件系統資源
public String getRealPath(String path);// 根據參數指定的虛擬路徑,返回一個文件系統中的真實路徑。
public URL getResource(String path);// 返回一個指定路徑的URL。
5) 輸出日誌
public void log(String msg);// 向Servlet 的日誌文件中寫日誌。
public void log(String msg,Throwable throwable);// 向日志文件中寫錯誤信息,以及異常堆棧信息。
ServletContext 對象獲得的幾種方式:
javax.servelt.http.HttpServlet.getServletContent();
javax.servlet.http.HttpSession.getServletContext();
javax.servlet.jsp.PageContext.getServletContext();
javax.servlet.servletConfig.getServletContext();
轉載自Servlet作用域