HTTP&Tomcat&Servlet 1、JavaWeb概念 Web:全球區域網,也稱萬維網(www),能夠通過瀏覽器訪問的網站 JavaWeb:是用Java相關的技術來做網站 2、JavaWeb技術棧 B/S架構 Browser/Server,瀏覽器/伺服器 架構模式。它的特點是,客戶端只需要瀏 ...
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
- 註意事項
- 首碼匹配和尾碼匹配不能出現在同一個地址中,否則會出現異常