JavaWeb response和request對象原理及實例解析
HttpServletResponse:
HttpServletResponse對象服務(wù)器的響應(yīng)。這個對象中封裝了向客戶端發(fā)送數(shù)據(jù)、發(fā)送響應(yīng)頭,發(fā)送響應(yīng)狀態(tài)碼的方法。
字符編碼格式:
方法一:
// 設(shè)置response使用的碼表,控制response向瀏覽器寫出數(shù)據(jù)的碼表
response.setCharacterEncoding("UTF-8");
// 指定瀏覽器打開客戶端發(fā)送數(shù)據(jù)的碼表
response.setHeader("content-type", "text/html;charset=UTF-8");
方法二:
response.setContentType("text/html;charset=UTF-8");
用refresh控制瀏覽器定時刷新
response.setHeader("refresh","3;url='/項目名/網(wǎng)頁名'");//3代表3s以后刷新
用expires頭控制瀏覽器緩存
response.setDateHeader("expires",System.currentTimeMillis()+1000*3600);
請求重定向
response.sendRedirect("地址");
response細節(jié)
- getOutputStream和getWriter方法分別用于得到輸出二進制數(shù)據(jù)、輸出文本數(shù)據(jù)的ServletOuputStream、Printwriter對象。
- getOutputStream和getWriter這兩個方法互相排斥,調(diào)用了其中的任何一個方法后,就不能再調(diào)用另一方法。
- Servlet程序向ServletOutputStream或PrintWriter對象中寫入的數(shù)據(jù)將被Servlet引擎從response里面獲取,Servlet引擎將這些數(shù)據(jù)當作響應(yīng)消息的正文,然后再與響應(yīng)狀態(tài)行和各響應(yīng)頭組合后輸出到客戶端。
- Serlvet的service方法結(jié)束后,Servlet引擎將檢查getWriter或getOutputStream方法返回的輸出流對象是否已經(jīng)調(diào)用過close方法,如果沒有,Servlet引擎將調(diào)用close方法關(guān)閉該輸出流對象。
HttpServletRequest
HttpServletRequest對象代表客戶端的請求,當客戶端通過HTTP協(xié)議訪問服務(wù)器時,HTTP請求頭中的所有信息都封裝在這個對象中,開發(fā)人員通過這個對象的方法,可以獲得客戶這些信息。
獲得客戶機信息:
- getRequestURL() //返回客戶端發(fā)出請求時的完整URL
- getRequestURI() //返回請求行中的資源名部分
- getQueryString() //方法返回請求行中的參數(shù)部分
- getPathInfo() //返回請求URL中的額外路徑信息。額外路徑信息是請求URL中的位于Servlet的路徑之后和查詢參數(shù)之前的內(nèi)容,它以“/”開頭
- getRemoteAddr() //返回發(fā)出請求的客戶機的IP地址
- getRemoteHost() //返回發(fā)出請求的客戶機的完整主機名
- getRemotePort() //返回客戶機所使用的網(wǎng)絡(luò)端口號
- getLocalAddr() //返回WEB服務(wù)器的IP地址
- getLocalName() //返回WEB服務(wù)器的主機名
獲得客戶機請求頭
getHeader(String name)
getHeaders()
getHeaderNames()
獲得客戶機請求參數(shù)(客戶端提交的數(shù)據(jù))
getParameter(String name)
getParameterValues(String name)
getParameterNames()
getParameterMap()
request亂碼
// post提交亂碼
request.setCharacterEncoding("UTF-8");
// get提交亂碼
String username = request.getParameter("username");
username = new String(username.getBytes("iso8859-1"), "UTF-8");
request頁面轉(zhuǎn)發(fā)
request.getRequestDispatcher("地址").forward(request,response);
request對象同時也是一個域?qū)ο?,開發(fā)人員通過request對象在實現(xiàn)轉(zhuǎn)發(fā)時,把數(shù)據(jù)通過request對象帶給其它web資源處理。
setAttribute(String name,Object obj)
getAttribute(String name)
removeAttribute(String name)
getAttributeNames()
注意
- forward方法用于將請求轉(zhuǎn)發(fā)到RequestDispatcher對象封裝的資源。
- 如果在調(diào)用forward方法之前,在Servlet程序中寫入的部分內(nèi)容已經(jīng)被真正地傳送到了客戶端,forward方法將拋出IllegalStateException異常。
- 如果在調(diào)用forward方法之前向Servlet引擎的緩沖區(qū)中寫入了內(nèi)容,只要寫入到緩沖區(qū)中的內(nèi)容還沒有被真正輸出到客戶端,forward方法就可以被正常執(zhí)行,原來寫入到輸出緩沖區(qū)中的內(nèi)容將被清空,但是,已寫入到HttpServletResponse對象中的響應(yīng)頭字段信息保持有效。
include方法
request.getRequestDispatcher("地址").include(request,response);
RequestDispatcher.include方法用于將RequestDispatcher對象封裝的資源內(nèi)容作為當前響應(yīng)內(nèi)容的一部分包含進來,從而實現(xiàn)可編程的服務(wù)器端包含功能。
被包含的Servlet程序不能改變響應(yīng)消息的狀態(tài)碼和響應(yīng)頭,如果它里面存在這樣的語句,這些語句的執(zhí)行結(jié)果將被忽略
請求重定向和請求轉(zhuǎn)發(fā)
RequestDispatcher.forward方法只能將請求轉(zhuǎn)發(fā)給同一個WEB應(yīng)用中的組件;而HttpServletResponse.sendRedirect 方法還可以重定向到同一個站點上的其他應(yīng)用程序中的資源,甚至是使用絕對URL重定向到其他站點的資源。
如果傳遞給HttpServletResponse.sendRedirect 方法的相對URL以“/”開頭,它是相對于整個WEB站點的根目錄;如果創(chuàng)建RequestDispatcher對象時指定的相對URL以“/”開頭,它是相對于當前WEB應(yīng)用程序的根目錄。
RequestDispatcher.forward方法的調(diào)用者與被調(diào)用者之間共享相同的request對象和response對象,它們屬于同一個訪問請求和響應(yīng)過程;而HttpServletResponse.sendRedirect方法調(diào)用者與被調(diào)用者使用各自的request對象和response對象,它們屬于兩個獨立的訪問請求和響應(yīng)過程。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Cloud Hystrix 服務(wù)容錯保護的原理實現(xiàn)
這篇文章主要介紹了Spring Cloud Hystrix 服務(wù)容錯保護的原理實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-05-05使用Filter攔截器如何實現(xiàn)請求跨域轉(zhuǎn)發(fā)
這篇文章主要介紹了使用Filter攔截器如何實現(xiàn)請求跨域轉(zhuǎn)發(fā),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08Java 創(chuàng)建動態(tài)類和查看方法列表信息的實例
這篇文章主要介紹了 Java 創(chuàng)建動態(tài)類和查看方法列表信息的實例的相關(guān)資料,需要的朋友可以參考下2017-06-06Java泛型T,E,K,V,N,?與Object區(qū)別和含義
Java?泛型(generics)是?JDK?5?中引入的一個新特性,?泛型提供了編譯時類型安全檢測機制,該機制允許程序員在編譯時檢測到非法的類型。本文將詳細講講Java泛型T、E、K、V、N、?和Object區(qū)別和含義,需要發(fā)可以參考一下2022-03-03