一,servlet定義
????????Servlet(Server Applet)是Java?Servlet的簡(jiǎn)稱,稱為服務(wù)器端小程序、小服務(wù)程序或服務(wù)連接器,是一種使用 Java 語(yǔ)言來開發(fā)動(dòng)態(tài)網(wǎng)站的技術(shù)(用Java編寫的服務(wù)器端程序),具有獨(dú)立于平臺(tái)和協(xié)議的特性,Servlet是sun公司提供的一門用于開發(fā)動(dòng)態(tài)web資源的技術(shù)。Sun公司在其API中提供了一個(gè)servlet接口,用戶若想用發(fā)一個(gè)動(dòng)態(tài)web資源(即開發(fā)一個(gè)Java程序向?yàn)g覽器輸出數(shù)據(jù)),需要完成以下2個(gè)步驟:
????????1、編寫一個(gè)Java類,實(shí)現(xiàn)servlet接口。(通常我們也把實(shí)現(xiàn)了servlet接口的java程序,稱之為Servlet)
????????2、把開發(fā)好的Java類部署到web服務(wù)器中。
????????狹義的Servlet是指Java語(yǔ)言實(shí)現(xiàn)的一個(gè)接口,廣義的Servlet是指任何實(shí)現(xiàn)了這個(gè)Servlet接口的類,一般情況下,人們將Servlet理解為后者。Servlet運(yùn)行于支持Java的應(yīng)用服務(wù)器中。從原理上講,Servlet可以響應(yīng)任何類型的請(qǐng)求,但絕大多數(shù)情況下Servlet只用來擴(kuò)展基于HTTP協(xié)議的Web服務(wù)器。即:
????????1、Serviet是JavaEE規(guī)范之一。規(guī)范就是接口
????????2、Servlet是JavaWeb三大組件之一。三大組件分別是:Servlet程序、Filter過濾器、Listener監(jiān)聽器。
????????3、Servlet是運(yùn)行在服務(wù)器上的一個(gè) java小程序,它可以接收客戶端發(fā)送過來的請(qǐng)求,并響應(yīng)數(shù)據(jù)給客戶端,是一種獨(dú)立于操作系統(tǒng)和網(wǎng)絡(luò)傳輸協(xié)議的服務(wù)器端的Java應(yīng)用程序,用來拓展服務(wù)器的功能,生成動(dòng)態(tài)的web頁(yè)面。
注意:Servlet不是從命令行啟動(dòng)的,而是由包含Java虛擬機(jī)的Web服務(wù)器進(jìn)行加載 ;(沒有main方法)
二,Servlet實(shí)現(xiàn)過程
????????最早支持 Servlet 技術(shù)的是 JavaSoft 的 Java Web Server。此后,一些其它的基于 Java 的 Web Server 開始支持標(biāo)準(zhǔn)的 Servlet API。Servlet 的主要功能在于交互式地瀏覽和修改數(shù)據(jù),生成動(dòng)態(tài) Web 內(nèi)容。這個(gè)過程為:
?????????1、客戶端發(fā)送請(qǐng)求至服務(wù)器端;
?????????2、服務(wù)器將請(qǐng)求信息發(fā)送至 Servlet;
? ? ? ? ?3、Servlet 生成響應(yīng)內(nèi)容并將其傳給服務(wù)器。
? ? ? ? ?4、響應(yīng)內(nèi)容動(dòng)態(tài)生成,通常取決于客戶端的請(qǐng)求;服務(wù)器將響應(yīng)返回給客戶端。
????????Servlet 看起來像是通常的 Java 程序。Servlet 導(dǎo)入特定的屬于 Java Servlet API 的包。因?yàn)槭菍?duì)象字節(jié)碼,可動(dòng)態(tài)地從網(wǎng)絡(luò)加載,可以說 Servlet 對(duì) Server 就如同 Applet對(duì) Client 一樣,但是,由于 Servlet 運(yùn)行于 Server 中,它們并不需要一個(gè)圖形用戶界面。從這個(gè)角度講,Servlet 也被稱為 FacelessObject。
????????一個(gè) Servlet 就是 Java 編程語(yǔ)言中的一個(gè)類,它被用來擴(kuò)展服務(wù)器的性能,服務(wù)器上駐留著可以通過“請(qǐng)求-響應(yīng)”編程模型來訪問的應(yīng)用程序。雖然 Servlet 可以對(duì)任何類型的請(qǐng)求產(chǎn)生響應(yīng),但通常只用來擴(kuò)展 Web 服務(wù)器的應(yīng)用程序。
三,Servlet封裝框架
????????Java 可以處理 HTTP 請(qǐng)求、訪問數(shù)據(jù)庫(kù)、生成 HTML 代碼,也可以完全使用原生 Java 來開發(fā)動(dòng)態(tài)網(wǎng)站。但是,會(huì)非常麻煩,需要自己解析 HTTP 請(qǐng)求的報(bào)頭,需要自己分析用戶的請(qǐng)求參數(shù),需要自己加載數(shù)據(jù)庫(kù)組件,需要 ... 。(從零造輪子)
????????正是基于這種原因,Java 官方后來推出了 Servlet 技術(shù),它對(duì)開發(fā)動(dòng)態(tài)網(wǎng)站需要使用的原生 Java API 進(jìn)行了封裝,形成了一套新的 API,稱為 Servlet API。所以Servlet 基于 Java,可以使用幾乎全部的 Java API,它的功能異常強(qiáng)大,完全可以勝任企業(yè)級(jí)開發(fā),能夠處理那些高并發(fā)、大吞吐量、業(yè)務(wù)邏輯復(fù)雜的應(yīng)用場(chǎng)景。Servlet 規(guī)范其實(shí)就是對(duì) HTTP 協(xié)議做面向?qū)ο蟮姆庋b。
????????Servlet 只是一套 Java Web 開發(fā)的規(guī)范,或者說是一套 Java Web 開發(fā)的技術(shù)標(biāo)準(zhǔn)。Servlet 規(guī)范是開放的,除了 Sun 公司,其它公司也可以實(shí)現(xiàn) Servlet 規(guī)范,目前常見的實(shí)現(xiàn)了 Servlet 規(guī)范的產(chǎn)品包括 Tomcat、Weblogic、Jetty、Jboss、WebSphere 等,它們都被稱為“Servlet 容器”。Servlet 容器用來管理程序員編寫的 Servlet 類。
????????Spring MVC 是基于?servlet?API 構(gòu)建的原始 web 框架,所以也可以使用原生的 Servlet API。簡(jiǎn)單的理解springmvc框架是對(duì)servlet的再封裝和擴(kuò)展。雖然已經(jīng)用到servlet技術(shù)了,但是你寫的代碼都是springmvc的代碼標(biāo)準(zhǔn)。
? ? ? ? Springboot本身默認(rèn)封裝了tomcat,所以本質(zhì)上還是用到了servlet技術(shù)。只不過是通過框架繼續(xù)使用。雖然已經(jīng)用到servlet技術(shù)了,但是你寫的代碼都是新框架的代碼標(biāo)準(zhǔn)。springboot是為了簡(jiǎn)化各個(gè)java框架之間的配置應(yīng)運(yùn)而生的。所以springboot不會(huì)特別要求開發(fā)者必須使用特定的框架組合。你既可以使用springframework、springmvc、mybatis;也可以使用springframework、springmvc、jpa等等等各種方案。
四,JSP
????????Servlet 是第一代 Java Web 開發(fā)技術(shù),它將 HTML 代碼以字符串的形式向外輸出,編寫 HTML 文檔就是在拼接字符串,非常麻煩,所以 Java 官方又推出了第二代 Web 開發(fā)技術(shù)——JSP。
????????JSP 才是現(xiàn)代化的 Web 開發(fā)技術(shù),它允許 HTML 代碼和 JSP 代碼分離,讓程序員能夠在 HTML 文檔中直接嵌入 JSP 代碼。現(xiàn)在沒有人直接使用 Servlet 開發(fā)動(dòng)態(tài)網(wǎng)站,大家都轉(zhuǎn)向了 JSP 陣營(yíng)。但是 JSP 依賴于 Servlet,用戶訪問 JSP 頁(yè)面時(shí),JSP 代碼會(huì)被翻譯成 Servlet 代碼,最終,HTML 代碼還是以字符串的形式向外輸出的。您看,JSP 只是在 Servlet 的基礎(chǔ)上做了進(jìn)一步封裝。
?????????JSP 代碼可以調(diào)用 Servlet 類,程序員可以將部分功能在 Servlet 中實(shí)現(xiàn),然后在 JSP 中調(diào)用即可。
????????總之,Servlet 是 JSP 的基礎(chǔ),Servlet 雖然不直接面向用戶,但是它依然是 JSP 的后臺(tái)支撐,想玩轉(zhuǎn) JSP,必須先玩轉(zhuǎn) Servlet。學(xué)習(xí) JSP 的正確順序是:Java --> Servlet --> JSP。
五,Servlet任務(wù)
Servlet 執(zhí)行以下主要任務(wù):
- 讀取客戶端(瀏覽器)發(fā)送的顯式的數(shù)據(jù)。這包括網(wǎng)頁(yè)上的 HTML 表單,或者也可以是來自 applet 或自定義的 HTTP 客戶端程序的表單。
- 讀取客戶端(瀏覽器)發(fā)送的隱式的 HTTP 請(qǐng)求數(shù)據(jù)。這包括 cookies、媒體類型和瀏覽器能理解的壓縮格式等等。
- 處理數(shù)據(jù)并生成結(jié)果。這個(gè)過程可能需要訪問數(shù)據(jù)庫(kù),執(zhí)行 RMI 或 CORBA 調(diào)用,調(diào)用 Web 服務(wù),或者直接計(jì)算得出對(duì)應(yīng)的響應(yīng)。
- 發(fā)送顯式的數(shù)據(jù)(即文檔)到客戶端(瀏覽器)。該文檔的格式可以是多種多樣的,包括文本文件(HTML 或 XML)、二進(jìn)制文件(GIF 圖像)、Excel 等。
- 發(fā)送隱式的 HTTP 響應(yīng)到客戶端(瀏覽器)。這包括告訴瀏覽器或其他客戶端被返回的文檔類型(例如 HTML),設(shè)置 cookies 和緩存參數(shù),以及其他類似的任務(wù)。
六,Servlet組成
????????一個(gè)最基本的 Java Web 項(xiàng)目使用所需的 jar 包只需要一個(gè) servlet-api.jar ,這個(gè) jar 是由2個(gè)包組成:javax.servlet和javax.servlet.http,在javax.servlet包中定義了所有的Servlet類都必須實(shí)現(xiàn)或擴(kuò)展的的通用接口和類,在javax.servlet.http包中定義了支持HTTP通信協(xié)議的HttpServlet類工具類,Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servlet都必須實(shí)現(xiàn)這一接口。?
????????Servlet 是 J2EE 最重要的一部分,J2EE 的其他方面的內(nèi)容擇需采用。而?Servlet 規(guī)范你需要掌握的就是 servlet 和 filter 這兩項(xiàng)技術(shù)。絕大多數(shù)框架不是基于 servlet 就是基于 filter,如果它要在 Servlet 容器上運(yùn)行,就永遠(yuǎn)也脫離不開這個(gè)模型。
????????Servlet被設(shè)計(jì)成請(qǐng)求驅(qū)動(dòng)(根據(jù)請(qǐng)求來調(diào)用Servlet)。Servlet的請(qǐng)求可能包含多個(gè)數(shù)據(jù)項(xiàng),當(dāng)Web容器接收到某個(gè)Servlet請(qǐng)求時(shí),Servlet把請(qǐng)求封裝成一個(gè)HttpServletRequest對(duì)象,然后把對(duì)象傳給Servlet的對(duì)應(yīng)的服務(wù)方法。
七,Servlet創(chuàng)有三種方式
直接實(shí)現(xiàn) Servlet 接口比較麻煩,需要實(shí)現(xiàn)很多方法,所以 Servlet 規(guī)范又提供了兩個(gè)抽象類,分別是 GenericServlet 類和 HttpServlet 類,它們都實(shí)現(xiàn)了 Servlet 接口的很多常用功能。和 GenericServlet 類相比,HttpServlet 類更加方便,所以實(shí)際開發(fā)中一般都繼承自 HttpServlet 類。Servlet 簡(jiǎn)介 | 菜鳥教程
????????1、實(shí)現(xiàn) Servlet 接口
????????2、繼承 GenericServlet 類
????????3、繼承 HttpServlet 方法
八,Servlet工作原理
1. Servlet運(yùn)行原理
????????①. WebApplication的標(biāo)準(zhǔn)目錄結(jié)構(gòu):
????????????????webapp/WEB-INF/classes 文件夾下是項(xiàng)目中用到的類文件,均由JDK編譯成了.class文件
????????????????webapp/WEB-INF/lib文件夾是我們項(xiàng)目中引用的jar包
????????????????webapp/WEB-INF/Web.xmls是整個(gè)web應(yīng)用程序的配置文檔。
????????②. Tomcat解析URL
????????????????a) 首先來看URL中包含的信息:”協(xié)議” + “端口號(hào)” + “路徑(項(xiàng)目名稱+文件路徑)”
????????????????????????Tomcat啟動(dòng)后,監(jiān)聽我們的8080端口,當(dāng)有Url請(qǐng)求發(fā)過來之后,解析出項(xiàng)目名稱 abingtest,然后到webapps目錄下搜索到該項(xiàng)目文件夾。
????????????????b) 項(xiàng)目文件找到后,開始尋找類文件。
????????????????????????這個(gè)時(shí)候Tomcat去Web.xml文件中尋找 配置節(jié)中包含”servlet/FirstServlet”字符串,進(jìn)而找到該類文件所在的位置。
????????③. Servelt中的doGet() 和 doPost() 方法
????????????????我們寫的FirstServlet 繼承了HttpServlet ,重寫了HttpServlet中的doGet() 方法,HttpServlet中還有一個(gè)doPost()方法。這兩個(gè)方法都是用來處理Http請(qǐng)求的。Servlet會(huì)根據(jù)我們提交表單的方法 (method=post/get)調(diào)用service方法來自動(dòng)選擇。
2、一個(gè)servlet運(yùn)行流程圖:
九,Servlet容器
Servlet容器為JavaWeb應(yīng)用提供運(yùn)行時(shí)環(huán)境,它負(fù)責(zé)管理Servlet和JSP的生命周期,以及管理它們的共享數(shù)據(jù)。
Servlet容器也稱為JavaWeb應(yīng)用容器,或者Servlet/JSP容器。
目前最流行的Servlet容器軟件包括:Tomcat、Resin、J2EE服務(wù)器(如Weblogic)中也提供了內(nèi)置的Servlet容器
十,Servlet生命周期
1、init():在Servlet的生命周期中,僅執(zhí)行一次init()方法。它是在服務(wù)器裝入Servlet時(shí)執(zhí)行的,負(fù)責(zé)初始化Servlet對(duì)象??梢耘渲梅?wù)器,以在啟動(dòng)服務(wù)器或客戶機(jī)首次訪問 Servlet時(shí)裝入Servlet。無(wú)論有多少客戶機(jī)訪問Servlet,都不會(huì)重復(fù)執(zhí)行init()。
2、service():它是Servlet的核心,負(fù)責(zé)響應(yīng)客戶的請(qǐng)求。每當(dāng)一個(gè)客戶請(qǐng)求一個(gè)HttpServlet對(duì)象,該對(duì)象的Service()方法就要調(diào)用,而且傳遞給這個(gè)方法一個(gè)“請(qǐng)求” ?。⊿ervletRequest)對(duì)象和一個(gè)“響應(yīng)”(ServletResponse)對(duì)象作為參數(shù)。在HttpServlet中已存在Service()方法。默認(rèn)的服務(wù)功能是調(diào)用與HTTP請(qǐng)求的方法相應(yīng)的do功能。
3、destroy():?僅執(zhí)行一次,在服務(wù)器端停止且卸載Servlet時(shí)執(zhí)行該方法。當(dāng)Servlet對(duì)象退出生命周期時(shí),負(fù)責(zé)釋放占用的資源。一個(gè)Servlet在運(yùn)行service()方法時(shí)可能會(huì) 產(chǎn)生其他的線程,因此需要確認(rèn)在調(diào)用destroy()方法時(shí),這些線程已經(jīng)終止或完成。
十一,URL和httpHTTP和URL詳細(xì)分析_行走在軟件開發(fā)路上的人的博客-CSDN博客_url和http
????????HTTP:(Hypertext transfer protocol)超文本傳輸協(xié)議,是用于從萬(wàn)維網(wǎng)(WWW:World Wide Web)服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。
????????URL:(Uniform Resource Locator)統(tǒng)一資源定位符,對(duì)可以從互聯(lián)網(wǎng)上得到的資源的位置和訪問方法的一種簡(jiǎn)潔的表示,是互聯(lián)網(wǎng)上標(biāo)準(zhǔn)資源的地址。
????????url和http不能混合而談,二者是兩碼事,url是一種資源定位的規(guī)則符號(hào),而http則是網(wǎng)絡(luò)信息傳遞的其中一個(gè)協(xié)議,http打比方就像英語(yǔ)交流一樣,ftp下載就像法語(yǔ)交流一樣,每一個(gè)都對(duì)應(yīng)相應(yīng)的用途,而url則是規(guī)范網(wǎng)絡(luò)主機(jī)的ip,域名的一套規(guī)則
????????由以冒號(hào)隔開的兩大部分組成,并且在 URL 中的字符對(duì)大寫或小寫沒有要求。URL 的一般形式是:(主機(jī)部分可以是IP地址或者域名,如果是域名的話,域名最終會(huì)被域名服務(wù)器解析成IP地址)
?????????HTTP協(xié)議中的請(qǐng)求和響應(yīng)就是對(duì)應(yīng)了 HttpServletRequest 和 HttpServletResponse 這兩個(gè)接口。可以通過 HttpServletRequest 來獲取所有請(qǐng)求相關(guān)的信息,包括 URI、Cookie、Header、請(qǐng)求參數(shù)等等,別無(wú)它路。因此當(dāng)你使用某個(gè)框架時(shí),你想獲取HTTP請(qǐng)求的相關(guān)信息,只要拿到 HttpServletRequest 實(shí)例即可。?
????????而 HttpServletResponse接口是用來生產(chǎn) HTTP 回應(yīng),包含 Cookie、Header 以及回應(yīng)的內(nèi)容等等。
?HTTP的請(qǐng)求方式包括DELETE、GET、OPTIONS、POST、PUT和TRACE,在HttpServlet類中分別提供了相應(yīng)的服務(wù)方法,它們是doDelete()、doGet()、doOptions()、doPost()、doPut()和doTrace()。不過目前很多服務(wù)器只支持get和post請(qǐng)求,所以通常自定義的Servlet中只需要重寫doPost和doGet方法即可。
十二,SpringBoot中使用Servlet的兩種方式
1.方式一(使用注解)
2.方式二(定義配置類)文章來源:http://www.zghlxwxcb.cn/news/detail-442604.html
SpringBoot——SpringBoot中使用Servlet的兩種方式_張起靈-小哥的博客-CSDN博客_springboot 添加servlet文章來源地址http://www.zghlxwxcb.cn/news/detail-442604.html
到了這里,關(guān)于java框架 - Servlet基礎(chǔ)框架的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!