HTTP&Tomcat&Servlet
1、JavaWeb概念
- Web:全球局域網,也稱萬維網(www),能夠通過瀏覽器訪問的網站
- JavaWeb:是用Java相關的技術來做網站
2、JavaWeb技術堆疊
- B/S架構
- Browser/Server,瀏覽器/服務器 架構模式,它的特點是,客戶端只需要瀏覽器,應用程式的邏輯和資料都存盤在服務器端,瀏覽器只需要請求服務器,獲取Web子u按,服務器把Web資源發送給瀏覽器即可
- 好處
- 易于維護升級:服務端升級后,客戶端無需任何部署就可以使用到新的版本
- 靜態資源
- HTML、CSS、JavaScript、圖片等,負責頁面展現,資源是一成不變的,
- 動態資源
- Servlet、JSP等,負責邏輯處理,資源是變化的,
3、HTTP協議
3.1、HTTP協議概念和特點
- 概念
- HyperText Transfer Protocol,超文本傳輸協議,規定了瀏覽器和服務器之間資料傳輸的規則
- HTTP協議特點
- 1.基于TCP協議:面向連接,安全
- 2.基于請求-回應模型的:一次請求對應一次回應
- 3.HTTP協議是無狀態的協議:對事務處理沒有記憶能力,每次請求-回應都是獨立的,
- 缺點
- 多次請求之間不能共享資料,Java中使用繪畫技術(Cookie、Session)來解決這個問題
- 優點
- 速度快
- 缺點
3.2、HTTP-請求資料格式
- 請求資料分為3部分
- 1.請求行
- 請求資料的第一行,其中GET表示請求方法,/表示請求資源路徑,HTTP/1.1表示協議版本
- 2.請求頭
- 第二行開始,格式為key:value形式
- 3.請求體
- POST請求的最后一部分,存放請求引數
- 1.請求行
- POST請求和GET請求的區別
- 1.GET請求引數在請求行中,沒有請求體;POST請求請求引數在請求體中
- 2.GET請求引數大小有限制,POST沒有
- 常見的HTTP請求頭
- Host
- 表示請求的主機名
- User-Agent
- 瀏覽器版本,例如Chrome瀏覽器的表示類似Mozilla/5.0
- Accept
- 表示瀏覽器能接收的資源型別如
text/*,image/*或者*/*表示所有
- 表示瀏覽器能接收的資源型別如
- Accept-Language
- 表示瀏覽器的偏好語言,服務器可以根據此處回傳不同語言的網頁
- Accept-Encoding
- 表示瀏覽器可以支持的開鎖檔案,如site、defalte等
- Host
3.3、HTTP-回應資料格式
-
回應資料分為3部分
- 1.回應行
- 回應資料的第一行,其中HTTP/1.1表示協議版本,200表示回應狀態碼,OK表示狀態碼描述
- 回應頭
- 第二行開始,格式為key:value形式
- 回應體
- 最后一部分,存放回應資料
- 1.回應行
-
常見的HTTP回應頭
- Content-Type
- 表示該回應內容的型別,例如text/html,image/jpeg;
- Content-Length
- 表示該回應內容的長度(位元組數)
- Content-Encoding
- 表示該回應壓縮演算法,例如gzip;
- Cache-control
- 指示客戶端應如何快取,李榮max-age=300表示可以最多快取300秒
- Content-Type
-
狀態碼分類
-
狀態碼分類 說明 1xx 回應中--臨時狀態碼,表示請求已經接受,告訴客戶端應該繼續請求或者如果它已經完成則忽略它 2xx 成功--表示請求已經成功接收,處理已完成 3xx 重定向--重定向到其他地方,它讓客戶端再發起一個請求以完成整個程序 4xx 客戶端錯誤--處理發生錯誤,責任在客戶端,如:客戶端請求一個不存在的資源,客戶端未被授權,禁止 訪問等 5xx 服務器錯誤--處理發生錯誤,責任在服務器,如:服務端拋出例外,路由出錯,HTTP版本不支持等
-
4、Web服務器----Tomcat
- Web服務器
- Web服務器是一個應用程式(軟體),對HTTP協議進行封裝,使得程式員不必直接對協議進行操作,讓Web開發更加便捷,主要功能是"提供網上資訊瀏覽服務"
4.1、Tomcat概念
- 概念
- Tomcat是Apache軟體基金會的一個核心專案,是一個開源免費的輕量級Web服務器,支持Servlet/JSP少量JavaEE規范
- JavaEE
- Java Enterprise Edition,Java企業版,指Java企業級開發的技術規范總和,包含13項技術規范:JDBC、JNDI、EJB、RMI、JSP、Servlet、XML、JMS、Java IDL、JavaMail、JAF
- Tomcat
- 也被成為Web容器、Servlet容器
- 官網
4.2、Tomcat基本使用
- 下載
- 下載鏈接
- 安裝
- 直接解壓就可以(建議不要有中文的目錄,目錄層次不要太深)
- 目錄結構詳解
- 啟動
- 雙擊bin\startup.bat
- 關閉
- 1.直接X掉運行視窗:強制關閉
- 2.bin\shutdown.bat:正常關閉
- 3.Ctrl+C:正常關閉
- 控制臺中文亂碼
- 修改conf/logging.properties中的java.util.logging.ConsoleHanler.encoding = GBK
- 部署專案
- 1.直接將專案復制到webapps目錄下
- 2.采用壓縮檔案.war的方式,復制到webapps目錄下,Tomcat會自動解壓成一個同名的目錄
4.3、IDEA中創建 Maven Web專案
4.4、IDEA中使用Tomcat
5、Servlet
5.1、Servlet概念
- Servlet是Java提供的一門動態web資源開發技術
- Servlet是JavaEE規范之一,其實就是一個介面,將來我們需要定義Servlet類實作Servlet介面,并由web服務器運行Servlet
5.2、Servlet入門
-
1.創建web專案,匯入Servlet依賴左表
-
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
-
-
2.創建:定義一個類,實作Servlet介面,并重寫介面中所有方法,并在service方法中輸入一句話
-
public class ServletDemo1 implements Servlet { public void service(){} }
-
-
3.配置:在類上使用@WebServlet注解,配置該Servlet的訪問路徑
-
@WebServlet("/demo1") public class ServletDemo1 implements Servlet {...}
-
-
4.訪問:啟動Tomcat,瀏覽器輸入URL,訪問該Servlet
http://localhost:8080/web-demo/demo1
5.3、Servlet執行流程
5.3.1 客戶端到服務端
- 1.瀏覽器輸入訪問路徑后,攜帶了請求行,頭,體
- 2.根據訪問路徑找到已注冊的servlet名稱
- 3.根據servlet命找到全限定類名,即我們自己定義的物體類
- PS
- 以上說法均為在xml檔案配置路由后,客戶端到服務端的流程,
- 如果是使用注解配置路由,那么不會去xml檔案尋找已注冊的servlet名,而是直接找到注解對應的url所在的類,并執行類中的方法,
5.3.2、服務端到客戶端
- 1.服務器找到全限定類名后,通過反射創建物件
- 2.呼叫init方法
- 3.呼叫service方法
- 處理資料
- 4.處理完資料后,將資料回應到瀏覽器
5.3.3、注意事項
- 1.Servlet由誰創建?Servlet方法由誰呼叫?
- Servlet由Web服務器創建,也是由其呼叫
- 2.服務器怎么知道Servlet中一定有Service方法?
- 因為自定義的Servlet,必須實作Servlet介面并重寫其方法,而Servlet介面中有service方法
5.4、Servlet生命周期
5.4.1、概念
-
Servlet生命周期就是Servlet從創建到銷毀的程序
-
@WebServlet(urlPatterns = "/demo", loadOnStartup = 1)- 負整數:第一次被訪問時創建Servlet物件
- 0或正整數:服務器啟動時創建Servlet物件(數字越小優先級越高)
-
注意事項
- 一個Servlet在Tomcat容器中只會實體化一次,只會產生一個物件,而且常駐記憶體,要等到服務器關閉才會銷毀,
5.4.2、Servlet方法介紹
- 初始化方法:在Servlet被創建的時候執行,只執行一次
void init(ServletConfig config)
- 提供服務方法:每次Servlet被訪問,都會呼叫該方法
void service(ServletRequest req, ServletResponse res)
- 銷毀方法:當Servlet被銷毀時,呼叫該方法,在內容釋放或服務器關閉時銷毀,
void destory()
- 獲取ServletConfig物件
ServletConfig getServletConfig()
- 獲取Servlet資訊
String getServletInfo()
5.5、Servlet體系結構

- 我們將來開發的B/S架構的Web專案,都是針對HTTP協議,所以我們自定義Servlet,會集成HttpServlet

5.5.1、HttpServlet原理
- HTTP協議中,GET和POST請求方式的資料格式不一樣,將來想要在Servlet中處理請求引數,得在service方法中判斷請求方式,并且根據請求方式的不同,分別進行處理,
- HttpServlet原始碼偽代碼示例
5.6、Servlet urlPattren配置
- Servlet想要被訪問,可以配置多個urlPattern
- 1.一個Servlet,可以配置多個urlPattern
@WebServlet({"/demo01", "/demo02"})
- 2.urlPattern配置規則
- ①精確匹配
- 配置路徑:
@WebServlet("/user/select") - 訪問路徑:
localhost:8080/web-demo/user/select
- 配置路徑:
- ②目錄匹配
- 配置路徑:
@WebServlet("/user/*") - 訪問路徑:
localhost:8080/web-demo/user/aaa;localhost:8080/web-demo/user/bbb...
- 配置路徑:
- ③擴展名匹配
- 配置路徑:
@WebServlet("*.do") - 訪問路徑:
localhost:8080/web-demo/aaa.do;localhost:8080/web-demo/bbb.do.....
- 配置路徑:
- ①精確匹配
- 1.一個Servlet,可以配置多個urlPattern
- 注意事項
- 前綴匹配和后綴匹配不能出現在同一個地址中,否則會出現例外

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/500697.html
標籤:其他
下一篇:Maven的作業機制








