javascript
Head First JSP---随笔二
作為Servlet
Servlet的存在就是為客戶服務
Servlet 技術模型
1.1 對于每一種HTTP方法(如get、post、head等),描述該方法的用途,以及該HTTP方法協議的技術特性,并列出客戶(通常是一個Web瀏覽器)會因為哪些原因使用這種方法,明確對應這種HTTP方法的HttpServlet方法。
1.2 使用HttpServletRequest接口,編寫代碼從請求獲取 HTML 表單參數,獲取HTTP 請求首部信息,或者從請求獲取cookie。
1.3 使用HttpServletResponse接口,編寫代碼設置 HTTP 響應首部,設置響應內容類型,為響應獲得一個文本流,為響應獲得一個二進制流,把一個HTTP 請求重定向到另一個URL,或者向響應 增加cookie 。
1.4 描述serlvet生命周期的作用和事件序列
- serlvet類加載
- servlet實例化
- 調用init()方法
- 調用service方法
- 調用destroy()方法
Serlvet 的生命周期
Servlet 繼承樹
Servlet 生命周期的三大重要時刻
| init() | serlvet實例創建后,并在serlvet能為客戶請求提供服務前,容器要對serlvet調用init() | 使你在serlvet處理客戶請求之前有機會對其初始化 | 有可能 |
| service() | 第一個客戶請求到來是,容器會開始一個新線程,或者從線程池分配一個線程,并調用servlet的service方法 | 這個方法會查看請求,確定HTTP方法(get、post等),并在servlet上調用對應的方法 | 不太可能 |
| doGet()或doPost() | service()方法根據請求的HTTP方法(get、post等)來調用doGet()或doPost | 寫自己的業務邏輯 | 至少覆蓋其中之一 |
注意:是開啟一個service()線程,也就是容器為每一個請求都開啟一個獨立的線程。
構造函數不足以初始化servlet
在調用構造函數和init()方法之間,servlet處在一種薛定諤servlet狀態。如果過早的初始化代碼會導致失敗,所以需要init()方法。
從servlet對象到一個真正的servlet
擁有2樣東西
請求的UML
響應的UML
誰來實現HttpServletRequest和HttpServletResponse接口?這些類在API中嗎?
第一個答案是容器,第二個答案是“不”。
Http方法
| GET | 要求得到所請求URL上的一個東西(資源/文件) |
| POST | 要求服務器接收附加到請求的體信息,并提供所請求URL上的一個東西 |
| HEAD | 只要求得到GET返回結果的首部部分 |
| TRACE | 要求請求消息回送,這樣客戶能看到另一端上接收了什么,以便測試或排錯 |
| PUT | 指出要把所包含信息(體)放在請求的URL上 |
| DELETE | 指出刪除所請求URL上的一個東西(資源/文件) |
| OPTIONS | 要求得到一個HTTP方法列表,所請求URL上的東西可以對這些HTTP方法做出響應 |
| CONNECT | 要求連接以便建立隧道 |
冪等
對于HTTP/servlet來說“冪等”這個這個詞表示同一個請求可以做出兩次,而不會對服務器產生負面影響(所謂的影響可以是更改數據庫中的數據)。
這里指出POST是“非冪等”的,并且可以是GET也成為“非冪等”。
如何使瀏覽器發送POST或者GET
很多種方法,主要方法有:
- form表單中的method屬性設置為相應的方法
- ajax發送相應方法的請求
- a標簽的href默認為get方法
getServerPort()、getLocalPort()和getRemotePort()區別
| 獲得服務器端口 | 獲得service()線程的本地端口 | 獲得客戶端端口 |
復習:servlet生命周期和API
復習:HTTP和HttpServletRequest
HttpServletResponse響應的輸出流
有兩種:
內容類型
//響應一個應用或者jar包給客戶 response.setContentType("application/jar");設置響應首部和增加 響應首部
setHeader(String,String) 會覆蓋現有值
setIntHeader(String,Integer) 會覆蓋現有值
addHeader(String,String) 會增加另外一個值
重定向與請求分派
重定向response.sendRedirect(String url),是返回給客戶端,響應狀態碼會是301。
請求分派request.getRequestDispatcher(String url).forward(request,response),這里的url是發送給服務器,而不是客戶端,響應狀態碼為200。
表示為表格形式:
| 重定向 | 客戶端 | 301 |
| 請求分派 | 服務器 | 200 |
復習:HttpServletResponse
本章完
總結
以上是生活随笔為你收集整理的Head First JSP---随笔二的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国娱乐社交企业出海发展专题报告
- 下一篇: 3D数学基础:图形与游戏开发---随笔一