更新時(shí)間:2019年01月10日13時(shí)35分 來源:傳智播客 瀏覽次數(shù):
Servlet體系結(jié)構(gòu)
Servlet
|
GenericServlet -->抽象類
|
HttpServlet -->抽象類
HTTP
概念: hyper Text Transfer Protocol 超文本傳輸協(xié)議
傳輸協(xié)議: 定義了客戶端和服務(wù)器端通信時(shí),發(fā)送數(shù)據(jù)格式
特點(diǎn):
基于TCP/IP的高級(jí)協(xié)議
默認(rèn)端口號(hào):80
基于請(qǐng)求響應(yīng)模型的,一次請(qǐng)求一次響應(yīng)
無狀態(tài) :每次請(qǐng)求之間相互獨(dú)立,不能交互數(shù)據(jù)
歷史版本
1.0
1.1: SPDY協(xié)議
請(qǐng)求消息數(shù)據(jù)格式
請(qǐng)求行
請(qǐng)求方式 請(qǐng)求url 請(qǐng)求協(xié)議/版本
請(qǐng)求方式
GET
請(qǐng)求參數(shù)在請(qǐng)求行,在url后
請(qǐng)求的url有限制
不安全
POST
請(qǐng)求參數(shù)在請(qǐng)求體中
請(qǐng)求的url沒有限制
相對(duì)安全
請(qǐng)求頭
請(qǐng)求頭名稱: 請(qǐng)求頭值
User-Agent: 瀏覽器告訴服務(wù)器,我訪問你使用的瀏覽器版本信息
可以在服務(wù)器端獲取該頭信息,解決瀏覽器兼容問題
Referer
告訴服務(wù)器,我(當(dāng)前請(qǐng)求)從哪里來
作用
防盜鏈:
統(tǒng)計(jì)
content-tyoe
請(qǐng)求空行
空行
作為請(qǐng)求頭和請(qǐng)求體的分隔
請(qǐng)求體
請(qǐng)求參數(shù)(post)
Request(發(fā)送數(shù)據(jù)到服務(wù)器)
request和response對(duì)象是由服務(wù)器創(chuàng)建的.我們阿里使用它們
request對(duì)象是獲取請(qǐng)求信息的,response對(duì)象是來設(shè)置響應(yīng)消息的
request和response對(duì)象是由服務(wù)器(TomCat)在瀏覽器訪問服務(wù)器時(shí)創(chuàng)建的
獲取請(qǐng)求消息數(shù)據(jù)
獲取請(qǐng)求行數(shù)據(jù)
方法
獲取請(qǐng)求方式
String getMethod()
***獲取虛擬路徑
String getContextPath()
獲取Servlet路徑
String getServletPath()
獲取get方式請(qǐng)求參數(shù):
String getQueryString()
***獲取請(qǐng)求URI
String getRequestURI()
String getRequestURL()
獲取請(qǐng)求頭數(shù)據(jù)
String getHeader(String name)通過頭名稱獲取對(duì)應(yīng)的值
Enumeration(String) getHeaderNames 獲取所有請(qǐng)求頭的名稱
hub~
獲取請(qǐng)求體數(shù)據(jù)
請(qǐng)求體 :只有post請(qǐng)求方式中,才有請(qǐng)求體,在請(qǐng)求體中封裝了post請(qǐng)求的請(qǐng)求參數(shù)
BufferedReader getR() 獲取字符輸入流
InPutStream getInPutStream() 獲取字節(jié)輸入流
獲取請(qǐng)求參數(shù)通用方式
String getParameter(String name) 根據(jù)參數(shù)名稱獲取參數(shù)值
String[] getgetParameterValues(String name) 根據(jù)參數(shù)名稱獲取參數(shù)值數(shù)組
Enumeration(String) getParameterNames() 獲取所有請(qǐng)求的參數(shù)名稱
Map
中文亂碼問題
get方式:tomcat已經(jīng)將get方式亂碼問題解決
post方式: 會(huì)亂碼
解決
request.setCharacterEncoding(編碼格式)
請(qǐng)求轉(zhuǎn)發(fā)
一種在服務(wù)器內(nèi)部資源跳轉(zhuǎn)方式
步驟
通過request對(duì)象獲取請(qǐng)求轉(zhuǎn)發(fā)器
RequstDispatcher getRequstDispatcher(String Path)
使用RequstDispatcher對(duì)象調(diào)用forward方法實(shí)現(xiàn)資源跳轉(zhuǎn)
RequstDispatcher.forward()
特點(diǎn)
瀏覽器地址欄路徑不變
只能訪問服務(wù)器內(nèi)部資源
請(qǐng)求轉(zhuǎn)發(fā)只有一次請(qǐng)求
ps:服務(wù)器內(nèi)部資源千萬不要攜帶虛擬路徑
共享數(shù)據(jù)
域?qū)ο?/p>
一個(gè)有作用范圍的對(duì)象,可以再范圍內(nèi)共享數(shù)據(jù)
request域:代表一次請(qǐng)求的范圍.一般用于請(qǐng)求的多個(gè)資源中共享數(shù)據(jù)
方法
setAttitude(String name, Object obj) 存儲(chǔ)數(shù)據(jù)
getAttitude(String name) 通過鍵獲得值
removeAttitude(String name) 通過鍵刪除鍵值對(duì)
獲取ServletContext
request.getServletContext()
絕對(duì)路徑
基于服務(wù)器的絕對(duì)路徑
/開頭的代表絕對(duì)路徑
.或者..開頭代表相對(duì)路徑
域?qū)ο?/p>
ServletContext 服務(wù)器啟動(dòng)時(shí)創(chuàng)建,關(guān)閉時(shí)銷毀,僅限當(dāng)前項(xiàng)目
HttpSession 一次回話
HttpServletRequest 一次請(qǐng)求
PageContext 當(dāng)前頁面
首發(fā):http://java.itcast.cn
北京校區(qū)