日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Servlet基础

發布時間:2023/12/3 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Servlet基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

通過本教程,我將嘗試使您更接近Java Servlet模型。 在檢查servlet規范中定義的類之前,我將解釋在開始開發Web應用程序之前需要了解的基本知識。

了解Java Servlet模型

首先,不僅為基于請求和響應編程模型的規范的Web應用程序定義Java Servlet模型。 但基本上,它最常用于與HTTP協議交互,因此從現在開始,我們將不再在HTTP應用程序中使用servlet模型。

基本上,Web應用程序應該是放置在Web上某個位置的應用程序,并且可以通過網絡對其進行訪問。 如果您需要更多信息并更好地定義“什么是Web應用程序”,則可以訪問下一個鏈接: Web應用程序 。

如果我們要創建一個Web應用程序,我們應該有一個Web服務器,它可以是任何帶有包含Web容器的HTTP服務器,例如Tomcat。 HTTP服務器負責處理客戶端請求,安全性,向客戶端提供內容等服務,但是HTTP服務器無法動態創建對客戶端的響應,他可以提供靜態內容。 解決此問題的方法是Web容器。 容器能夠托管Web應用程序,HTTP服務器會將請求傳遞到將處理請求的Web容器。 通常,每臺服務器只有一個容器。 服務器上的所有Web應用程序都由此容器提供服務。

Web容器內部的所有通信都是通過Web容器接口實現的。 這意味著一個應用程序不能直接訪問另一個應用程序。 同樣,一個應用程序內部的組件不能直接相互訪問,同一應用程序中組件之間的所有通信都是使用Web容器接口實現的。 這對于理解Web應用程序在Web容器中的工作方式非常重要,它允許創建過濾器,偵聽器,并允許使用Web容器的安全性功能。

戰爭應用結構

按照規范,Java Web應用程序打包在war程序包中。
War包與jar包相同,但是當Web容器在deploy文件夾中找到war文件時,它將假定它是一個Web應用程序并嘗試啟動它。

在war軟件包中,我們有一個特殊的目錄,稱為WEB-INF。

此文件夾的內容不直接提供給用戶。 該文件夾包含文件夾類和lib,我們可以在其中放置應用程序使用的類(類文件夾)和其他jar(lib文件夾)。 這些文件夾的內容將由類加載器自動讀取,而無需對類路徑進行任何其他設置。 此文件夾還包含web.xml文件,稱為部署描述。 如果Web應用程序僅包含jsp頁面,則不需要此文件,但是如果應用程序需要servlet或過濾器,則必須定義此文件。

Servlet生命周期

在servlet存在的過程中,它經歷了五個生命周期:

  • 裝貨
  • 實例化
  • 初始化
  • 服務
  • 破壞

加載是類加載器加載類的階段。 每個Web應用程序都會獲得一個不同的類加載器實例,這些實例將用于加載Web組件。 這允許在同一個容器中部署同一應用程序的兩個版本,并且每個應用程序都可以具有相同名稱的類(完整類名)。

加載后,Web容器將嘗試實例化類(即創建類的新實例)。 通常每個Web組件僅創建一次,但這取決于Web容器的行為,在某些情況下,可以將Web容器設置為在池中創建更多的組件類實例,并使用池中的一個實例來服務請求。 當Web容器創建servlet的新實例時,它將使用默認構造函數。
初始化是生命周期階段,在該階段初始化servlet。 在此階段中,應該讓Servlet讀取一些值并執行一些其他操作和步驟,然后Servlet才能滿足客戶請求。 服務階段是servlet生命周期,其中servlet服務于客戶端請求。 銷毀階段是Servlet生命的最后一個階段,發生在將Servlet從服務中刪除時。

Servlet接口

如果我們想創建一個servlet,那么應該做的就是實現Servlet接口。
該接口提供接下來的三種方法,這些方法由容器調用:

  • init(ServletConfig config),在初始化期間調用
  • 服務(ServletRequest請求,ServletResponse響應),在服務請求期間調用
  • 當服務從服務中刪除servlet時調用destroy()。

另外這個接口提供了兩個輔助
方法:

  • ServletConfig getServletConfig()
  • 字符串getServletInfo()

在初始化期間,可以獲取ServletException。 在init方法中引發此異常將通知容器發生了一些錯誤,并且容器將停止初始化并將Servlet實例標記為可用于垃圾回收器,并且這不會導致調用destroy方法。

同樣在服務方法期間,可能會獲取ServletException或UnavailableException。 此例外可以是臨時的,也可以是永久的。 在臨時異常的情況下,服務器將阻止對服務方法的調用一段時間,但是在永久異常的情況下,將調用destroy方法,并且Servlet將準備進行垃圾回收,并且以后對該Servlet的每次調用都將導致404響應。

GenericServlet類

GenericServlet類是javax.servlet包的一部分。 它是實現Servlet接口并創建不依賴平臺的基本實現的抽象類。
此類介紹一種新方法:

  • 在初始化階段,由init(ServletConfig config)方法調用的init()
  • ServletContext getServletContext(),提供對ServletContex的訪問
  • String getInitParameter(String name),檢索在應用程序描述符中為指定名稱定義的servlet配置參數的值
  • 枚舉getInitParameterNames(),返回所有servlet初始化參數的枚舉。
  • 字符串getServletName(),返回Servlet的名稱。

如果我們擴展GenericServlet類而不是實現Servlet接口,那么我們要做的只是實現服務方法,所有其他方法都已經由抽象類實現了。

HttpServlet類

這也是類似于GenericServlet的抽象類,但此類與平臺無關。 它與HTML協議綁定,并引入了僅與HTTP協議有關的新方法。 每個新方法都負責處理特定HTTP方法的客戶端請求。
doXxx方法:

  • doGet(HttpServletRequest請求,HttpServletResponse響應),處理獲取請求
  • doPost(HttpServletRequest請求,HttpServletResponse響應),處理發布請求
  • doOptions(HttpServletRequest請求,HttpServletResponse響應),處理HTTP選項請求
  • doPut(HttpServletRequest請求,HttpServletResponse響應),處理HTTP放置請求
  • doDelete(HttpServletRequest請求,HttpServletResponse響應),處理HTTP刪除請求
  • doHead(HttpServletRequest請求,HttpServletResponse響應),處理HTTP Head請求
  • doTrace(HttpServletRequest請求,HttpServletResponse響應),處理HTTP跟蹤請求。

ServletContext接口

ServletContext接口是API,可用于訪問有關應用程序的信息。 每個應用程序都是在自己的上下文中執行的,因此此接口可提供對該信息的訪問。 該接口的實現由服務器供應商提供,我們對具體實現不感興趣。 部署應用程序時,容器將首先創建ServletContext實現類,并用應用程序描述符提供的數據填充它。
我們可以將此接口內的方法分為幾組:

  • 訪問上下文屬性的方法:
    • Object getAttribute(String name),從上下文中檢索對象
    • 枚舉getAttributeNames(),檢索屬性名稱
    • void removeAttribute(String name),從上下文中刪除屬性
    • setAttribute(String name,Object value),將新對象添加到上下文中并通過指定的名稱綁定它。 如果具有指定名稱的對象已經存在,它將被重載。
  • 獲取上下文信息的方法:
    • 字符串getServletContextName(),檢索由<display-name>在應用程序描述符中定義的值,如果不存在則返回null。
    • String getRealPath(String path),指定資源的上下文相關路徑,如果將應用程序部署為WAR(如果未在文件夾中爆炸),則為null。
    • 設置getResourcesPaths(String path),在指定的部分路徑內檢索文件,僅一級
    • ServletContext getContext(String appURL),檢索部署在同一服務器上的另一個應用程序的ServletContex。 網址必須以“ /”開頭
  • 訪問靜態資源的方法:
    • URL getResource(String path),獲取由path指定的資源的URL。 路徑必須以“ /”開頭
    • InputStream getResourceAsStream(String path),檢索指定資源的InputStream。 路徑可以是上下文相關的。
    • String getMimeType(String path),返回資源的mie類型。
  • 獲取請求分配器的方法:
    • RequestDispatcher getRequestDispatcher(String path),為指定資源返回RequestDispatcher,如果資源不存在,則返回null。
    • RequestDispatcher getNamedDispatcher(String name),為部署描述符內的命名資源返回RequestDispatcher。
  • 訪問上下文初始化參數的方法:
    • String getInitParameter(String name),檢索部署描述符中定義的指定參數的值;如果不存在,則返回null。
    • 枚舉getInitParameterNames(),在應用程序部署描述符中定義的參數名稱列表。
  • 上下文屬性是應用程序范圍的屬性,這意味著所有客戶端共享相同的屬性,一個客戶端所做的屬性更改對其他所有客戶端都是可見的。

    ServletConfig接口

    這是API,提供用于訪問在部署描述符中定義的信息的方法。 具體
    對象由servlet容器創建,并在初始化階段提供給servlet。 該接口定義了以下方法:

    • String getInitParameter(String name),獲取為具有指定名稱的servlet定義的init參數的值;如果沒有這樣的參數,則為null。
    • 枚舉getInitParameterNames(),檢索servlet初始參數名稱的枚舉。
    • ServletContext getServletContext(),檢索Servlet上下文。
    • 字符串getServletName(),檢索在web.xml中指定的servlet名稱

    如您所見,ServletConfig僅提供用于讀取init參數的方法,而沒有用于更改或添加新init參數的方法,因為它們無法更改或添加。

    Servlet部署說明

    如果要使用servlet,則需要在部署描述符中定義它們。

    <servlet><description>This is a servlet</description><display-name>First Servlet</display-name><servlet-name>FirstServlet</servlet-name><class>ba.codecentric.scwcd.FirstServlet</class><init-param><param-name>firstParam</param-name><param-value>value</param-value></init-param></servlet><servlet-mapping><servlet-name>FirstServlet</servlet-name><uri-pattern>/FirstServlet</uti-pattern></servlet-mapping>

    在servlet標簽內部,我們定義了servlet,在servlet標簽內部,我們可以使用init param標簽定義初始化參數,這些參數將在初始化階段作為ServletConfig對象的一部分發送給servlet。

    并使用servlet映射標記定義uri模式,該模式將用于激活指定的servlet。

    同樣在本教程中,我談到了ServletContext,并且提到了上下文參數。 這些參數也使用上下文參數標簽在部署描述中定義。

    <context-param><param-name>contextParameter</param-name><param-value>value</param-value></context-param>

    參考:來自ICG Madjeric博客的JCG合作伙伴 Igor Madjeric的有關Servlet的基礎知識 。

    翻譯自: https://www.javacodegeeks.com/2012/11/basics-about-servlets.html

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的Servlet基础的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。