servlet的一些简单理解
Servlet是sun公司提供的一門用于開發(fā)動態(tài)web資源的技術
Sun公司在其API中提供了一個servlet接口,用戶若想用發(fā)一個動態(tài)web資源(即開發(fā)一個Java程序向瀏覽器輸出數(shù)據(jù)),需要完成以下2個步驟:
1、編寫一個Java類,實現(xiàn)servlet接口。
2、把開發(fā)好的Java類部署到web服務器中。
按照一種約定俗成的稱呼習慣,通常我們也把實現(xiàn)了servlet接口的java程序,稱之為Servlet。
一般是作為來自 Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 服務器上的數(shù)據(jù)庫或應用程序之間的中間層,用于處理及響應客戶的請求
Servlet 生命周期可被定義為從創(chuàng)建直到毀滅的整個過程。以下是 Servlet 遵循的過程:
Servlet 通過調(diào)用 init () 方法進行初始化。
Servlet 調(diào)用 service() 方法來處理客戶端的請求。
Servlet 通過調(diào)用 destroy() 方法終止(結(jié)束)。
最后,Servlet 是由 JVM 的垃圾回收器進行垃圾回收的。
Web 應用的初始化工作是在 ContextConfig 的 configureStart 方法中實現(xiàn)的,應用的初始化主要是要解析 web.xml 文件,
這個文件描述了一個 Web 應用的關鍵信息,也是一個 Web 應用的入口。
接下去將會將 Web.xml 對象中的屬性設置到 Context 容器中,這里包括創(chuàng)建 Servlet 對象、filter、listener 等等
當用戶從瀏覽器向服務器發(fā)起一個請求,通常會包含如下信息:http://hostname: port /contextpath/servletpath,hostname 和 port 是用來與服務器建立 TCP 連接,
而后面的 URL 才是用來選擇服務器中哪個子容器(servlet容器)去服務用戶的請求
Session 與 Cookie 的作用都是為了保持訪問用戶與后端服務器的交互狀態(tài)。它們有各自的優(yōu)點也有各自的缺陷,
然而具有諷刺意味的是它們優(yōu)點和它們的使用場景又是矛盾的,例如使用 Cookie 來傳遞信息時,隨著 Cookie 個數(shù)的增多和訪問量的增加,
它占用的網(wǎng)絡帶寬也很大,試想假如 Cookie 占用 200 個字節(jié),如果一天的 PV 有幾億的時候,它要占用多少帶寬。所以大訪問量的時候希望用 Session,
但是 Session 的致命弱點是不容易在多臺服務器之間共享,所以這也限制了 Session 的使用。
最后說一說在javaweb的web.xml文件中關于<servlet-mapping>的<url-pattern>的理解:
容器的Context對象對請求路徑(URL)做出處理,(當用戶從瀏覽器向服務器發(fā)起一個請求,通常會包含如下信息:http://hostname: port /contextpath/servletpath,hostname 和 port 是用來與服務器建立 TCP 連接,而后面的 URL 才是用來選擇服務器中哪個子容器(servlet)的)。去掉請求URL的上下文路徑后,按路徑映射規(guī)則和Servlet映射路徑(<url- pattern>)做匹配,如果匹配成功,則調(diào)用這個Servlet處理請求。
舉個例子說明servlet容器對url的匹配過程:
當一個請求發(fā)送到servlet容器的時候,容器先會將請求的url減去當前應用上下文的路徑作為servlet的映射url,比如我訪問的是http://localhost/test/fourier.html,我的應用上下文是test,容器會將http://localhost/test去掉,剩下的/fourier.html部分拿來做servlet的映射匹配。這個映射匹配過程是有順序的,而且當有一個servlet匹配成功以后,就不會去理會剩下的servlet了(filter不同,后文會提到),而對于filter,不會像servlet那樣只匹配一個servlet,因為filter的集合是一個鏈,所以只會有處理的順序不同,而不會出現(xiàn)只選擇一個filter。Filter的處理順序和filter-mapping在web.xml中定義的順序相同。
總結(jié)
以上是生活随笔為你收集整理的servlet的一些简单理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 被面试官虐过之后,他轻蔑的问我:你还说你
- 下一篇: 面试必问:用 Java 写一个内存泄漏程