Ch02 撰寫與設定 Servlet

Justin Lin
Justin LinTechnology / Community Evangelist at Free lancer
1
2
• 撰寫與設定 Servlet
學習目標
• 開發環境準備與使用
• 了解 Web 應用程式架構
• Servlet 撰寫與部署設定
• 了解 URI 模式對應
• 使用 web-fragement.xml
2
準備開發環境
• Java SE 15
• Eclipse IDE for Java EE Developers
• Tomcat 9
3
第一個 Servlet 程式
4
5
關於 HttpServlet
• Servlet API 的相關類別
6
• 類別路徑(Classpath)中必須包括 Servlet
API的相關類別
– 手動...
– IDE...
7
關於 HttpServlet
8
關於 HttpServlet
9
使用 @WebServlet
• Servlet 3.0 可使用標註
10
使用web.xml
• 部署描述檔(Deployment Descriptor,DD檔)
11
使用web.xml
• web.xml 的設定會覆蓋 Servlet 的標註設定
– 可以使用標註來作預設值
– web.xml 日後更改設定值之用
12
使用web.xml
13
環境根目錄(Context Root)
• 設定方式因 Web 應用程式伺服器而不同
14
使用 web.xml
• Servlet 在 web.xml 會有三個名稱設定
– <url-pattern> 設定的邏輯名稱
– <servlet-name> 註冊的 Servlet 名稱
– <servlet-class> 設定的實體類別名稱
15
檔案組織與部署
16
檔案組織與部署
• 實際上在部署 Web 應用程式時,會將 Web 應
用程式封裝為一個 WAR(Web Archive)檔案
– 副檔名為 *.war 的檔案
– 可使用 JDK 附的 jar 工具程式來建立
– 在Eclipse可以執行「Export/WAR file」匯出 WAR
• Tomcat 容器若發現 webapps 目錄中有 WAR
檔案,會將之解壓縮,並載入 Web 應用程式
17
URI 模式設定
• 請 求URI
– 環境路徑
– Servlet 路徑
– 路徑資訊
• 可使用 HttpServletRequest 的
getRequestURI() 來取得
18
環境路徑
• 容器挑選哪個 Web 應用程式的依據
• 環境路徑的設定方式標準中並沒有規範,依
使用的應用程式伺服器而有所不同
• 可使用 HttpServletRequest 的
getContextPath() 來取得
• 如果應用程式環境路徑與 Web 伺服器環境根
路徑相同,則應用程式環境路徑為空字串
• 如果不是,則應用程式環境路徑以 “/” 開頭,
不包括 "/" 結尾
19
URI 模式設定
• 路徑對應(Path mapping)
– "/" 開頭但 "/*" 結尾的 URI 模式,例如 "/guest/*
• 延伸對應(extension mapping)
– 以 "*." 開頭的URI模式,例如 "*.view"
• 環境根目錄(Context root)對應
• 預設 Servlet
– 僅包括 "/" 的 URI 模式
• 嚴格匹配(Exact match)
– 不符合以上設定的其他字串,例如/guest/test.view
20
URI 模式設定
• 如果 URI 模式在設定比對的規則在某些URI請
求時有所重疊,則請求時比對的原則是從最
嚴格的URI模式開始符合
– "/admin/login.do"
– "/admin/*"
– "*.do" 請求/admin/login.do
21
Servlet 路徑
• 不包括路徑資訊(Path info)與請求參數
(Request parameter)
• Servlet 路徑直接對應至 URI 模式資訊
• 可使用 HttpServletRequest 的
getServletPath() 來取得
• 基本上是以 "/" 開頭
• 在 "/*" 與 "" 的情況下,
getServletPath() 取得的 Servlet 路徑是
空字串
22
Servlet路徑
• 若請求是根據 "/hello.do" 對應至某個
Servlet
– Servlet 路徑就是 "/hello.do"
• 如果透過 "/servlet/*" 對應至 Servlet
– Servlet 路徑就是"/servlet"
• 如果透過 "/*" 或 "" 對應至Servlet
– Servlet 路徑就是空字串
23
路徑資訊
• 不包括請求參數,指的是不包括環境路徑 與
Servlet 路徑部份的額外路徑資訊
• 可使用 HttpServletRequest 的
getPathInfo() 來取得
– 如果沒有額外路徑資訊,則為 null
24
25
HttpServletMapping
• 在 Servlet 4.0 ,HttpServletRequest 新增
了 getHttpServletMapping() 方法
26
Web 目錄結構
• 一個 Web 應用程式基本上會由以下項目組成:
– 靜態資源(HTML、圖片、聲音等)
– Servlet
– JSP
– 自定義類別
– 工具類別
– 部署描述檔(web.xml等)、設定資訊
(Annotation 等)
27
WEB-INF
• 不被列入應用程式根目錄中可直接存取項目
– /WEB-INF/web.xml 是部署描述檔。
– /WEB-INF/classes 用來放置應用程式用到的自定義類別
(.class),必須包括套件(Package)結構
– /WEB-INF/lib 用來放置應用程式用到的 JAR(Java
ARchive)檔案
• 可以透過程式面的控管,讓程式來取得 /WEB-INF
的資源,像是使用 ServletContext 的
getResource() 與 getResourceAsStream(),
或是透過 RequestDispatcher 請求調派
28
Web 應用程式用到的JAR檔案
• 可以放置 Servlet、JSP、自定義類別、工具類
別、部署描述檔等
• 應用程式的類別載入器可以從 JAR 載入對應
的資源
• 可以在 JAR 檔案的 /META-INF/resources 目錄
中放置靜態資源或 JSP 等
29
類別尋找
• /WEB-INF/classes
• /WEB-INF/lib 的 JAR 檔案
• 容器實作本身存放類別或 JAR 的目錄
30
歡迎頁面
• web.xml
• 尋找順序
– 目錄
– JAR 的 /META-INF/resources
• 如果 URI 最後是以/結尾,但不存在該目錄,
則會使用預設 Servlet
31
使用 web-fragment.xml
• Servlet 3.0
– JAR 檔案可用來作為 Web 應用程式的部份模組
– 部署描述檔 web-fragment.xml
– 放置在 JAR 檔案中的 META-INF 目錄之中
32
使用 web-fragment.xml
33
web.xml 與 web-fragment.xml
• 決定 web.xml 與 web-fragment.xml 配置順序
• 各個 JAR 檔 web-fragment.xml 定義的名稱不
得重複,若有重複,則會忽略掉重複的名稱
34
另一個定義順序的方式
• 各個 JAR 中...
• web.xml 沒有定
義順序資訊
• 載入定義的順序
– web.xml
– WebFragment3
– WebFragment2
– WebFragment1
35
metadata-complete 屬性
• 設定為 true(預設是 false),表示
web.xml 中已完成 Web 應用程式的相關定義
– 部署時不會掃描標註與 web-fragment.xml 的定義
– 如果有 <absolute-ordering> 與
<ordering> 也會被忽略
36
瑣瑣碎碎
• 如果 web-fragment.xml 指定的類別可以在 web 應用
程式的 /WEB-INF/classes 找到,就會使用該類別
• 如果該類別本身有標註,而 web-fragment.xml 有定
義該類別為 Servlet,則此時會有兩個 Servlet 實例
• 如果將 <web-fragment> 的 metadata-
complete 屬性設定為 true(預設是false),就
只會處理自己 JAR 檔案中的標註資訊
37
1 of 37

Recommended

CH1. 簡介 Web 應用程式 by
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式Justin Lin
1.2K views55 slides
Ch06 使用 JSP by
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSPJustin Lin
250 views83 slides
Ch07 使用 JSTL by
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTLJustin Lin
161 views74 slides
Ch03 請求與回應 by
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應Justin Lin
236 views73 slides
Ch04 會話管理 by
Ch04 會話管理Ch04 會話管理
Ch04 會話管理Justin Lin
238 views30 slides
Ch09 整合資料庫 by
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫Justin Lin
233 views92 slides

More Related Content

What's hot

Ch13 整合 Spring MVC/Security by
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityJustin Lin
280 views58 slides
Ch02 撰寫與設定Servlet by
Ch02 撰寫與設定ServletCh02 撰寫與設定Servlet
Ch02 撰寫與設定ServletJustin Lin
1K views37 slides
Ch12 Spring 起步走 by
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走Justin Lin
274 views31 slides
Java SE 8 技術手冊第 9 章 - Collection與Map by
Java SE 8 技術手冊第 9 章 - Collection與MapJava SE 8 技術手冊第 9 章 - Collection與Map
Java SE 8 技術手冊第 9 章 - Collection與MapJustin Lin
4.9K views81 slides
Java SE 8 技術手冊第 12 章 - Lambda by
Java SE 8 技術手冊第 12 章 - LambdaJava SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - LambdaJustin Lin
4.4K views100 slides
CH1:Java平台概論 by
CH1:Java平台概論CH1:Java平台概論
CH1:Java平台概論Justin Lin
1.2K views41 slides

What's hot(20)

Ch13 整合 Spring MVC/Security by Justin Lin
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin280 views
Ch02 撰寫與設定Servlet by Justin Lin
Ch02 撰寫與設定ServletCh02 撰寫與設定Servlet
Ch02 撰寫與設定Servlet
Justin Lin1K views
Ch12 Spring 起步走 by Justin Lin
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin274 views
Java SE 8 技術手冊第 9 章 - Collection與Map by Justin Lin
Java SE 8 技術手冊第 9 章 - Collection與MapJava SE 8 技術手冊第 9 章 - Collection與Map
Java SE 8 技術手冊第 9 章 - Collection與Map
Justin Lin4.9K views
Java SE 8 技術手冊第 12 章 - Lambda by Justin Lin
Java SE 8 技術手冊第 12 章 - LambdaJava SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - Lambda
Justin Lin4.4K views
CH1:Java平台概論 by Justin Lin
CH1:Java平台概論CH1:Java平台概論
CH1:Java平台概論
Justin Lin1.2K views
FHIR Server 安裝與使用 by Lorex L. Yang
FHIR Server 安裝與使用FHIR Server 安裝與使用
FHIR Server 安裝與使用
Lorex L. Yang4.1K views
Java SE 8 技術手冊第 1 章 - Java平台概論 by Justin Lin
Java SE 8 技術手冊第 1 章 - Java平台概論Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin11.6K views
Java Tutorial:Learn Java in 06:00:00 by Justin Lin
Java Tutorial:Learn Java in 06:00:00Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
Justin Lin27.5K views
2. 型態、變數與運算子 by Justin Lin
2. 型態、變數與運算子2. 型態、變數與運算子
2. 型態、變數與運算子
Justin Lin588 views
CH04:認識物件 by Justin Lin
CH04:認識物件CH04:認識物件
CH04:認識物件
Justin Lin421 views
1. JavaScript 起步走 by Justin Lin
1. JavaScript 起步走1. JavaScript 起步走
1. JavaScript 起步走
Justin Lin772 views
Spring 2.0 技術手冊第一章 - 認識 Spring by Justin Lin
Spring 2.0 技術手冊第一章 - 認識 SpringSpring 2.0 技術手冊第一章 - 認識 Spring
Spring 2.0 技術手冊第一章 - 認識 Spring
Justin Lin10K views
慈濟大學/FHIR 快速掃描/DSTU3 版本 by Lorex L. Yang
慈濟大學/FHIR 快速掃描/DSTU3 版本慈濟大學/FHIR 快速掃描/DSTU3 版本
慈濟大學/FHIR 快速掃描/DSTU3 版本
Lorex L. Yang1.4K views
DVGA writeup by Yu Iwama
DVGA writeupDVGA writeup
DVGA writeup
Yu Iwama444 views
CH02:從JDK到IDE by Justin Lin
CH02:從JDK到IDECH02:從JDK到IDE
CH02:從JDK到IDE
Justin Lin481 views
The Cucumber for Java by Jonghwa Lee
The Cucumber for JavaThe Cucumber for Java
The Cucumber for Java
Jonghwa Lee318 views
Java SE 8 技術手冊第 4 章 - 認識物件 by Justin Lin
Java SE 8 技術手冊第 4 章 - 認識物件Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件
Justin Lin4.2K views
初學者都該了解的 HTTP 通訊協定基礎 by Will Huang
初學者都該了解的 HTTP 通訊協定基礎初學者都該了解的 HTTP 通訊協定基礎
初學者都該了解的 HTTP 通訊協定基礎
Will Huang12.9K views
Enterprise java unit-2_chapter-2 by sandeep54552
Enterprise  java unit-2_chapter-2Enterprise  java unit-2_chapter-2
Enterprise java unit-2_chapter-2
sandeep54552132 views

Similar to Ch02 撰寫與設定 Servlet

Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器 by
Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器
Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器Justin Lin
2.7K views64 slides
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet by
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 ServletServlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 ServletJustin Lin
6.1K views36 slides
Ch05 Servlet進階API、過濾器與傾聽器 by
Ch05 Servlet進階API、過濾器與傾聽器Ch05 Servlet進階API、過濾器與傾聽器
Ch05 Servlet進階API、過濾器與傾聽器Justin Lin
504 views70 slides
Spring mvc by
Spring mvcSpring mvc
Spring mvcpepsixp
1.2K views38 slides
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應 by
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應Justin Lin
4.5K views66 slides
ASP.NET MVC 6 新功能探索 by
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索Will Huang
11.5K views48 slides

Similar to Ch02 撰寫與設定 Servlet(20)

Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器 by Justin Lin
Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器
Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器
Justin Lin2.7K views
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet by Justin Lin
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 ServletServlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Justin Lin6.1K views
Ch05 Servlet進階API、過濾器與傾聽器 by Justin Lin
Ch05 Servlet進階API、過濾器與傾聽器Ch05 Servlet進階API、過濾器與傾聽器
Ch05 Servlet進階API、過濾器與傾聽器
Justin Lin504 views
Spring mvc by pepsixp
Spring mvcSpring mvc
Spring mvc
pepsixp1.2K views
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應 by Justin Lin
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應
Justin Lin4.5K views
ASP.NET MVC 6 新功能探索 by Will Huang
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
Will Huang11.5K views
Asp.net mvc 6 新功能初探 by Gelis Wu
Asp.net mvc 6 新功能初探Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探
Gelis Wu2.7K views
DEV305 - ASP.NET 5 開發攻略 by Will Huang
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
Will Huang6.1K views
開發環境建置 by Shengyou Fan
開發環境建置開發環境建置
開發環境建置
Shengyou Fan101.1K views
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫 by Justin Lin
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫
Justin Lin3.4K views
View 與 Blade 樣板引擎 by Shengyou Fan
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
Shengyou Fan10.1K views
twMVC#19 | opserver監控服務的解決 by twMVC
twMVC#19 | opserver監控服務的解決twMVC#19 | opserver監控服務的解決
twMVC#19 | opserver監控服務的解決
twMVC773 views
使用 ASP.NET 5 實戰開發雲端應用程式 by Will Huang
使用 ASP.NET 5 實戰開發雲端應用程式使用 ASP.NET 5 實戰開發雲端應用程式
使用 ASP.NET 5 實戰開發雲端應用程式
Will Huang4.3K views
How to ASP.NET MVC4 by Daniel Chou
How to ASP.NET MVC4How to ASP.NET MVC4
How to ASP.NET MVC4
Daniel Chou987 views
Route路由控制 by Shengyou Fan
Route路由控制Route路由控制
Route路由控制
Shengyou Fan8.8K views
使用 Controller by Shengyou Fan
使用 Controller使用 Controller
使用 Controller
Shengyou Fan34.2K views
使用 Controller by Shengyou Fan
使用 Controller使用 Controller
使用 Controller
Shengyou Fan5.5K views
线程编程方面 by yiditushe
线程编程方面线程编程方面
线程编程方面
yiditushe213 views
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫 by Justin Lin
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Justin Lin2.1K views
J2ee经典学习笔记 by yiditushe
J2ee经典学习笔记J2ee经典学习笔记
J2ee经典学习笔记
yiditushe1.4K views

More from Justin Lin

Ch14 簡介 Spring Boot by
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring BootJustin Lin
872 views22 slides
Ch11 簡介 JavaMail by
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMailJustin Lin
157 views8 slides
Ch10 Web 容器安全管理 by
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Justin Lin
153 views30 slides
Ch08 自訂標籤 by
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤Justin Lin
133 views54 slides
14. 進階主題 by
14. 進階主題14. 進階主題
14. 進階主題Justin Lin
406 views86 slides
13.並行、平行與非同步 by
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步Justin Lin
237 views81 slides

More from Justin Lin(20)

Ch14 簡介 Spring Boot by Justin Lin
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin872 views
Ch11 簡介 JavaMail by Justin Lin
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin157 views
Ch10 Web 容器安全管理 by Justin Lin
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin153 views
Ch08 自訂標籤 by Justin Lin
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin133 views
14. 進階主題 by Justin Lin
14. 進階主題14. 進階主題
14. 進階主題
Justin Lin406 views
13.並行、平行與非同步 by Justin Lin
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步
Justin Lin237 views
12. 除錯、測試與效能 by Justin Lin
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin153 views
11. 常用內建模組 by Justin Lin
11. 常用內建模組11. 常用內建模組
11. 常用內建模組
Justin Lin149 views
10. 資料永續與交換 by Justin Lin
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換
Justin Lin156 views
9. 資料結構 by Justin Lin
9. 資料結構9. 資料結構
9. 資料結構
Justin Lin292 views
8. open() 與 io 模組 by Justin Lin
8. open() 與 io 模組8. open() 與 io 模組
8. open() 與 io 模組
Justin Lin245 views
7. 例外處理 by Justin Lin
7. 例外處理7. 例外處理
7. 例外處理
Justin Lin115 views
6. 類別的繼承 by Justin Lin
6. 類別的繼承6. 類別的繼承
6. 類別的繼承
Justin Lin166 views
5. 從模組到類別 by Justin Lin
5. 從模組到類別5. 從模組到類別
5. 從模組到類別
Justin Lin169 views
4. 流程語法與函式 by Justin Lin
4. 流程語法與函式4. 流程語法與函式
4. 流程語法與函式
Justin Lin188 views
3.型態與運算子 by Justin Lin
3.型態與運算子3.型態與運算子
3.型態與運算子
Justin Lin199 views
1. Python起步走 by Justin Lin
1. Python起步走1. Python起步走
1. Python起步走
Justin Lin662 views
2. 從 REPL 到 IDE by Justin Lin
2. 從 REPL 到 IDE2. 從 REPL 到 IDE
2. 從 REPL 到 IDE
Justin Lin234 views
Python 3.9 技術手冊目錄 by Justin Lin
Python 3.9 技術手冊目錄Python 3.9 技術手冊目錄
Python 3.9 技術手冊目錄
Justin Lin580 views
CH19:深入模組化 by Justin Lin
CH19:深入模組化CH19:深入模組化
CH19:深入模組化
Justin Lin791 views

Ch02 撰寫與設定 Servlet