1. 程式人生 > >servlet3.0理解

servlet3.0理解

ring 拷貝 baidu del 應用服務 5% 服務 應用服務器 自己

1.servlet是用Java編寫的服務器端程序,服務器端程序,服務器端程序。

2.Servlet運行於支持Java的應用服務器中。spring mvc有自己的實現servlet

從原理上講,Servlet可以響應任何類型的請求,但絕大多數情況下Servlet只用來擴展基於HTTP協議的Web服務器。

3.

在 Web 應用程序中,一個 Servlet 在一個時刻可能被多個用戶同時訪問。這時 Web 容器將為每個用戶創建一個線程來執行 Servlet。如果 Servlet 不涉及共享資源的問題,不必關心多線程問題。但如果 Servlet 需要共享資源,需要保證 Servlet 是線程安全的。 下面是編寫線程安全的 Servlet 的一些建議: (1)用方法的局部變量保存請求中的專有數據。對方法中定義的局部變量,進入方法的每個線程都有自己的一份方法變量拷貝。任何線程都不會修改其他線程的局部變量。如果要在不同的請求之間共享數據,應該使用會話來共享這類數據。 (2)只用 Servlet的成員變量來存放那些不會改變的數據。有些數據在 Servlet 生命周期中不發生任何變化,通常是在初始時確定的,這些數據可以使用成員變量保存,如數據庫連接名稱、其他資源的路徑等。 (3)對可能被請求修改的成員變量同步。有時數據成員變量或者環境屬性可能被請求修改。當訪問這些數據時應該對它們同步,以避免多個線程同時修改這些數據。 (4)如果 Servlet 訪問外部資源,那麽需要同步訪問這些資源。例如,假設 Servlet 要從文件中讀寫數據。當一個線程讀寫一個文件時,其他線程也可能正在讀寫這個文件。文件訪問本身不是線程安全的,所以必須編寫同步訪問這些資源的代碼。在編寫線程安全的 Servlet 時,下面兩種方法是不應該使用的: (1)在 Servlet API 中提供了一個 SingleThreadModel 接口,實現這個接口的 Servlet 在被多個客戶請求時一個時刻只有一個線程運行。這個接口已被標記不推薦使用。 (2)對 doGet() 或doPost() 方法同步。如果必須在 Servlet 中使用同步代碼,應盡量在最小的代碼塊範圍上進行同步。同步代碼越小,Servlet 執行得才越好。[4]

servlet3.0理解