說一下Servlet裏面得request和response
當一個servlet被調用的時候,我們一般繼承帶協議的httpServlet,大方向上是下圖這樣
在這裏面request和response起了什麽作用呢?
來細究一下。
request:
1.封裝了客戶端所有的請求數據:
請求行,請求頭,請求體(get沒體)
2.而當涉及到http協議時,我們還可以利用request獲取協議的信息:
獲取客戶端ip:request.getRemoteAddr()
獲取請求方式:request.getMethod()
獲取http請求頭:
String getHeader(String name) ,適用於單值頭
int getIntHeader(String name),適用於單值int類型的請求頭
long getDateHeader(String name) ,適用於單值毫秒型的請求頭
Enumeration<String> getHeaders(String name) 適用於多只請求頭
獲取請求url
getRequestURL():獲取請求url,等於不包含參數的整個請求路徑
getScheme():獲取請求協議
getServerName():獲取服務器名
getServerPort():獲取服務器端口號
getContextPath():獲取項目名
getServletPath():獲取Servlet路徑
getRequestURI():獲取請求URI,等於項目名加Servlet路徑
getQueryString():獲取請求參數
3.獲取請求參數,請求參數有一個值或多個值的。
String getParameter(String name) 獲取單值參數
String[] getParameterValues(String name) 獲取多值參數
Enumeration<String> getParameterNames() 獲取所有參數名
Map<String,String[]> getParameterMap() 獲取所有參數,key為參數名,value為參數值
4.請求轉發和請求包含
需要使用
RequestDispatcher rd=request.getRequestDispatcher(‘‘/MyServlet‘‘);
請求轉發:rd.forward(request,response);
請求包含:rd.include(request,response):
有時候一個客戶端要求分給A和B兩個Servlet幹同一件事,但是A和B都做不了,A是怎麽做的呢,他和C說,我把這件事給你做,我設置設置響應頭,你把響應體給我寫了,你別告訴頭,然後C做完了把響應體返回給A,A就拿著去交差了,這就是請求轉發;而B呢,他會和C說,我自己做不了這件事,你和我一起做吧,我把響應頭和響應體分分,你寫一些我寫一些,兩者一起做完了,B拿著去交差了,這就是請求包含。
5.request域
在同一個請求內使用request.setAttribute(),request.getAttribute()來傳值,前一個存,後一個取。
response
涉及到http協議時,
1.可以通過response發送狀態碼:200(成功),404(資源未找到),302(轉發重定向,會伴著一個URL一起發送回去),304(瀏覽器有緩存),500(服務器端錯誤)
response.sendErr(int sc)
response.sendErr(int sc,String ms)
response.setStatus(int sc)
2.響應頭
response.setHeader(String name,String value)
response.addHeader(String name,String value)
response.setIntHeader(String name,int value)
response.addIntHeader(String name,int value)
response.setDateHeader(String name,long value)
response.addDateHeader(String name,long value)
3.respone的兩個流
ServletOutputStream:用來向客戶端發送字節數據
PrintWriter:用來向客戶端發送字符數據,需要設置編碼
4.重定向
respone.sendRedirect("地址") 重定向
相當於
response.setHeader("Location","地址");
response.setStatus(302);
說一下Servlet裏面得request和response