request和response概念用法


一、請求重定向和請求轉發的區別

1. RequestDispatcher.forward方法只能將請求轉發給同一個WEB應用中的組件;而HttpServletResponse.sendRedirect 方法還可以重定向到同一個站點上的其他應用程序中的資源,甚至是使用絕對URL重定向到其他站點的資源。

2. 如果傳遞給HttpServletResponse.sendRedirect 方法的相對URL以“/”開頭,它是相對於服務器的根目錄;如果創建RequestDispatcher對象時指定的相對URL以“/”開頭,它是相對於當前WEB應用程序的根目錄。

3. 調用HttpServletResponse.sendRedirect方法重定向的訪問過程結束后,瀏覽器地址欄中顯示的URL會發生改變,由初始的URL地址變成重定向的目標URL;調用RequestDispatcher.forward 方法的請求轉發過程結束后,瀏覽器地址欄保持初始的URL地址不變。

4. HttpServletResponse.sendRedirect方法對瀏覽器的請求直接作出響應,響應的結果就是告訴瀏覽器去重新發出對另外一個URL的訪問請求;RequestDispatcher.forward方法在服務器端內部將請求轉發給另外一個資源,瀏覽器只知道發出了請求並得到了響應結果,並不知道在服務器程序內部發生了轉發行為。

5. RequestDispatcher.forward方法的調用者與被調用者之間共享相同的request對象和response對象,它們屬於同一個訪問請求和響應過程;而HttpServletResponse.sendRedirect方法調用者與被調用者使用各自的request對象和response對象,它們屬於兩個獨立的訪問請求和響應過程。

附圖:

二、response請求實現重定向

代碼:response.sendRedict("/day5/response/demo2.html");

注意,在發生請求重定向時有如下的特點:

 1. 瀏覽器的地址欄發生了變化,指向了另外一地址。

 2. 在這個過程中,發送了兩次http請求,大家可以通過抓包工具httpWatch觀察到。

三、refresh完成自動刷新頁面

 

1. refresh 格式: 時間();url=跳轉頁面路徑

例如: response.setHeader("refresh", "5;url=/day6/hello.html"); === 生成響應頭信息中

例如: response.setHeader("refresh", "5"); 在原頁面每5秒刷新一次

2. HTMLmeta標簽,可以產生Http響應頭信息相同效果 

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

//http-equiv 響應頭信息name

//content 響應頭信息value 

例如: <meta http-equiv="refresh" content="5;url=/day6/hello.html" /> === 生成響應體中

讀秒JavaScript效果 

        var i = 5;

function init(){

  document.getElementById("mytimes").innerHTML = i;

  // 每隔1秒重復調用 init方法 i-- 

  i--;

  // 通過window 內置對象 setTimeOut 完成每隔1秒重復調用

  indow.setTimeout("init();", 1000);

}

總結

refresh用來實現定時刷新,一般用在股票頁面,用來定時的刷新頁面,實現實時更新。

四、禁用瀏覽器緩存

需求:對於一些動態數據,很多時候我們希望每當用戶在瀏覽器地址欄敲了回車之后,就可以看到最新的數據,但是很多時候,瀏覽器會自動的幫你去緩存該數據。

這個時候就要用到這三個http響應頭來實現禁用瀏覽器緩存。

存放緩存文件夾: 工具---internet選項 --- 設置 --- 查看文件 

  response.setHeader("Cache-Control", "no-cache");

  response.setHeader("Pragma", "no-cache");

  response.setDateHeader("Expires", -1);

//這三個頭,一般用在實時性比較高的頁面或網站,主要為了通知瀏覽器來不要緩存。

注意:禁用瀏覽器緩存,有這樣三個頭,主要是因為目前市場上存在的瀏覽器比較多,不同的瀏覽器支持的禁用緩存的頭也不一樣,所以就出現這么幾個,所以為了保險起見,一般將這三個頭都設置上,那么就可以保證所有的瀏覽器都不會緩存該頁面的內容了。

五、解決亂碼問題

1. 當請求方式為post的情況:

問題原因:

客戶端的請求參數會傳遞給服務器,那么在數據在網絡上傳送時,客戶端提交的參數值就必須要轉換成二進制,服務器端收到了請求后,獲得客戶端的請求參數,那么服務器端就必定要將拿到的二進制轉換成相應的字符。這個時候,如何發送的數據有中文,就會出現亂碼的情況。

解決方案:

response.setContentType("text/html;charset=utf-8");

設置字符集代碼 必須要位於getWriter/ getOutputStream 之前

2. 當請求方式為get的情況:

問題原因:

首先我們知道,在get請求方式下,客戶端提交過來的數據是跟在url地址后的,那么這個時候對於提交的中文數據會對其url進行編碼。大家上網的時候經常會看到這樣的情況,例如你去淘寶購物。

注意:我們注意到,剛剛在將post方式時,只需要設置 request.setCharacaterEncoding(“UTF-8”) 就可以了,但是現在由於數據是跟在url地址后的,所以調用這個api不能解決問題。

解決方案:

方案1

反向去查utf-8編碼,這樣轉回去,就可以得到原始的字符了,默認的情況下拿到的字符是亂碼的,會查 iso-8859-1.

username = URLEncoder.encode(username, "ISO-8859-1");

username = URLDecoder.decode(username, "utf-8");

可以簡化為

username = new String(username.getBytes("ISO-8859-1"),"utf-8");

方案2

修改server.xml 

    <Connector port="80" protocol="HTTP/1.1" 

               connectionTimeout="20000" 

               redirectPort="8443" URIEncoding="utf-8"/>

必須有修改tomcat服務器配置文件權限 

六、URIURL區別 

URI,是uniform resource identifier,統一資源標識符,用來唯一的標識一個資源。

而URL是uniform resource locator,統一資源定位器,它是一種具體的URI,即URL可以用來標識一個資源,而且還指明了如何locate這個資源。

總結一下:URL是一種具體的URI,它不僅唯一標識資源,而且還提供了定位該資源的信息。URI是一種語義上的抽象概念,可以是絕對的,也可以是相對的,而URL則必須提供足夠的信息來定位,所以,是絕對的,而通常說的relative URL,則是針對另一個absolute URL,本質上還是絕對的

 7.防盜鏈技術

需求:阻止其他的網站直接掛連接可以訪問到 本網站的熱門資源 。

原理:通過在訪問的時候獲得referer請求頭信息來實現判斷

 

代碼實現

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM