【JavaWeb】servlet与http请求协议
Servlet:
概念:
server applet (服務(wù)端小程序)運(yùn)行在服務(wù)器端的小程序
- Servlet就是一個(gè)接口,定義了Java類被瀏覽器訪問到(Tomcat識別)的規(guī)則。
- 將我我們自定義一個(gè)類,實(shí)現(xiàn)Servlet接口,復(fù)寫方法
快速入門:
- 創(chuàng)建JavaEE項(xiàng)目
- 定義一個(gè)類,實(shí)現(xiàn)Servlet接口
public class ServletDemo1 implements Servlet - 實(shí)現(xiàn)接口中的抽象方法
- 配置Servlet,在web.xml中配置
<!--配置Servlet-->
<servlet><servlet-name>demo1</servlet-name><servlet-class>cn.itcast,web.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping><servlet-name>demo1</servlet-name><url-parttern>/demo1</url-parttern>
</servlet-mapping>
執(zhí)行原理:
- 當(dāng)服務(wù)器接收到客戶端瀏覽器的請求后,會解析請求URL路徑,獲取訪問的Servlet的資源路徑
- 查找web.xml文件,是否有對應(yīng)的標(biāo)簽體內(nèi)容
- 如果有,則再找到對應(yīng)的全類名
- Tomcat會將字節(jié)碼文件加載進(jìn)內(nèi)存,并且創(chuàng)建其對象
- 調(diào)用其方法
生命周期:
- 被創(chuàng)建:執(zhí)行init方法,只執(zhí)行一次
- 1.Servlet什么時(shí)候被創(chuàng)建?
?默認(rèn)情況下,第一次訪問時(shí),Servlet被創(chuàng)建
?可以配置執(zhí)行Servlet的創(chuàng)建時(shí)機(jī)
?? 在標(biāo)簽下配置
?????1. 第一次訪問時(shí)創(chuàng)建<load-on-startup>的值為負(fù)數(shù)
?????2. 在服務(wù)器啟動時(shí)創(chuàng)建<load-on-startup>的值為0或者正整數(shù) - 2.Servlet的init方法,只執(zhí)行一次,說明一個(gè)Servlet在內(nèi)存中只存在一個(gè)對象,Servlet是單例的
?多個(gè)用戶同時(shí)訪問時(shí),可能存在線程安全問題
?解決:盡量不要在Servlet中定義成員變量。即時(shí)定義了成員變量,也不要對其修改值
- 1.Servlet什么時(shí)候被創(chuàng)建?
- 提供服務(wù):執(zhí)行service方法,執(zhí)行多次
?每次訪問Servlet時(shí),Service都會被調(diào)用一次。 - 被銷毀:執(zhí)行destory方法,只執(zhí)行一次
?Servlet被銷毀時(shí)執(zhí)行。服務(wù)器關(guān)閉時(shí),Servlet被銷毀
?只有服務(wù)器正常關(guān)閉時(shí),才會執(zhí)行destroy方法
?destroy方法在Servlet被銷毀之前執(zhí)行,一般用于釋放資源
Servlet3.0 注解配置:
- 好處:支持注解配置。可以不需要web.xml了
- 步驟:
?1.創(chuàng)建JavaEE項(xiàng)目,選擇Servlet的版本3.0以上,可以不創(chuàng)建Web.xml
?2.定義一個(gè)類,實(shí)現(xiàn)Servlet接口
?3.復(fù)寫方法
?4.在類上使用@WebServlet注解,進(jìn)行配置@WebServlet(" 資源路徑:")
體系結(jié)構(gòu):
Servlet------接口
? ? ?|
GenericServlet------抽象類
? ? ?|
HttpServlet------抽象類
- GenericServlet:將Servlet接口中其他的方法做了默認(rèn)空實(shí)現(xiàn),只將service()方法作為抽象
- 將來定義Servlet時(shí),可以繼承GenericServlet,實(shí)現(xiàn)Service()方法即可
- HttpServlet:對http協(xié)議的一種封裝,簡化操作
- 定義類繼承HttpServlet
- 復(fù)寫doGet/doPost方法
相關(guān)配置
- urlpartten:Servlet訪問路徑
- 一個(gè)Servlet可以定義多個(gè)訪問路徑:@WebServlet({"/d4","/d44","/d444"})
- 路徑定義規(guī)則:
- /xxx:路徑匹配
- /xxx/xxx:多層路徑,目錄結(jié)構(gòu)
- *.do:擴(kuò)展名匹配
IDEA與Tomcat的相關(guān)配置
1. IDEA會為每一個(gè)tomcat部署的項(xiàng)目單獨(dú)建立一份配置文件
????????1 查看控制臺的log:Using CATALINA_BASE:“c:\Users\fqy.IntelliJIdea2018.1\system\tomcat_itcast”
2. 工作空間項(xiàng)目 和 tomcat部署的web項(xiàng)目
?????? ?1. tomcat真正訪問的是“tomcat部署的web項(xiàng)目”,“tomcat部署的web項(xiàng)目”對應(yīng)著“工作空間項(xiàng)目”的web目錄下的所有資源
?????? ?2. WEB-INF目錄下的資源不能被瀏覽器直接訪問
????????3. 虛擬目錄是項(xiàng)目的訪問方式
3. 斷點(diǎn)調(diào)試:使用“小蟲子”啟動debug模式
HTTP
概念:Hyper Text Transfer Protocol 超文本傳輸協(xié)議
-
傳輸協(xié)議:定義了客戶端和服務(wù)端通信時(shí),發(fā)送數(shù)據(jù)的格式
-
特點(diǎn):
- 基于TCP/IP的高級協(xié)議
- 默認(rèn)端口號:80
- 基于請求/響應(yīng)模型的:一次請求對應(yīng)一次響應(yīng)
- 無狀態(tài)的:每次請求之間相互獨(dú)立。不能交互數(shù)據(jù)
-
歷史版本:
- 1.0:每一次請求響應(yīng)都會建立新的連接
- 1.1:復(fù)用連接
請求消息
客戶端發(fā)送給服務(wù)器端的數(shù)據(jù)
數(shù)據(jù)格式
-
請求行
請求方式?? 請求url ?? 請求協(xié)議/版本
?????|?????????????????|????????????????????|
??GET????/login.html????HTTP/1.1請求方式(HTTP協(xié)議有7種請求方式,常用的有兩種:
GET:- 請求參數(shù)在請求行中,在url后。
- 請求的url長度有限制的
- 不太安全
POST:
- 請求參數(shù)在請求體中
- 請求的url長度沒有限制的
- 相對安全
-
請求頭
請求頭名稱:請求頭值
常見的請求頭:- User-Agent:瀏覽器告訴服務(wù)器,我訪問你使用的瀏覽器版本信息
可以在服務(wù)器端獲取該頭的信息,解決瀏覽器的兼容性問題 - Referer:http://localhost/login.html
告訴服務(wù)器,我(當(dāng)前請求)從哪里來?
作用:- 防盜鏈
- 統(tǒng)計(jì)工作
- User-Agent:瀏覽器告訴服務(wù)器,我訪問你使用的瀏覽器版本信息
-
請求空行
空行 -
請求體(正文)
封裝POST請求消息的請求參數(shù)的字符串
響應(yīng)消息
服務(wù)端發(fā)送給客戶端的消息
數(shù)據(jù)格式
- 響應(yīng)行
- 組成:協(xié)議/版本 響應(yīng)狀態(tài)碼 狀態(tài)碼描述
- 響應(yīng)狀態(tài)碼:服務(wù)器告訴客戶端瀏覽器本次請求和相應(yīng)的一個(gè)狀態(tài)
- 狀態(tài)碼都是3位數(shù)字
- 分類:
1. 1xx:服務(wù)器就收客戶端消息,但沒有接受完成,等待一段時(shí)間后,發(fā)送1xx狀態(tài)碼
2. 2xx:成功。代表:200
3. 3xx:重定向。代表:302(重定向),304(訪問緩存)
4. 4xx:客戶端錯(cuò)誤。
?????????????代表:
?????????????????404(請求路徑?jīng)]有對應(yīng)的資源)
?????????????????405(請求方式?jīng)]有對應(yīng)的doxxx方法)
6. 5xx:服務(wù)器錯(cuò)誤。代表:500(服務(wù)器內(nèi)部出現(xiàn)異常)
- 響應(yīng)頭
- 格式:頭名稱:值
- 常見的相應(yīng)頭:
- Content-Type:服務(wù)器告訴客戶端本次響應(yīng)體數(shù)據(jù)格式以及編碼格式
- 服務(wù)器告訴客戶端以什么格式打開響應(yīng)體數(shù)據(jù)
值:
in-line:默認(rèn)值,在當(dāng)前頁面內(nèi)打開
attachment;filement=xxx:以附件形式打開響應(yīng)體。文件下載
- 響應(yīng)空行
- 響應(yīng)體:傳輸?shù)臄?shù)據(jù)
總結(jié)
以上是生活随笔為你收集整理的【JavaWeb】servlet与http请求协议的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【SpringMVC】基本概念
- 下一篇: 【SpringMVC】概述