Servlet技術---Servlet深化

我是喬同學發表於2012-10-20

Servlet的執行緒安全問題,多個客戶端訪問Servlet時,Servlet就會建立一個執行緒,並呼叫service方法,因此service方法在同時訪問一個資源的時候,就會出現安全問題。

SingleThreadModel介面已經過時,實現SingleThreadModel介面,客戶端訪問Servlet時就會建立一個Servlet物件

解決Servlet執行緒安全問題,需要用到執行緒同步解決。程式碼如下:
privateintcount=0;

    publicvoid doGet(HttpServletRequest request, HttpServletResponse response)

           throws ServletException, IOException {

       synchronized (this) {

           count++;

           try {

              Thread.sleep(1000);

           } catch (InterruptedException e1) {

              //TODO Auto-generated catch block

              e1.printStackTrace();

           }

           response.getWriter().print(count);

       }

   

如果不用執行緒的同步就會出現相同的資料,造成資源的安全問題;

這裡的Thread.sleep(1000);不能向外面丟擲異常,只能處;

由於利用執行緒同步,就加鎖了,在客戶端訪問資源的時候,請求的時間相對長,是因為下一個客戶必須等上一個客戶釋放了鎖,才能訪問資源;

這就解決了Servlet的執行緒安全問題。

 

ServletConfig物件

Servlet的配置檔案中,可以使用一個或多個<init-param>標籤為servlet配置一些初始化引數。

 

servlet配置了初始化引數後,web容器在建立servlet例項物件時,會自動將這些初始化引數封裝到ServletConfig物件中,並在呼叫servletinit方法時,將ServletConfig物件傳遞給servlet。進而,程式設計師通過ServletConfig物件就可以得到當前servlet的初始化引數資訊。

相關文章