SlideShare a Scribd company logo
Submit Search
Upload
Ch03 請求與回應
Report
Share
Justin Lin
Technology / Community Evangelist at Free lancer
Follow
•
0 likes
•
655 views
1
of
74
Ch03 請求與回應
•
0 likes
•
655 views
Report
Share
Download Now
Download to read offline
Technology
取得請求參數與標頭 • 處理中文字元請求與回應 • 設定與取得請求範圍屬性 • 使用轉發、包含、重新導向
Read more
Justin Lin
Technology / Community Evangelist at Free lancer
Follow
Recommended
Ch04 會話管理 by
Ch04 會話管理
Justin Lin
392 views
•
30 slides
Ch01 簡介Web應用程式 by
Ch01 簡介Web應用程式
Justin Lin
1.7K views
•
55 slides
Servlet & JSP 教學手冊第二版 - 第 4 章:會話管理 by
Servlet & JSP 教學手冊第二版 - 第 4 章:會話管理
Justin Lin
2.5K views
•
30 slides
Ch03 請求與回應 by
Ch03 請求與回應
Justin Lin
236 views
•
73 slides
Ch04 會話管理 by
Ch04 會話管理
Justin Lin
238 views
•
30 slides
CH1. 簡介 Web 應用程式 by
CH1. 簡介 Web 應用程式
Justin Lin
1.2K views
•
55 slides
More Related Content
What's hot
Ch10 Web容器安全管理 by
Ch10 Web容器安全管理
Justin Lin
384 views
•
30 slides
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式 by
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Justin Lin
19.2K views
•
53 slides
Ch05 Servlet 進階 API、過濾器與傾聽器 by
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
204 views
•
69 slides
Servlet & JSP 教學手冊第二版 - 課後練習解答 by
Servlet & JSP 教學手冊第二版 - 課後練習解答
Justin Lin
4.9K views
•
39 slides
Ch02 撰寫與設定 Servlet by
Ch02 撰寫與設定 Servlet
Justin Lin
352 views
•
37 slides
Ch13 整合 Spring MVC/Security by
Ch13 整合 Spring MVC/Security
Justin Lin
280 views
•
58 slides
What's hot
(20)
Ch10 Web容器安全管理 by Justin Lin
Ch10 Web容器安全管理
Justin Lin
•
384 views
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式 by Justin Lin
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Justin Lin
•
19.2K views
Ch05 Servlet 進階 API、過濾器與傾聽器 by Justin Lin
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
•
204 views
Servlet & JSP 教學手冊第二版 - 課後練習解答 by Justin Lin
Servlet & JSP 教學手冊第二版 - 課後練習解答
Justin Lin
•
4.9K views
Ch02 撰寫與設定 Servlet by Justin Lin
Ch02 撰寫與設定 Servlet
Justin Lin
•
352 views
Ch13 整合 Spring MVC/Security by Justin Lin
Ch13 整合 Spring MVC/Security
Justin Lin
•
280 views
Ch09 整合資料庫 by Justin Lin
Ch09 整合資料庫
Justin Lin
•
233 views
Ch02 撰寫與設定Servlet by Justin Lin
Ch02 撰寫與設定Servlet
Justin Lin
•
1K views
Ch10 Web 容器安全管理 by Justin Lin
Ch10 Web 容器安全管理
Justin Lin
•
153 views
整合資料庫 by Justin Lin
整合資料庫
Justin Lin
•
855 views
Servlet & JSP 教學手冊第二版 - 第 10 章:Web 容器安全管理 by Justin Lin
Servlet & JSP 教學手冊第二版 - 第 10 章:Web 容器安全管理
Justin Lin
•
1.9K views
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet by Justin Lin
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Justin Lin
•
6.1K views
Ch06 使用 JSP by Justin Lin
Ch06 使用 JSP
Justin Lin
•
250 views
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫 by Justin Lin
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫
Justin Lin
•
3.4K views
Ch13 整合Spring MVC by Justin Lin
Ch13 整合Spring MVC
Justin Lin
•
788 views
Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器 by Justin Lin
Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器
Justin Lin
•
2.7K views
Ch09 整合資料庫 by Justin Lin
Ch09 整合資料庫
Justin Lin
•
468 views
Ch07 使用JSTL by Justin Lin
Ch07 使用JSTL
Justin Lin
•
431 views
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL by Justin Lin
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Justin Lin
•
2.9K views
Ch08 自訂標籤 by Justin Lin
Ch08 自訂標籤
Justin Lin
•
382 views
Similar to Ch03 請求與回應
ASP.Net WebAPI經驗分享 by
ASP.Net WebAPI經驗分享
國昭 張
1.6K views
•
73 slides
Spring mvc by
Spring mvc
pepsixp
1.2K views
•
38 slides
開放原始碼 Ch2.5 app - oss - 3rd party api(ver 1.0) by
開放原始碼 Ch2.5 app - oss - 3rd party api(ver 1.0)
My own sweet home!
337 views
•
28 slides
AJAX Basic by
AJAX Basic
Ryan Chung
1.3K views
•
35 slides
探讨Web优化 by
探讨Web优化
dynamiclu
732 views
•
21 slides
How to ASP.NET MVC4 by
How to ASP.NET MVC4
Daniel Chou
987 views
•
78 slides
Similar to Ch03 請求與回應
(20)
ASP.Net WebAPI經驗分享 by 國昭 張
ASP.Net WebAPI經驗分享
國昭 張
•
1.6K views
Spring mvc by pepsixp
Spring mvc
pepsixp
•
1.2K views
開放原始碼 Ch2.5 app - oss - 3rd party api(ver 1.0) by My own sweet home!
開放原始碼 Ch2.5 app - oss - 3rd party api(ver 1.0)
My own sweet home!
•
337 views
AJAX Basic by Ryan Chung
AJAX Basic
Ryan Chung
•
1.3K views
探讨Web优化 by dynamiclu
探讨Web优化
dynamiclu
•
732 views
How to ASP.NET MVC4 by Daniel Chou
How to ASP.NET MVC4
Daniel Chou
•
987 views
Real-Time Web实时信息流推送 by yongboy
Real-Time Web实时信息流推送
yongboy
•
4.7K views
Real time web实时信息流推送 by yongboy
Real time web实时信息流推送
yongboy
•
2.5K views
实时Web的前世今生未来 by RolfZhang
实时Web的前世今生未来
RolfZhang
•
1.1K views
Rest与面向资源的web开发 by topgeek
Rest与面向资源的web开发
topgeek
•
1.2K views
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫 by Justin Lin
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Justin Lin
•
2.1K views
前端性能测试 by tbmallf2e
前端性能测试
tbmallf2e
•
2.1K views
Javascript by Ryan Chung
Javascript
Ryan Chung
•
5.7K views
.NET Security Application/Web Development - Part II by Chen-Tien Tsai
.NET Security Application/Web Development - Part II
Chen-Tien Tsai
•
443 views
12. 網路通訊方案 by Justin Lin
12. 網路通訊方案
Justin Lin
•
447 views
Res tful api design tw-2.0 by 昀陞 李
Res tful api design tw-2.0
昀陞 李
•
412 views
D2_Node在淘宝的应用实践 by Jackson Tian
D2_Node在淘宝的应用实践
Jackson Tian
•
1.8K views
Build your own kubernetes apiserver and resource type by inwin stack
Build your own kubernetes apiserver and resource type
inwin stack
•
629 views
运维系统开发与Rails 3页面开发实践 by Li JianYe
运维系统开发与Rails 3页面开发实践
Li JianYe
•
723 views
中远公司 Java培训资料 by yiditushe
中远公司 Java培训资料
yiditushe
•
132 views
More from Justin Lin
Ch14 簡介 Spring Boot by
Ch14 簡介 Spring Boot
Justin Lin
872 views
•
22 slides
Ch12 Spring 起步走 by
Ch12 Spring 起步走
Justin Lin
274 views
•
31 slides
Ch11 簡介 JavaMail by
Ch11 簡介 JavaMail
Justin Lin
157 views
•
8 slides
Ch08 自訂標籤 by
Ch08 自訂標籤
Justin Lin
133 views
•
54 slides
Ch07 使用 JSTL by
Ch07 使用 JSTL
Justin Lin
161 views
•
74 slides
14. 進階主題 by
14. 進階主題
Justin Lin
406 views
•
86 slides
More from Justin Lin
(20)
Ch14 簡介 Spring Boot by Justin Lin
Ch14 簡介 Spring Boot
Justin Lin
•
872 views
Ch12 Spring 起步走 by Justin Lin
Ch12 Spring 起步走
Justin Lin
•
274 views
Ch11 簡介 JavaMail by Justin Lin
Ch11 簡介 JavaMail
Justin Lin
•
157 views
Ch08 自訂標籤 by Justin Lin
Ch08 自訂標籤
Justin Lin
•
133 views
Ch07 使用 JSTL by Justin Lin
Ch07 使用 JSTL
Justin Lin
•
161 views
14. 進階主題 by Justin Lin
14. 進階主題
Justin Lin
•
406 views
13.並行、平行與非同步 by Justin Lin
13.並行、平行與非同步
Justin Lin
•
238 views
12. 除錯、測試與效能 by Justin Lin
12. 除錯、測試與效能
Justin Lin
•
153 views
11. 常用內建模組 by Justin Lin
11. 常用內建模組
Justin Lin
•
149 views
10. 資料永續與交換 by Justin Lin
10. 資料永續與交換
Justin Lin
•
156 views
9. 資料結構 by Justin Lin
9. 資料結構
Justin Lin
•
292 views
8. open() 與 io 模組 by Justin Lin
8. open() 與 io 模組
Justin Lin
•
245 views
7. 例外處理 by Justin Lin
7. 例外處理
Justin Lin
•
115 views
6. 類別的繼承 by Justin Lin
6. 類別的繼承
Justin Lin
•
166 views
5. 從模組到類別 by Justin Lin
5. 從模組到類別
Justin Lin
•
169 views
4. 流程語法與函式 by Justin Lin
4. 流程語法與函式
Justin Lin
•
188 views
3.型態與運算子 by Justin Lin
3.型態與運算子
Justin Lin
•
199 views
1. Python起步走 by Justin Lin
1. Python起步走
Justin Lin
•
664 views
2. 從 REPL 到 IDE by Justin Lin
2. 從 REPL 到 IDE
Justin Lin
•
234 views
Python 3.9 技術手冊目錄 by Justin Lin
Python 3.9 技術手冊目錄
Justin Lin
•
580 views
Ch03 請求與回應
1.
1
2.
3 • 請求與回應 學習目標 • 取得請求參數與標頭 •
處理中文字元請求與回應 • 設定與取得請求範圍屬性 • 使用轉發、包含、重新導向 2
3.
Web容器作了什麼? 3
4.
Web容器作了什麼? • HttpServletRequest、 HttpServletResponse 都是介面 4
5.
Web容器作了什麼? 5
6.
Web容器作了什麼? • 請求資訊的收集 • 建立HttpServletRequest物件 •
建立HttpServletResponse物件 • 輸出HTTP回應之轉換 • 銷毀、回收HttpServletRequest物件 • 銷毀、回收HttpServletResponse物件 • ... 6
7.
Web容器作了什麼? • 必須了解Web容器管理物件生命週期的方式, 否則就會引來不必要的錯誤 7
8.
doXXX()方法? • service()方法簽署 • 請求/回應物件的基本行為是規範在 ServletRequest、ServletResponse(套件是 javax.servlet) •
與HTTP相關的行為,則分別由兩者的子介面 HttpServletRequest、 HttpServletResponse(套件是 javax.servlet.http)定義 8
9.
doXXX()方法? • Web容器建立HttpServletRequest、 HttpServletResponse的實作物件 另一個版本的service()方法 9
10.
doXXX()方法? 10
11.
doXXX()方法? 11
12.
doXXX()方法? • doGet() 處理
HTTP GET 請求 • doPost() 處理 HTTP POST 請求 • doPut() 處理 HTTP PUT 請求 • doDelete() 處理 HTTP DELETE 請求 • doHead() 處理 HTTP HEAD 請求 • doOptions() 處理 HTTP OPTIONS 請求 • doTrace() 處理 HTTP TRACE 請求 12
13.
doXXX()方法? • 如果客戶端發出了沒有實作的請求會如何? 13
14.
doXXX()方法? 14
15.
doXXX()方法? • 可以實作getLastModified()方法決定是 否呼叫doGet()方法 • 在GET與POST都需要相同處理的情境 15
16.
處理請求參數 • getParameter() • getParameterValues() •
getParameterNames() • getParameterMap() 16
17.
處理請求參數 • 永遠別假設使用者會按照你的期望提供請求 name=%3Csmall%3EJustin%3C/small%3E 17
18.
處理請求參數 • 未經過濾的請求參數值形成Web網站的弱點 • 引發各種可能注入(Injection)攻擊可能性 name=%3Cscript%3Ealert(%27Attack%27)%3C/script%3E name=<script>alert('Atack')</script> 18
19.
處理請求參數 • 現代瀏覽器能防範 基本的XSS模式 19
20.
處理請求參數 20
21.
處理請求標頭 • getHeader() • getHeaders() •
getHeaderNames() 21
22.
處理請求標頭 22
23.
瀏覽器用UTF-8發送請求 • POST請求參數編碼處理 • GET請求參數編碼處理 –
Tomcat 8.0 以後預設URI編碼為UTF-8 – Tomcat 8.0 之前預設URI編碼為ISO-8859-1 23
24.
POST請求參數編碼處理 • 沒有Content-Type標頭, getCharacterEncoding()傳回null • 容器若使用ISO-8859-1,客戶端使用UTF- 8發送非ASCII字元的請求參數 •
使用getParameter()等方法會取得亂碼 24
25.
POST請求參數編碼處理 • 網頁編碼UTF-8,表單使用POST發出「林」 – 林
%E6%9E%97 • 瀏覽器相當於作了這個動作 • 容器若使用ISO-8859-1來處理編碼 25
26.
POST請求參數編碼處理 • 使用HttpServletRequest的 setCharacterEncoding()方法 • 在取得任何請求值之「前」 •
相當於要求容器作這個動作 26
27.
POST請求參數編碼處理 • 從Servlet 4.0開始,可以在web.xml中加入 <request-character-encoding> <request-character-encoding>UTF-8</request-character-encoding> 27
28.
GET請求參數編碼處理 • setCharacterEncoding()只對POST產 生作用 – Overrides
the name of the character encoding used in the body of this request. – 請求用GET發送時,沒有定義是否影響Web容器 處理編碼的方式 – Tomcat在GET時,setCharacterEncoding() 方法設定編碼就不會有作用 28
29.
GET請求參數編碼處理 • 若瀏覽器使用UTF-8處理字元,Web容器預 設使用ISO-8859-1作為URI編碼(Tomcat 8.0之前的版本) 29
30.
GET請求參數編碼處理 • 若瀏覽器使用UTF-8處理字元,相當於作了 這個動作 • Web容器預設使用ISO-8859-1作為URI編碼 •
用以下編碼轉換來得到正確的「林」字元 30
31.
讀取請求本體 • getReader()傳回BufferedReader • getInputStream()傳回 ServletInputStream 31
32.
32
33.
getReader() • UTF-8網頁 33
34.
<form>標籤的enctype屬性 • 預設值"application/x-www-form-urlencoded" • 上傳檔案,要設為"multipart/form-data" 34
35.
getReader() • 上傳檔案 35
36.
getInputStream() • 要取得上傳的檔案,基本方式就是判斷檔案 的開始與結束區段 • 使用getInputStream()取得 ServletInputStream –
InputStream子類別,代表請求本體串流物件 36
37.
同一個請求期間 • getReader()與getInputStream()只能 擇一呼叫 • 若同一請求期間兩者都有呼叫,則會丟出 IllegalStateException例外 37
38.
getPart()、getParts() • 在Servlet 3.0中,新增了Part介面 •
可以透過HttpServletRequest的 getPart()取得Part實作物件 38
39.
39
40.
40
41.
@MultipartConfig • fileSizeThreshold:上傳檔案大小超過 設定門檻的話,會先寫入暫存檔案 • location:寫入檔案時的目錄 •
maxFileSize:限制上傳檔案大小 • maxRequestSize:限制multipart/form-data 請求個數 41
42.
42
43.
多個檔案要上傳 • 可以使用getParts()方法 • 傳回一個Collection<Part>,當中是每 個上傳檔案的Part物件 43
44.
使用web.xml設定 44
45.
RequestDispatcher • 使用HttpServletRequest的 getRequestDispatcher()方法取得 45
46.
使用include()方法 • 將另一個Servlet執行流程包括至目前Servlet 執行流程 46
47.
使用include()方法 • 取得RequestDispatcher時,也可以包括 查詢字串 47
48.
請求範圍屬性 • HttpServletRequest上與請求範圍屬性 有關的幾個方法: – setAttribute():指定名稱與物件設定屬性 –
getAttribute():指定名稱取得屬性 – getAttributeNames():取得所有屬性名稱 – removeAttribute():指定名稱移除屬性 48
49.
請求範圍屬性 49
50.
java.或javax.開頭的名稱 • javax.servlet.include.request_uri • javax.servlet.include.context_path •
javax.servlet.include.servlet_path • javax.servlet.include.path_info • javax.servlet.include.query_string • javax.servlet.include.mapping(Servlet 4.0 新增) 50
51.
java.或javax.開頭的名稱 • RequestDispatcher.INCLUDE_REQUEST_URI • RequestDispatcher.INCLUDE_CONTEXT_PATH •
RequestDispatcher.INCLUDE_SERVLET_PATH • RequestDispatcher.INCLUDE_PATH_INFO • RequestDispatcher.INCLUDE_QUERY_STRING • RequestDispatcher.INCLUDE_MAPPING(Servlet 4.0 新增) 51
52.
使用forward()方法 • 要將請求處理轉發給別的Servlet • 對客戶端的回應同時也轉發給另一個Servlet •
目前的Servlet不能有任何回應確認,否則會 丟出IllegalStateException 52
53.
java.或javax.開頭的名稱 • javax.servlet.forward.request_uri • javax.servlet.forward.context_path •
javax.servlet.forward.servlet_path • javax.servlet.forward.path_info • javax.servlet.forward.query_string • javax.servlet.forward.mapping(Servlet 4.0 新增) 53
54.
java.或javax.開頭的名稱 • RequestDispatcher.FORWARD_REQUEST_URI • RequestDispatcher.FORWARD_CONTEXT_PATH •
RequestDispatcher.FORWARD_SERVLET_PATH • RequestDispatcher.FORWARD_PATH_INFO • RequestDispatcher.FORWARD_QUERY_STRING • RequestDispatcher.FORWARD_MAPPING(Servlet 4.0 新增) 54
55.
Model 2 /
Controller 55
56.
Model 2 /
Model 56
57.
Model 2 /
View 57
58.
Model 2 /
View 58
59.
HttpServletResponse • setHeader() • addHeader() •
setIntHeader() • addIntHeader() • setDateHeader() • addDateHeader() 59
60.
HttpServletResponse • 在回應確認之後設定的標頭,會被容器忽略 • 與緩衝區相關 –
getBufferSize() – setBufferSize() – isCommitted() – reset() – resetBuffer() – flushBuffer() 60
61.
HttpServletResponse • 在呼叫HttpServletResponse的 getWriter()或 getOutputStream()方 法之後呼叫setBufferSize(),會丟出 IllegalStateException •
在回應已確認後呼叫reset()、 resetBuffer()會丟出 IllegalStateException 61
62.
HttpServletResponse • 若被容器關閉,則必須出清所有的回應內容 – Servlet的service()方法已結束 –
回應的內容長度超過HttpServletResponse 的setContentLength()所設定的長度 – 呼叫了sendRedirect()方法 – 呼叫了sendError()方法 – 呼叫了AsyncContext的complete()方法 62
63.
HttpServletResponse • 使用getWriter()取得PrintWriter物件 • 字元編碼預設是ISO-8859-1 63
64.
設定Locale • 瀏覽器如果有發送Accept-Language標頭 • 可以使用HttpServletRequest的 getLocale()來取得一個Locale物件 •
代表客戶端可接受的語系 • 可以使用HttpServletResponse的 setLocale()來設定地區(Locale)資訊 • setLocale()也會設定HTTP回應的 Content-Language標頭 64
65.
設定Locale • 將HTTP回應的Content-Language設定為 zh-TW,而字元編碼處理設定為BIG5 • 在web.xml中設定預設的區域與編碼對應 65
66.
設定字元編碼 • 呼叫HttpServletResponse的 setCharacgerEncoding() • 使用HttpServletResponse的 setContentType()時,指定charset 66
67.
設定字元編碼 • 如果使用了setCharacterEncoding()或 setContentType()時指定了charset, 則setLocale()就會被忽略 67
68.
68
69.
getOutputStream() • 取得ServletOutputStream實例,為 OutputStream的子類別 69
70.
70
71.
forward()方法 71
72.
sendRedirect() 72
73.
sendError() 73
74.
微網誌 74