<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
┌─────────┐ ┌─────────┐ │░░░░░░░░░│ │O ░░░░░░░│ ├─────────┤ ├─────────┤ │░░░░░░░░░│ │ │ ├─────────┤ │ │ │░░░░░░░░░│ └─────────┘ └─────────┘ │ request 1 │ │─────────────────────>│ │ request 2 │ │─────────────────────>│ │ response 1 │ │<─────────────────────│ │ request 3 │ │─────────────────────>│ │ response 3 │ │<─────────────────────│ │ response 2 │ │<─────────────────────│ ▼ ▼
我們注意到HTTP協定是一個請求-響應協定,它總是傳送一個請求,然後接收一個響應。能不能一次性傳送多個請求,然後再接收多個響應呢?HTTP 2.0
可以支援瀏覽器同時發出多個請求,但每個請求需要唯一標識,伺服器可以不按請求的順序返回多個響應,由瀏覽器自己把收到的響應和請求對應起來。可見,HTTP 2.0
進一步提高了傳輸效率,因為瀏覽器發出一個請求後,不必等待響應,就可以繼續發下一個請求。
HTTP 3.0
為了進一步提高速度,將拋棄TCP
協定,改為使用無需建立連線的UDP
協定,目前HTTP 3.0
仍然處於實驗推廣階段。
在JavaEE
平臺上,處理TCP
連線,解析HTTP
協定這些底層工作統統扔給現成的Web
伺服器去做,我們只需要把自己的應用程式跑在Web
伺服器上。為了實現這一目的,JavaEE
提供了Servlet
API
,我們使用Servlet API
編寫自己的Servlet
來處理HTTP
請求,Web
伺服器實現Servlet
API
介面,
實現底層功能.
// WebServlet註解表示這是一個Servlet,並對映到地址 hello.do @WebServlet(urlPatterns = "/hello.do") public class HelloServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 設定響應型別: resp.setContentType("text/html"); // 獲取輸出流: PrintWriter pw = resp.getWriter(); // 寫入響應: pw.write("<h1>Hello, world!</h1>"); // 最後不要忘記flush強制輸出: pw.flush(); } }
一個Servlet
總是繼承自HttpServlet
,然後覆寫doGet()
或doPost()
方法。注意到doGet()
方法傳入了HttpServletRequest
和HttpServletResponse
兩個物件,分別代表HTTP
請求和響應。我們使用Servlet API
時,並不直接與底層TCP
互動,也不需要解析HTTP
協定,因為HttpServletRequest
和HttpServletResponse
就已經封裝好了請求和響應。以傳送響應為例,我們只需要設定正確的響應型別,然後獲取PrintWriter
,寫入響應即可。
而這樣的一個專案最終會打包成一個*.war
檔案,執行這個檔案,需要使用支援Servlet
API
的Web容器(Web伺服器)。
因此,我們首先要找一個支援Servlet API的Web伺服器。
常用的伺服器有:
在通過一個URL
路徑發起對一個Servlet
請求的過程中,其本質是在呼叫執行Servlet
範例的doXXX()
方法。該Servlet
範例建立和使用的過程,被稱為Servlet的生命週期。整個生命週期包括:範例化、初始化、服務、銷燬。
Servlet
請求的路徑(例如:home.do
),查詢該Servlet
的範例。如果範例不存在,則通過呼叫構造方法,完成Servlet
範例的建立。Servlet
的範例,呼叫init()
方法,執行初始化的邏輯。Servlet
的範例,呼叫service()
方法,如果子類沒有重寫該方法,則呼叫HttpServlet父類別的service()
方法,在父類別的該方法中進行請求方式的判斷,如果是GET
請求,則呼叫doGet()
方法;如果是POST
請求,則呼叫doPost()
方法;如果子類重寫doXXX()
方法,則呼叫子類重寫後的doXXX()
方法;
如果子類沒有重寫doXXX()
方法,則呼叫父類別的doXXX()
方法,在父類別的方法實現中,返回一個405
狀態碼的錯誤頁面。
405狀態碼:代表請求的方式伺服器不提供支援。
4.銷燬:伺服器關閉或重啟時,會銷燬所有的Servlet範例,會呼叫Servlet範例的destroy()
方法。
package com.my.hyz.web.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //@WebServlet("/home.do") public class HomeServlet extends HttpServlet { public HomeServlet() { System.out.println("範例化"); } @Override public void init() throws ServletException { System.out.println("初始化"); //super.init(); } @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("呼叫Service範例"); } @Override public void destroy() { System.out.println("銷燬咯!!!!"); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println("哎呦get到了"+this.hashCode()); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("哎呦post到了"); } }
到此這篇關於Java中Servlet的生命週期詳解的文章就介紹到這了,更多相關Java Servlet 生命週期內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45