Servlet獲得Http請求
Http請求信息格式
請求行(方法提交方式,URI,Http協議版本)
GET方式提交:URI會包含查詢字符串
POST方式提交:URI不會包含查詢字符串
請求頭
Host:IP地址:端口號
User-Agent:用戶網頁瀏覽器類型
Accept:請求提交的文件包含類型
Keep-Alive:保持連接時間
空行(空格)
消息體
POST提交方式特有,包含查詢字符串
get與post的區別
提交數據類型
get:文本信息
post:文本信息,二進制文件
提交數據長度
get:不超過255個字符
post:無限制
提交數據可見性
get:作為URL地址的一部分,顯示在瀏覽器地址欄
post:作為請求的消息體,不可見
提交數據緩存
get:緩存在瀏覽器URL歷史狀態中
post:不會被瀏覽器緩存
獲得請求信息
請求頭
getMethod():獲得請求提交方法
getRequestURI():獲得URI資源(僅端口號后面的部分內容,不包括協議名、主機名、端口號)
getRequestURL():獲得URL資源
getQueryString():獲得請求URL后面的查詢字符串
getContextPath():獲得請求URI資源上下文路徑
getServletPath():獲得Servlet的映射路徑(如/ccb.do)
請求行
getHeader("參數"):獲取請求行消息類型
User-Agent:瀏覽器版本
Host:訪問IP地址
Keep-Alive:連接時間(生存時間)
消息體
getParameter(parameterName)獲得表單參數的值
getParameterValues(parameterName)獲得同名表單參數的值
文件上傳
原理:將文件在表單中以二進制流方式裝入提交信息傳送至Web服務器
操作步驟
將表單傳輸方式設置為二進制流enctype="multipart/form-data"
HttpServletRequest對象調用getInputStream()獲得請求輸入流
Servlet解析流,通過HttpServletResponse的對象調用getOutputStream(),持久化為對應類型文件
請求轉發
原理:客戶端只發一次請求,服務器自動將新連接轉接到用戶想要的位置,最后斷開連接
request.getRequestDispatcher("文件路徑或URL")獲得對話
轉發
response.forward(ServletRequest,ServletResponse)轉發完成服務器關閉連接,僅包含轉接后內容
response.include(ServletRequest,ServletResponse)轉發完成保持服務器連接,包含轉接前和轉接后內容
可使用request.setAttribute()和request.getAttribute()獲得請求作用域
與請求重定向的區別
請求重定向使用HttpServletResponse的方法;內部轉發使用HttpServletRequest的方法
請求重定向客戶端向服務器發送了2次請求,由客戶端實現; 內部轉發客戶端只發送1次請求,轉發過程由服務器端實現
請求重定向URL地址顯示的是第二次請求的地址,無法獲得請求作用域;內部轉發URL地址顯示的是服務器URL地址,可獲得請求作用域存取對象