java-web 第五講 應用程序的部署 和 會話跟蹤

1:web 應用程序的配置

1.1  conf/server.xml    <Context> 講解  : 表示一個web 應用程序運行在特定的虛擬機中,不用再將項目文件拷貝到 webapps 下

<Context> 元素  是 <Host> 元素的子元素
         元素屬性講解:
className:  指定實現了 org.apache.catalina.Context 接口的類名。

coockie      : 指定是否將coockie應用於 session,默認爲 true

crossContext  :  如果設置爲 true在應用程序內容調用 ServletContext.getContext() 成功返回運行在同一個虛擬機中的其他web項目的 請求調度器。默認 false

doBase 指定web 程序的文檔目錄或者 war文件的路徑名,該屬性是必須的 絕對路徑 或者 appBase 下的相對路徑

path:  指定web 應用程序的上下文路徑。
reloadable:  如果設置爲 true,服務器會監視 WEB-INF/classes 和 WEB-INF/lib 目錄下類的改變,如果發現更新,服務器會自動重新加載該 web 程序,默認 false,需佔用一定資源開銷
unpackWAR: 爲true 的話 Tomcat 在運行web 應用程序前將展開所有壓縮的 Web 應用程序。默認 true

例如:
<Host name[="localhost" appBase="webapps" unpackWARS="true" autoDeply="true" xmlValidation="false" xmlNamespaceaWare="false">
<Context path="/MyServlet" doBase="/MyServlet" reloadable="true">
</Host>

<Context> 元素還可以放在 conf/context.xml 在這個文件中的信息將被所有的web 應用程序所加載
還可以放在 對應 應用程序下的 META-INF/context.xml 內

Tomcat 中 不建議將 <Context> 元素放在 server.xml 中,因爲容器啓動後,server.xml 只加載一遍,將不會再加載。

1.2 servlet 的另一種運行方式
	  	第一種方式:  web.xml 中部署 servlet  
		  第二種方式: 利用 Tomcat 的 Servlet 調用器,即在 Tomcat 下的/conf/catalina/localhost 下創建 項目名.xml   添加 <Context> 元素 docBase 節點爲 絕對路徑,可以運行

    1.3  與servlet 配置相關的元素  web.xml
		<servlet> 節點
			
		
				<init-param> 節點內容的獲取通過 servlet 實例中的ServletContext.getInitParameter("這裏輸入param-name 名稱"); 並且這部分應該在 servlet init() 方法中初始化

<servlet-mapping> 節點
			在 servlet 和 URL 之間定義一個映射,包含了子元素 <servlet-name>  和 <url-pattern> url相對路徑 這個在form 表單中的 action = 中 定義


		

2:web 應用程序中數據庫的訪問

數據庫的url name passwd driverClass 可以放在 servlet 的 <init-param> 中
注意 CallableStatement 用於執行存儲過程
本章節重點講下 JDBC數據源和連接池
利用 DataSource 接口來獲取對數據庫的連接
DataSource 對象獲取,通過 java 的 jndi服務器查詢來獲取
1:在 server.xml 的 <Context> 元素中配置數據源
2:使用 java 上下文來獲取數據源: 注意:在配置jdbc 數據源所指定的JNDI 名,是相對於 java:comp/env 上下文來的
下章節講 servlet 的會話跟蹤技術 本章節不再進行舉例

3: 會話跟蹤

客戶和服務器之間的會話是通過HTTP 協議 屬於無狀態的,web服務器需要採用一種機制來唯一標示一個客戶
會話跟蹤實現的三種機制:
SSL 會話: 安全套接字層
Cookie: 以鍵值對的形式記錄會話跟蹤的內容,服務器利用響應報頭 Set-Cookie 來發送Cookie 信息
響應包頭的格式爲:
Set-Cookie: NAME=VALUE (Coockie 名稱); 這裏必須首先出現,後面的元素可以無序
Content=value; - 包含用戶私有信息
Domain=value;  - 指定cookie 在哪一個域中有效 必須以 . 號開始
Max-Age=value; - Cookie 生生存時間 以秒 爲單位 超過就無效 
path=value; - 指定 coockie 在哪一個URL 子集下有效 
Version=1
例如: Set-Cookie: uid=zhangsan;Max-Age=3600;Domain=.sunxin.org;Path=/bbs;Version=1
說明上面這個響應包頭髮送了一個名爲 uid 值爲 zhangsan 的cookie,生存時間爲3600秒,在 sunxin.org 域的/bbs 路徑內有效,超時該cookie 無效。
當瀏覽器接受到這個響應報頭後,可以選擇拒絕或者接受這個cookie,如果接受的話,瀏覽器下一次發送請求給 http://www.sunxin.org/bbs/路徑下的資源時,同時也會發送一個請求報頭:
Cookie:uid=zhangsan
服務器從請求報頭中獲取到cookie,通過標示符取出 zhangsan 的狀態信息,這樣,通過爲不同的客戶發送不同的cookie,可以實現每個用戶的會話跟蹤。 cookie 會存在客戶硬盤上,
如果客戶瀏覽器禁用 cookie的話,那麼本機制就無法運行。
URL重寫:在 URL 中嵌入標示客戶的 Session ID,servlet 容器解析 URL,取出 SessionID,根據SessionID將請求與特定的Session 關聯。
SessionID的名稱按照規範必須是 jsessionid,
例如: http://www.sunxin.org/bbs/index.jsp;jsessionid=1234?name=zhangsan&age=18
要跟蹤客戶端的會話,就需要將所有發往客戶端的URL 進行編碼,可以通過調用 HttpServletResponse 接口中的 encodeURL() 方法和 encodeRedirectURL() 方法來實現,其中 encodeRedirectURL() 方法
在 調用 重定向 sendRedirect() 方法調用前使用。

3.1 java Servlet API 的會話跟蹤

				 java Servlet API 中的 HttPSession 封裝了Session 的概念,當一個會話開始的時候,Servlet 容器 就創建了一個 HttpSession 對象,在 HttpSession 中存放客戶的狀態信息,同時 
			Servlet 容器爲 HttpSession 分配了一個唯一的 SessionID 將其作爲 Cookie 或 URL的一部分發送給瀏覽器,當客戶再發送請求的時候,瀏覽器將Cookie 一起發出,容器讀出 SessionID 找到 HttpSession 對象。
			  HttpSession 接口: 
					Object getAttribute(String name);
					Enumberation getAttributeNames();
					void removeAttribute(String name);
					void setAttribute(String name,Object value);
				四個方法用於 HttpSession 讀取 移除和設置屬性,
					long getCreationTime():返回session 創建的時間,從1970-1-1 以後的毫秒數 
					String getId(): 返回一個字符串,包含Session 唯一標示符。
					long getLastAccessedTime(): 返回客戶最後一次發送與Session 相關請求的時間 可以確定兩次會話期間客戶的非會話間隔時間
					int getMaxInActiveInterval(): 返回以毫秒爲單位的最大時間間隔,這個時間是容器在客戶請求期間保持session 打開的最長時間間隔,超過時間session 失效。
					void setMaxInActiveInterval(): 設置session 失效時間,如果值爲 -1 ,session 永不失效。
										ServletContext  getServletContext(): 返回 Session 所屬的 ServletContext 對象
										void invalidate():  使session 失效,如客戶退出登錄。
										boolean isNew(): 判斷session是否在容器中存在。
						Session 的生命週期:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章