The Web Container Model
javax.servlet.ServletContext 接口下的方法:
String getInitParameter(String name) 取得Context起始參數值。
Enumeration getInitParameterNames() 取得Context起始參數名稱。
void log(String msg) 將特定信息寫入Servlet容器(container)的日誌文件。
void log(String msg , Throwable throwable) 將特定信息及丟出的例外寫入Servlet容器的日誌文件
void setAttribute(String name , Object object) 將某對象當作屬性bind至ServletContext對象。
Object getAttribute(String name) 從ServletContext對象中取出某個屬性。
Enumeration getAttributeNames() 從ServletContext對象中取出所有屬性名稱。
void removeAttribute(String name) 從ServletContext對象中移除某個屬性。
URL getResource(String path) throws MalformedURLException 取得特定路徑下的資源文件。
InputStream getResourceAsStream(String path) 取得特定路徑下的資源文件。
javax.servlet.ServletContextListener 接口提供兩個方法:
void contextInitialized(ServletContextEvent sce) è在Web應用程序的初始階段被呼叫。
void contextDestroyed(ServletContextEvent sce) è在Web應用程序的結束階段被呼叫。
javax.servlet.ServletContextAttributeListener 接口提供三個方法:
void attributeAdded(ServletContextAttributeEvent scae) ServletContext加入新屬性時被呼叫。
void attributeRemoved(ServletContextAttributeEvent scae) ServletContext刪除某屬性時被呼叫。
void attributeReplaced(ServletContextAttributeEvent scae) ServletContext置換某屬性時被呼叫。
javax.servlet.ServletRequestListener 接口提供兩個方法:
void requestInitialized(ServletRequestEvent sce) 在request的初始階段被呼叫。
void requestDestroyed(ServletRequestEvent sce) 在request的結束階段被呼叫。
javax.servlet.ServletRequestAttributeListener 接口提供三個方法:
void attributeAdded(ServletRequestAttributeEvent scae) ServletRequest加入新屬性時被呼叫。
void attributeRemoved(ServletRequestAttributeEvent scae) ServletRequest刪除某屬性時被呼叫。
void attributeReplaced(ServletRequestAttributeEvent scae) ServletRequest置換某屬性時被呼叫
javax.servlet.http.HttpSessionListener接口提供的二個方法:
void sessionCreated(HttpSessionEvent se) 建立新的HttpSession時被呼叫。
void sessionDestroyed(HttpSessionEvent se) 移除某個HttpSession時被呼叫。
javax.servlet.http.HttpSessionActivationListener接口提供的二個方法:(不用在web.xml裏設定配置)
void sessionWillPassivate(HttpSessionEvent se) 當HttpSession必須轉移到其它服務器之前被呼叫。
void sessionDidActivate(HttpSessionEvent se) 當HttpSession被轉移到其它服務器之後被呼叫。
javax.servlet.http.HttpSessionAttributeListener接口提供的三個方法:
void attributeAdded(HttpSessionBindingEvent sbe) HttpSession加入新屬性時被呼叫。
void attributeRemoved(HttpSessionBindingEvent sbe) HttpSession刪除某屬性時被呼叫。
void attributeReplaced(HttpSessionBindingEvent sbe) HttpSession置換某屬性時被呼叫。
javax.servlet.http.HttpSessionBindingListener接口提供的三個方法:(不用在web.xml裏設定配置)
void valueBound(HttpSessionBindingEvent sbe) 當某對象bind至HttpSession時被呼叫。
void valueUnbound(HttpSessionBindingEvent sbe) 當某對象從HttpSession被刪除時呼叫。
某物件:必須是實現HttpSessionBindingListener接口的對象。
===========================================================================
請求轉送(Request Dispatching)
javax.servlet.ServletRequest 和 javax.servlet.ServletContext 皆有定義一個 getRequestDispatcher() 方法,回傳一個RequestDispatcher對象,再使用javax.servlet.RequestDispatcher接口所定義的forward()或include()方法來轉送或包含HTTP請求。
基本步驟: RequestDispatcher rd = request.getRequestDispatcher(“/ServletNmae”) ;
rd.forward(request , response) ; or
rd.include(request , response) ;
forward():將HTTP請求轉送給其它Web資源(如Servler , JSP或HTML)進行處理。
1. 在HTTP迴應被”確認”(committed)以前才能呼叫forward()方法,否則將拋出
IllegalStateException例外。
2. 呼叫forward()方法之後,原先存放在HttpServletResponse對象的內容將會自動被清除。
3. 送出forward()後,若再送出out.print()會丟出IllegalStateException例外。
include():將HTTP請求轉送給其它Servlet時,被呼叫的Servlet如果產生任何HTTP響應,將會
併入原來的HttpServletResponse對象。
請注意,傳入ServletContext.getRequestDispatcher()方法的路徑名稱必須以”/”開頭,這裏的”/”代表Web應用程序的起始位置(context root),也就是說必須是”絕對”路徑。
線程安全(Thread-Safe)的變量與屬性:
Local Variable 屬於”線程安全”
Instance Variable 不屬於”線程安全”
Class Variable 不屬於”線程安全”
HttpServletRequest對象內的屬性è屬於”線程安全”
HttpSession對象內的屬性 不屬於”線程安全”
ServletContext對象內的屬性 不屬於”線程安全”
ServletContext、ServletConfig的起始參數(Initial Parameter)屬線程安全,只能讀取不能寫入(修改)。