JavaEE基礎(01):Servlet實現方式,生命週期執行過程
本文原始碼:GitHub·點這裡 || GitEE·點這裡
一、Servlet簡介
Java編寫的伺服器端程式,具有獨立於平臺和協議的特性,主要功能在於互動式地瀏覽和生成資料,生成動態Web內容。使用Servlet,可以收集來自網頁表單的使用者輸入,呈現來自資料庫或者其他源的記錄,還可以動態建立網頁。
二、實現方式
1、繼承HttpServlet
- API簡介
繼承自 GenericServlet. 遵守 HTTP協議實現,以設計模式的角度看,HttpServlet擔任抽象模板角色,模板方法:由service()方法擔任。基本方法:由doPost()、doGet()等方法擔任。service()方法流程,省略了部分判斷邏輯。該方法呼叫七個do方法中的一個或幾個,完成對客戶端請求的響應。這些do方法需要由HttpServlet的具體子類提供,這種API封裝是典型的模板方法模式。
- 程式碼案例
public class ServletOneImpl extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); response.getWriter().print("執行:doGet"); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); response.getWriter().print("執行:doPost"); } }
2、繼承GenericServlet
- API 簡介
Servlet 介面和 ServletConfig 介面的實現類. 一個抽象類. 其中的 service 方法為抽象方法。
- 程式碼案例
public class ServletTwoImpl extends GenericServlet { @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { HttpServletResponse response = (HttpServletResponse)servletResponse ; response.setContentType("text/html;charset=utf-8"); response.getWriter().print("執行:service"); } }
3、實現Servlet介面
- API 簡介
Servlet是一個介面,其中包含init、getServletConfig、service、getServletInfo、destroy幾個核心方法。
- 程式碼案例
public class ServletThreeImpl implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
servletConfig.getServletName();
System.out.println("init 被呼叫...");
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse)
throws ServletException, IOException {
System.out.println("ThreadId:"+Thread.currentThread().getId());
System.out.println("service 被呼叫...");
HttpServletResponse response = (HttpServletResponse)servletResponse ;
response.getWriter().print("Servlet.Life");
}
@Override
public void destroy() {
System.out.println("destroy 被呼叫...");
}
@Override
public ServletConfig getServletConfig() {
System.out.println("getServletConfig 被呼叫...");
return null;
}
@Override
public String getServletInfo() {
System.out.println("getServletInfo 被呼叫...");
return null;
}
}
三、生命週期
- 載入和例項化
當Servlet容器啟動或客戶端傳送請求時,Servlet容器會查詢是否存在該Servlet例項,若存在,則直接讀取該例項響應請求;如果不存在,就建立一個Servlet例項(屬於單例設計模式)。load-on-startup 可以配置建立時序。
- 初始化:init()
例項化後,Servlet容器將呼叫init方法一次,初始化當前 Servlet。
- 服務:service()
初始化後,Servlet處於響應請求的就緒狀態。當接收到客戶端請求時,呼叫service()的方法處理客戶端請求,HttpServlet的service()方法會根據不同的請求 呼叫不同的模板方法。
- 銷燬:destroy()
當Servlet容器關閉時,Servlet例項也隨時銷燬。關閉 Tomcat 服務時可以通過日誌列印看到該方法的執行。
四、執行配置
1、web.xml配置
<servlet>
<servlet-name>servletOneImpl</servlet-name>
<servlet-class>com.node01.servlet.impl.ServletOneImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletOneImpl</servlet-name>
<url-pattern>/servletOneImpl</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>servletTwoImpl</servlet-name>
<servlet-class>com.node01.servlet.impl.ServletTwoImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletTwoImpl</servlet-name>
<url-pattern>/servletTwoImpl</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>servletThreeImpl</servlet-name>
<servlet-class>com.node01.servlet.impl.ServletThreeImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletThreeImpl</servlet-name>
<url-pattern>/servletThreeImpl</url-pattern>
</servlet-mapping>
請求:http://localhost:6003/servletOneImpl
測試。
- servlet-name:Servlet 註冊名稱。
- servlet-class:Servlet 全路徑類名。
- serlvet-mapping:同一個Servlet可以被對映到多個URL上。
- url-pattern:Servlet 訪問的對映路徑。
2、執行緒池執行
觀察上述第三種Servlet實現方式的日誌列印:Thread.currentThread().getId());
。
ThreadId:32
ThreadId:33
ThreadId:32
ThreadId:31
ThreadId:32
這裡不難發現,Servlet以執行緒池的方式執行的。
五、原始碼地址
GitHub·地址
https://github.com/cicadasmile/java-base-parent
GitEE·地址
https://gitee.com/cicadasmile/java-base-parent
相關推薦
JavaEE基礎(01):Servlet實現方式,生命週期執行過程
本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、Servlet簡介 Java編寫的伺服器端程式,具有獨立於平臺和協議的特性,主要功能在於互動式地瀏覽和生成資料,生成動態Web內容。使用Servlet,可以收集來自網頁表單的使用者輸入,呈現來自資料庫或者其他源的記錄,還可以動態建立網頁。 二
django基礎-01:軟件框架,MVC框架,MVT
應用 視圖 web開發 相互 del elf news go基礎 you 1. 軟件框架 一個公司是由公司中的各部部門來組成的,每一個部門擁有特定的職能,部門與部門之間通過相互的配合來完成讓公司運轉起來。 一個軟件框架是由其中各個軟件模塊組成的,每一個模塊都有特
Spring 框架基礎(01):核心元件總結,基礎環境搭建
本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、Spring框架 1、框架簡介 Spring是一個開源框架,框
JavaEE基礎(02):Servlet核心API用法詳解
本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、核心API簡介 1、Servlet執行流程 Servlet是JavaWeb的三大元件之一(Servlet、Filter、Listener),它屬於動態資源。Servlet的作用是處理請求,伺服器會把接收到的請求交給Servlet來處理,在Se
JavaEE基礎(04):會話跟蹤技術,Session和Cookie詳解
本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、會話跟蹤 1、場景描述 比如登入某個購物網站,身份識別成功後,在網站下單,支付 等操作,這些操作中當前登入使用者資訊必須是共享的,這樣這些操作結果才能和登入使用者做關聯。 2、概念簡介 可以把會話理解為客戶端與伺服器之間的一次互動,在一次互動
JavaEE基礎(06):Servlet整合C3P0資料庫連線池
本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、C3P0連線池 1、C3P0簡介 C3P0是一個開源的JDBC連線池,應用程式根據C3P0配置來初始化資料庫連線,可以自動回收空閒連線的功能。 2、核心依賴 <dependency> <groupId>mysq
Spring 框架基礎(05):事務管理機制,和實現方式
本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、Spring事務管理 1、基礎描述 Spring事務管理的本質就是封裝了資料庫對事務支援的操作,使用JDBC的事務管理機制,就是利用java.sql.Connection物件完成對事務的提交和回滾。 Connection conn = Drive
Go基礎系列:Go實現工作池的兩種方式
worker pool簡介 worker pool其實就是執行緒池thread pool。對於go來說,直接使用的是goroutine而非執行緒,不過這裡仍然以執行緒來解釋執行緒池。 線上程池模型中,有2個佇列一個池子:任務佇列、已完成任務佇列和執行緒池。其中已完成任務佇列可能存在也可能不存在,依據實際需
Java設計模式(二):單例模式的5種實現方式,以及在多執行緒環境下5種建立單例模式的效率
這段時間從頭溫習設計模式。記載下來,以便自己複習,也分享給大家。 package com.iter.devbox.singleton; /** * 餓漢式 * @author Shearer * */ public class SingletonDemo1 {
JavaEE基礎(03):Http請求詳解,握手揮手流程簡介
本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、Http協議簡介 1、概念說明 HTTP超文字傳輸協議,是用於從全球資訊網伺服器傳輸超文字到本地瀏覽器的傳送協議,基於TCP/IP通訊協議來傳遞資料:HTML檔案、圖片、查詢資料等。HTTP協議基於客戶端-服務端架構模式。瀏覽器作為HTTP客
Java併發程式設計(01):執行緒的建立方式,狀態週期管理
> 本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile/java-base-parent) || [GitEE·點這裡](https://gitee.com/cicadasmile/java-base-parent) # 一、併發程式設計簡介 ##
01:第一次作業,生成四則運算的小程序
例如 程序 個數 調試 校招 進行 http .cn 得到 對於這次的作業。 由於之前數據類型考慮錯誤,我之前認為隨機生成的運算數只是整數類型,經過加減後會產生分數的結果,並且沒對計算結果的產生的假分數進行轉化成真分數,於是對之前的代碼進行了重構。 關於前後兩次的變化:
SSM-MyBatis-01:IDEA的安裝,永久註冊和簡單的MyBatis用例
code 程序 over cli 引用 support 路徑 div 其中 一,IDEA的安裝和永久註冊 1.安裝: 那到安裝包,下一步,選路徑,上面可以選操作系統64/32位,下面是程序的默認打開方式,可以不必勾選,也可以全選 路徑一定不包含中文,
Python裏面幾種排序算法的比較,sorted的底層實現,雖然我們知道sorted的實現方式,但是
增長 歸並排序 sha __main__ 代碼 復雜 位置 好的 strong 算法與數據結構基礎 原文鏈接:http://note.youdao.com/noteshare?id=7b9757930ce3cc9e0a5e61e4d0aa9ea2&sub=2726FFA02
比特幣的機制1:記賬的方式,交易的語法,比特幣指令碼,P2PKH交易
原文連結:郭老師的備課資料 比特幣的共識機制生成了一個append-only的賬本,一旦交易在賬本中,再也不能更改。礦工——也即一些有較高計算力的節點,生成區塊,並且驗證交易是正確的(簽名是正確的、幣沒有重複花費)等。賬本和區塊鏈網路使得比特幣成為一種貨幣。在本文中,將介紹一些細節。
bootstrap 多選按鈕實現方式,js,jQuery刪除陣列中指定元素
bootstrap有許多,非常漂亮的設計,不用自己苦惱於css 的使用。 bootstrap使用,實現多選方法: 1、使用bootstrap的表格標籤,表格內容為PHP返回前端資料, <table class="table table-hover table-bordered"
懸浮佈局的最差實現方式,懸浮頭部實現,viewpager巢狀滑動
給部分程式碼看個大概實現,繼承 linearLayout,自己處理滑動,自己計運算元佈局中第一個佈局為摺疊部分。 其實,用scrollview,將listview以及懸浮部分高度設定為螢幕高度,效果直接,省事,滑動體驗更好。巢狀佈局也沒有滑動衝突 public class Scrollabl
單例模式,最好的單例實現方式,靜態內部類的方式
單例模式的優點: 1.在記憶體中只有一個物件,節約記憶體 2.避免頻繁的建立和銷燬物件,可以提高效能 3.避免對共享資源的多重佔用 4.可以全域性訪問 適用場景: 1.需要頻繁例項化然後銷燬的物件 2.
Linux基礎01:基本命令操作
linux的命令 幫助命令 man + COMMAND 按q退出(mini版沒有man這個命令) info + COMMAND 按q退出 COMMAND + -help 或者 --help pwd:列印當前工作目錄 cd 切換工作目錄 cd+新的路徑 ----切換到新的目錄下
lua中class的一種實現方式,單例擴充
方式 tab 方法 span 實用 ble 核心 攔截 說我 先上代碼 1 local _class={} 2 3 function class(super,singleton) 4 local class_type={} 5