1. 程式人生 > >servlet的 執行緒安全問題&建立時機改變&對映細節

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