servlet的 執行緒安全問題&建立時機改變&對映細節
Servlet的細節:
a: servlet 的執行緒安全問題:
1) Servlet是單例的, 不安全的。 當Servlet的例項被建立後,自始至終在駐留在記憶體當中。 只有一份。 當多條執行緒對servlet的全域性變數進行訪問的時候,就容易引發資料的安全問題。 2)以下幾種方式 , 去解決資料的安全問題: a:儘量的不要使用全域性變數: 使用區域性變數。 b:提供無狀態的成員: 不提供get 和 set方法: c: 提供只讀狀態: 只提供get方法:
b: 改變Servlet的建立時機:
預設情況: 在客戶端瀏覽器第一次發出請求的時候, 伺服器端建立servlet。 改變: 在伺服器端啟動的時候,建立servlet 。 建立時機提前。 web.xml檔案當中: <load-on-startup>0</load-on-startup> 數值越小, 建立的時機越早。
c: 當前web 應用程式的: web.xml
tomcat: web.xml tomcat 執行時候依賴的一個檔案。 當前web應用程式的web.xml 繼承了 tomcat伺服器的web.xml 檔案。 在載入web.xml的時候,優先載入父檔案。
d: servlet的對映細節:
(1)同一個servlet 可以繫結多個對映路徑: 案例: <servlet-mapping> <servlet-name>CServlet</servlet-name> <url-pattern>/servlet/CServlet</url-pattern> <url-pattern>/servlet/xxx</url-pattern> </servlet-mapping> (2) 配置對映路徑的時候,可以使用萬用字元: 1) <url-pattern>/servlet/xxx</url-pattern> 對映標籤在進行配置的時候,必須是/ 開頭。 /相對路徑, 相對於當前的web應用: http://localhost:8080/javaEE-04/ 2) 同一個servlet 可以配置多個對映路徑: <servlet-mapping> <servlet-name>CServlet</servlet-name> <url-pattern>/servlet/CServlet</url-pattern> <url-pattern>/servlet/*</url-pattern> </servlet-mapping> 3) 萬用字元的使用: *: 代表任意: /* :代表的是任意的請求: *.do : 只要是.do結尾的都可以。 注意: * 只能為字首 或者是字尾。 不能在中間使用: 4)萬用字元的優先順序的問題: 在使用萬用字元的時候,才有精確匹配的原則。