request和response概念用法

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

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

2. 若是傳遞給HttpServletResponse.sendRedirect 方法的相對URL以「/」開頭,它是相對於服務器的根目錄;若是建立RequestDispatcher對象時指定的相對URL以「/」開頭,它是相對於當前WEB應用程序的根目錄。瀏覽器

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

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

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

附圖:網絡

2、response請求實現重定向ide

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

注意,在發生請求重定向時有以下的特色:post

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

 2. 在這個過程當中,發送了兩次http請求,你們能夠經過抓包工具httpWatch觀察到。

3、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用來實現定時刷新,通常用在股票頁面,用來定時的刷新頁面,實現實時更新。

4、禁用瀏覽器緩存

需求:對於一些動態數據,不少時候咱們但願每當用戶在瀏覽器地址欄敲了回車以後,就能夠看到最新的數據,可是不少時候,瀏覽器會自動的幫你去緩存該數據。

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

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

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

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

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

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

注意:禁用瀏覽器緩存,有這樣三個頭,主要是由於目前市場上存在的瀏覽器比較多,不一樣的瀏覽器支持的禁用緩存的頭也不同,因此就出現這麼幾個,因此爲了保險起見,通常將這三個頭都設置上,那麼就能夠保證全部的瀏覽器都不會緩存該頁面的內容了。

5、解決亂碼問題

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服務器配置文件權限 

6、URIURL區別 

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

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

總結一下:URL是一種具體的URI,它不只惟一標識資源,並且還提供了定位該資源的信息。URI是一種語義上的抽象概念,能夠是絕對的,也能夠是相對的,而URL則必須提供足夠的信息來定位,因此,是絕對的,而一般說的relative URL,則是針對另外一個absolute URL,本質上仍是絕對的

 7.防盜鏈技術

需求:阻止其餘的網站直接掛鏈接能夠訪問到 本網站的熱門資源 。

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

 

代碼實現

相關文章
相關標籤/搜索