1.轉發
作用:在多個頁面交互過程中實現請求數據的共享.
過程:Web服務器內部將一個request請求的處理權交給另外一個資源,屬於同一個訪問請求和響應過程,所以request對象的信息不會丟失.
2.重定向
重定向就是通過各種方法將各種網絡請求重新定個方向轉到其他位置(如:網頁重定向,域名重定向,路由選擇的變化也是對數據報文經有路由的一種重定向.)
重定向使用的是response對象的sendRedirect()方法.
過程:Web服務器向瀏覽器返回的一個響應,瀏覽器接受此響應后再發送一個新的http請求到服務器,這屬於兩次不同的請求,則上一次請求的request信息將丟失.
例:登錄頁面Login:<body>
<form name="form" method="post" action="control.jsp">
用戶名:<input type="text" name="username">
密碼:<input type="password" name="pwd">
<input type="submit" value="登錄">
</form>
</body>
welcome 頁面:<html>
<head><title>歡迎頁面</title></head>
<body>歡迎進入本頁面</body>
</html>
control.jsp頁面:<html>
<head>登錄處理頁面</head>
<body>
<% request.setCharacterEncoding("UTF-8");
String name=request.geyParameter("userName");
String pwd=request.geyParameter("pwd");
if(name.equals("admin")&&pwd.equals("123")){
request.getrequestDispatcher("welcome.jsp").forword(request,reponse);//轉發
}else{
reponse.sendRedirect("Login.jsp");//重定向
}
%>
</body>
</html>
3.重定向和轉發的區別:
<1>重定向和轉發有一個重要的不同:當使用轉發時,JSP容器將使用一個內部的方法來調用目標頁面,新的頁面繼續處理同一個請求,而瀏覽器將不會知道這個過程。 與之相反,重定向方式的含義是第一個頁面通知瀏覽器發送一個新的頁面請求。因為,當你使用重定向時,瀏覽器中所顯示的URL會變成新頁面的URL, 而當使用轉發時,該URL會保持不變。重定向的速度比轉發慢,因為瀏覽器還得發出一個新的請求。同時,由於重定向方式產生了一個新的請求,所以經過一次重定向后,request內的對象將無法使用。
怎么選擇是重定向還是轉發呢?通常情況下轉發更快,而且能保持request內的對象,所以他是第一選擇。但是由於在轉發之后,瀏覽器中URL仍然指向開始頁面,此時如果重載當前頁面,開始頁面將會被重新調用。如果你不想看到這樣的情況,則選擇轉發。
<2>不要僅僅為了把變量傳到下一個頁面而使用session作用域,那會無故增大變量的作用域,轉發也許可以幫助你解決這個問題。
重定向:以前的request中存放的變量全部失效,並進入一個新的request作用域。
轉發:以前的request中存放的變量不會失效,就像把兩個頁面拼到了一起。
<3>轉發是在服務器端發揮作用,通過RequestDispatcher對象的forword()方法將提交信息多個頁面間進行傳遞.重定向是在客戶端發揮作用,通過請求新的地址實現頁面轉向.
4.會話
一個會話就是用戶通過瀏覽器與服務器之間進行的一次通話.
session對象用於存儲特定的用戶會話所需的信息.session對象的引入是為了彌補http協議的不足,http協議是一種無狀態的協議.
session對象的失效方式:超時失效 手動實效
超時失效的實現方式:<1>在頁面中:通過setMaxInactiveInterval()方法設置session的非活動時間 例:<% session.setAttribute("Login","admin"); session.setMaxInactiveInterval(600); response.sendRedirect("admin.jsp"); %>
<2>在項目web.xml中設置. <session-config> <session-timeout>10<session-timeout> </session-config> 10的單位十分鍾,設置0,-1表示永不超時 <3>在應用服務器中設置,在Tomcat目錄/conf/web.xml中找到<session-config>元素,其中<session-timeout>元素中的30就是默認的時間,單位是分鍾,可以修改其值. 手動實效:通過調用invalidate()方法實現,主要應用於用戶注銷場合.但若想清空session中的某個對象,則可以調用session.removeAttribute(String key)方法,將指定的對象從session中清除,session仍然有效.
session對象的常用方法:<1>void setAttribute(String key,Object value) 以key/value的形式將對象保留到session中
<2>Object getAttribute(String key) 通過key獲取session中保存的對象
<3>void invalidate() 設置session對象失效
<4>String getId() 獲取sessionid
<5>void setMaxInactiveInterval(int interval) 設置session的非活動時間
<6>int getMaxInactiveInterval() 獲取session的有效活動時間,以秒為單位
<7>void removeAttribute(String key) 從session中刪除指定名稱(key)所對應的對象