有關(guān)Servlet的知識點總結(jié)

本篇內(nèi)容介紹了“有關(guān)Servlet的知識點總結(jié)”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的柳江網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

 1. 概述

在這篇簡短的文章中,我們將從概念上理解什么是servlet 和 servlet  容器以及它們是如何工作的。同時,還能在請求、響應(yīng)、會話對象、共享變量和多線程的上下文中看到它們的身影。

2. Servlets 和 它的容器

servlet 是 JEE 用于 web  開發(fā)常用的組件。它們基本上是運行在容器邊界內(nèi)的Java程序??偟膩碚f,它們負責接受請求,處理請求,并返回響應(yīng)。

要使用它們,首先需要容器注冊 servlet ,無論是基于 JEE 還是基于 Spring 的容器,都可以在啟動時接收它們。在開始時,容器通過調(diào)用  init() 方法來實例化 servlet。初始化完成后,servlet 就可以接受傳入的請求。隨后,容器將這些請求定向到 servlet 的 service  方法中進行處理。之后,它根據(jù)HTTP請求類型將請求進一步委托給適當?shù)姆椒?,例?doGet() 或 doPost() 。

使用 destroy(),容器會銷毀 servlet,并且不再接受傳入的請求。我們將這個 init-service-destroy 的循環(huán)稱為  servlet 的生命周期。

現(xiàn)在我們從容器的角度來看,比如 Apache Tomcat 或 Jetty 在啟動時,創(chuàng)建一個 ServletContext  的對象,ServletContext 的任務(wù)是充當服務(wù)器或容器的內(nèi)存,并記住與web應(yīng)用程序相關(guān)聯(lián)的所有servlet、過濾器和偵聽器,如其  web.xml文件或等效注解。在容器停止之前,ServletContext 會一直保留它。

不管怎么說,servlet的 load-on-startup 參數(shù)扮演重要的角色  。如果此參數(shù)的值大于零,則只有在啟動時服務(wù)器才會對其進行初始化。如果未指定此參數(shù),則在請求第一次命中 servlet時調(diào)用它的 init()。

3. Request, Response 和 Session

在上一節(jié)中,我們討論了發(fā)送請求和接收響應(yīng),這基本上是任何CS應(yīng)用程序的基礎(chǔ)?,F(xiàn)在,我們從servlet的角度來詳細了解它們。

在這種情況下,請求將由 HttpServletRequest 表示,響應(yīng)將用 HttpServletResponse 表示。

每當瀏覽器或curl命令等發(fā)送請求時,容器都會創(chuàng)建一個新的 HttpServletRequest 和 HttpServletResponse  對象。然后將這些新對象傳遞給 servlet 的 service方法?;?HttpServletRequest 的 method 屬性,此方法確定應(yīng)調(diào)用哪個  doXXX方法。

除了有關(guān)方法的信息外,request對象還攜帶其他信息,如頭、參數(shù)和主體。類似地,HttpServletResponse對象也攜帶頭、參數(shù)和主體——我們可以在  servlet 的 doXXX 方法中設(shè)置它們。

這些對象的生命稍縱即逝。當客戶端獲得響應(yīng)時,服務(wù)器將標記用于垃圾回收的請求和響應(yīng)對象。那么我們?nèi)绾卧陔S后的客戶端請求或連接之間保持一個狀態(tài)?答案就是  HttpSession。

原理是將這些對象綁定到用戶會話,以便與特定用戶相關(guān)的信息可以跨多個請求持久化。這通常是通過使用cookies的概念,使用 [JSESSIONID]  作為給定會話的唯一標識符。我們可以在web.xml中指定會話的超時時長。

<session-config>     <session-timeout>10</session-timeout> </session-config>

以上配置表示,如果會話空閑了10分鐘,服務(wù)器將丟棄它。任何后續(xù)請求都將創(chuàng)建一個新的會話。

4. Servlets 共享數(shù)據(jù)

根據(jù)所需的范圍,servlet 可以通過多種方式共享數(shù)據(jù)。

正如在前面的章節(jié)中提到的,不同的對象有不同的生命周期。HttpServletRequest和HttpServletResponse 對象只存在于一個  servlet 調(diào)用之間。HttpSession只要它處于活動狀態(tài)并且沒有超時,它就會一直存在。

ServletContext的生命周期最長。它與Web應(yīng)用程序一起誕生,只有當應(yīng)用程序本身關(guān)閉時才會被銷毀。由于servlet、filter 和  listener 實例與上下文綁定,所以只要web應(yīng)用程序啟動并運行,它們也會一直存在。

因此,如果我們的需求是在所有servlet之間共享數(shù)據(jù),假設(shè)我們要計算站點的訪問者數(shù)量,那么我們應(yīng)該將變量放在 ServletContext  中。如果我們需要在一個會話中共享數(shù)據(jù),那么我們就把它保存在會話范圍內(nèi)。在本例中,用戶名就是一個例子。

最后,還有與單個請求的數(shù)據(jù)相關(guān)的請求范圍,比如請求有效負載。

5. 處理多線程

多個HttpServletRequest 對象彼此共享 servlet,這樣每個請求都使用它自己的 servlet 實例線程進行操作。

就線程安全而言,這實際上表明:我們不應(yīng)該將請求或會話范圍內(nèi)的數(shù)據(jù)指定為 servlet的實例變量。

例如,下面的代碼片段:

public class ExampleThree extends HttpServlet {          private String instanceMessage;      @Override     protected void doGet(HttpServletRequest request, HttpServletResponse response)        throws ServletException, IOException {         String message = request.getParameter("message");         instanceMessage = request.getParameter("message");         request.setAttribute("text", message);         request.setAttribute("unsafeText", instanceMessage);         request.getRequestDispatcher("/jsp/ExampleThree.jsp").forward(request, response);     } }

在本例中,會話中的所有請求共享 instanceMessage,而  message對于給定的請求對象是唯一的。因此,在并發(fā)請求的情況下,instanceMessage 中的數(shù)據(jù)可能不一致。

“有關(guān)Servlet的知識點總結(jié)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

當前題目:有關(guān)Servlet的知識點總結(jié)
地址分享:http://bm7419.com/article18/gocpdp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈靜態(tài)網(wǎng)站、響應(yīng)式網(wǎng)站網(wǎng)站制作、品牌網(wǎng)站制作、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)