摘要:一個完整請求應該包含三個部分請求行描述客戶端的請求方式請求的資源名稱,以及使用的協議版本號多個消息頭描述客戶端請求哪臺主機,以及客戶端的一些環境信息等一個空行請求行請求行請求行中的稱之為請求方式,請求方式有。
什么是Servlet?
Servlet其實就是一個遵循Servlet開發的java類。Servlet是由服務器調用的,運行在服務器端。
為什么要用到Servlet?我們編寫java程序想要在網上實現 聊天、發帖、這樣一些的交互功能,普通的java技術是非常難完成的。sun公司就提供了Servlet這種技術供我們使用。
HTTP協議 什么是HTPP協議超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網絡協議。所有的WWW文件都必須遵守這個標準。它是TCP/IP協議的一個應用層協議
簡單來說,HTTP協議就是客戶端和服務器交互的一種通迅的格式。
例子:在瀏覽器點擊一個鏈接,瀏覽器就為我打開這個鏈接的網頁。
原理:當在瀏覽器中點擊這個鏈接的時候,瀏覽器會向服務器發送一段文本,告訴服務器請求打開的是哪一個網頁。服務器收到請求后,就返回一段文本給瀏覽器,瀏覽器會將該文本解析,然后顯示出來。這段文本就是遵循HTTP協議規范的。
HTTP1.0和HTTP1.1的區別HTTP1.0協議中,客戶端與web服務器建立連接后,只能獲得一個web資源【短連接,獲取資源后就斷開連接】
HTTP1.1協議,允許客戶端與web服務器建立連接后,在一個連接上獲取多個web資源【保持連接】
HTTP請求瀏覽器向服務器請求某個web資源時,稱之為瀏覽器向服務器發送了一個http請求。
一個完整http請求應該包含三個部分:
請求行【描述客戶端的請求方式、請求的資源名稱,以及使用的HTTP協議版本號】
多個消息頭【描述客戶端請求哪臺主機,以及客戶端的一些環境信息等】
一個空行
請求行請求行:GET /java.html HTTP/1.1
請求行中的GET稱之為請求方式,請求方式有:POST,GET,HEAD,OPTIONS,DELETE,TRACE,PUT。
常用的有:POST,GET
一般來說,當我們點擊超鏈接,通過地址欄訪問都是get請求方式。通過表單提交的數據一般是post方式。
可以簡單理解GET方式用來查詢數據,POST方式用來提交數據,get的提交速度比post快
GET方式:在URL地址后附帶的參數是有限制的,其數據容量通常不能超過1K。
POST方式:可以在請求的實體內容中向服務器發送數據,傳送的數據量無限制。
請求頭Accept: text/html,image/* 【瀏覽器告訴服務器,它支持的數據類型】
Accept-Charset: ISO-8859-1 【瀏覽器告訴服務器,它支持哪種字符集】
Accept-Encoding: gzip,compress 【瀏覽器告訴服務器,它支持的壓縮格式】
Accept-Language: en-us,zh-cn 【瀏覽器告訴服務器,它的語言環境】
Host: www.it315.org:80【瀏覽器告訴服務器,它的想訪問哪臺主機】
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT【瀏覽器告訴服務器,緩存數據的時間】
Referer: http://www.it315.org/index.jsp【瀏覽器告訴服務器,客戶機是從那個頁面來的---反盜鏈】
8.User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)【瀏覽器告訴服務器,瀏覽器的內核是什么】
Cookie【瀏覽器告訴服務器,帶來的Cookie是什么】
Connection: close/Keep-Alive 【瀏覽器告訴服務器,請求完后是斷開鏈接還是保持鏈接】
Date: Tue, 11 Jul 2000 18:23:51 GMT【瀏覽器告訴服務器,請求的時間】
HTTP響應一個HTTP響應代表著服務器向瀏覽器回送數據
一個完整的HTTP響應應該包含四個部分:
一個狀態行【用于描述服務器對請求的處理結果。】
多個消息頭【用于描述服務器的基本信息,以及數據的描述,服務器通過這些數據的描述信息,可以通知客戶端如何處理等一會兒它回送的數據】
一個空行
實體內容【服務器向客戶端回送的數據】
狀態行格式: HTTP版本號 狀態碼 原因敘述
狀態行:HTTP/1.1 200 OK
狀態碼用于表示服務器對請求的處理結果,它是一個三位的十進制數。響應狀態碼分為5類
響應頭Location: http://www.it315.org/index.jsp 【服務器告訴瀏覽器要跳轉到哪個頁面】
Server:apache tomcat【服務器告訴瀏覽器,服務器的型號是什么】
Content-Encoding: gzip 【服務器告訴瀏覽器數據壓縮的格式】
Content-Length: 80 【服務器告訴瀏覽器回送數據的長度】
Content-Language: zh-cn 【服務器告訴瀏覽器,服務器的語言環境】
Content-Type: text/html; charset=GB2312 【服務器告訴瀏覽器,回送數據的類型】
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT【服務器告訴瀏覽器該資源上次更新時間】
Refresh: 1;url=http://www.it315.org【服務器告訴瀏覽器要定時刷新】
Content-Disposition: attachment; filename=aaa.zip【服務器告訴瀏覽器以下載方式打開數據】
Transfer-Encoding: chunked 【服務器告訴瀏覽器數據以分塊方式回送】
Set-Cookie:SS=Q0=5Lb_nQ; path=/search【服務器告訴瀏覽器要保存Cookie】
Expires: -1【服務器告訴瀏覽器不要設置緩存】
Cache-Control: no-cache 【服務器告訴瀏覽器不要設置緩存】
Pragma: no-cache 【服務器告訴瀏覽器不要設置緩存】
Connection: close/Keep-Alive 【服務器告訴瀏覽器連接方式】
Date: Tue, 11 Jul 2000 18:23:51 GMT【服務器告訴瀏覽器回送數據的時間】
Servlet的作用Servlet帶給我們最大的作用就是能夠處理瀏覽器帶來HTTP請求,并返回一個響應給瀏覽器,從而實現瀏覽器和服務器的交互。
JAVAWEB目錄結構以上圖說明:
bbs目錄代表一個web應用
bbs目錄下的html,jsp文件可以直接被瀏覽器訪問
WEB-INF目錄下的資源是不能直接被瀏覽器訪問的
web.xml文件是web程序的主要配置文件
所有的classes文件都放在classes目錄下
jar文件放在lib目錄下
實現Servlet接口編寫Servlet程序程序我都是由idea下寫,首先要在idea上配置Tomcat,在我別的博文中有教程!
編寫Servlet程序的步驟創建一個自定義類,實現Servlet接口
我們發現有5個方法需要重寫,有init【初始化】,destroy【銷毀】,service【服務】,ServletConfig【Servlet配置】,getServletInfo【Servlet信息】。
在此一看,發現service()方法是最有可能是寫邏輯代碼的地方。
首先寫一個hellword入門先
調用ServletResponse對象的方法向瀏覽器輸出HelloWorld
配置xml文件,光寫了Servlet是不行的,Tomcat還要知道瀏覽器怎么訪問這個Servlet。
訪問自己寫的Servlet程序
Servlet生命周期下面我們看看Servlet的生命周期
第一次訪問Servlet,我們發現init()和service()都被調用了
第二次訪問Servlet,service()被調用了
第三次訪問Servlet,還是service()被調用了
當我們關閉Tomcat服務器的時候,destroy()被調用了!
Servlet生命周期可分為5個步驟加載Servlet。當Tomcat第一次訪問Servlet的時候,Tomcat會負責創建Servlet的實例
初始化。當Servlet被實例化后,Tomcat會調用init()方法初始化這個對象
處理服務。當瀏覽器訪問Servlet的時候,Servlet 會調用service()方法處理請求
銷毀。當Tomcat關閉時或者檢測到Servlet要從Tomcat刪除的時候會自動調用destroy()方法,讓該實例釋放掉所占的資源。一個Servlet如果長時間不被使用的話,也會被Tomcat自動銷毀
卸載。當Servlet調用完destroy()方法后,等待垃圾回收。如果有需要再次使用這個Servlet,會重新調用init()方法進行初始化操作。
簡單總結:**只要訪問Servlet,service()就會被調用。init()只有第一次訪問Servlet的時候才會被調用。
destroy()只有在Tomcat關閉的時候才會被調用。**
繼承HttpServlet編寫Servlet程序在上面我們實現Servlet接口,要實現5個方法。這樣太麻煩了!而HttpServlet類已經實現了Servlet接口的所有方法,編寫Servlet時,只需要繼承HttpServlet,重寫你需要的方法即可,并且它在原有Servlet接口上添加了一些與HTTP協議處理方法,它比Servlet接口的功能更為強大。
一般我們開發的時候,都是重寫doGet()和doPost()方法的。對于idea而言,創建Servlet的時候已經幫你重寫好了
如果文章有錯的地方歡迎指正,大家互相交流。習慣在微信看技術文章的同學,可以關注微信公眾號:Java3y
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68413.html
摘要:前言由于寫的文章已經是有點多了,為了自己和大家的檢索方便,于是我就做了這么一個博客導航。 前言 由于寫的文章已經是有點多了,為了自己和大家的檢索方便,于是我就做了這么一個博客導航。 由于更新比較頻繁,因此隔一段時間才會更新目錄導航哦~想要獲取最新原創的技術文章歡迎關注我的公眾號:Java3y Java3y文章目錄導航 Java基礎 泛型就這么簡單 注解就這么簡單 Druid數據庫連接池...
摘要:本文介紹如何在中開發接口,以及接口如何同時支持和兩種協議。該功能很簡單,就是通過一個人的姓名查詢這個人的詳細信息。就是關鍵,如本次請求報文如下就是,對應。測試使用進行測試,通過地址導入文件進行測試。測試這樣就實現了和同時提供的目的。 介紹spring boot web模塊提供了RestController實現restful,第一次看到這個名字的時候以為還有SoapController,...
摘要:軟件開發體系架構兩層架構傳統的客戶服務器系統僅只簡單地基于兩層體系來構建,即客戶端前臺和企業信息系統后臺,沒有任何中間件,業務邏輯層與表示層或數據層混在一起。 showImg(https://segmentfault.com/img/remote/1460000007090113); 理想的建筑師應該既是文學家又是數字家,他還應通曉歷史,熱衷于哲學研究,精通音樂,懂得醫藥知識,具有法學...
閱讀 1883·2021-11-22 09:34
閱讀 3010·2021-09-28 09:35
閱讀 13374·2021-09-09 11:34
閱讀 3594·2019-08-29 16:25
閱讀 2820·2019-08-29 15:23
閱讀 2035·2019-08-28 17:55
閱讀 2424·2019-08-26 17:04
閱讀 3044·2019-08-26 12:21