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. HTML中meta標籤,能夠產生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、URI和URL區別
URI,是uniform resource identifier,統一資源標識符,用來惟一的標識一個資源。
而URL是uniform resource locator,統一資源定位器,它是一種具體的URI,即URL能夠用來標識一個資源,並且還指明瞭如何locate這個資源。
總結一下:URL是一種具體的URI,它不只惟一標識資源,並且還提供了定位該資源的信息。URI是一種語義上的抽象概念,能夠是絕對的,也能夠是相對的,而URL則必須提供足夠的信息來定位,因此,是絕對的,而一般說的relative URL,則是針對另外一個absolute URL,本質上仍是絕對的。
7.防盜鏈技術
需求:阻止其餘的網站直接掛鏈接能夠訪問到 本網站的熱門資源 。
原理:經過在訪問的時候得到referer請求頭信息來實現判斷。
代碼實現: