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)萬用字元的優先順序的問題:
在使用萬用字元的時候,才有精確匹配的原則。