1.轉(zhuǎn)發(fā)作用:在多個頁面交互過程中實現(xiàn)請求數(shù)據(jù)的共享. 過程:Web服務(wù)器內(nèi)部將一個request請求的處理權(quán)交給另外一個資源,屬于同一個訪問請求和響應(yīng)過程,所以request對象的信息不會丟失.
2.重定向 重定向就是通過各種方法將各種網(wǎng)絡(luò)請求重新定個方向轉(zhuǎn)到其他位置(如:網(wǎng)頁重定向,域名重定向,路由選擇的變化也是對數(shù)據(jù)報文經(jīng)有路由的一種重定向.) 重定向使用的是response對象的sendRedirect()方法. 過程:Web服務(wù)器向瀏覽器返回的一個響應(yīng),瀏覽器接受此響應(yīng)后再發(fā)送一個新的http請求到服務(wù)器,這屬于兩次不同的請求,則上一次請求的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);//轉(zhuǎn)發(fā)
}else{
reponse.sendRedirect("Login.jsp");//重定向
}
%>
</body>
</html>
3.重定向和轉(zhuǎn)發(fā)的區(qū)別:<1>重定向和轉(zhuǎn)發(fā)有一個重要的不同:當使用轉(zhuǎn)發(fā)時,JSP容器將使用一個內(nèi)部的方法來調(diào)用目標頁面,新的頁面繼續(xù)處理同一個請求,而瀏覽器將不會知道這個過程。 與之相反,重定向方式的含義是第一個頁面通知瀏覽器發(fā)送一個新的頁面請求。因為,當你使用重定向時,瀏覽器中所顯示的URL會變成新頁面的URL, 而當使用轉(zhuǎn)發(fā)時,該URL會保持不變。重定向的速度比轉(zhuǎn)發(fā)慢,因為瀏覽器還得發(fā)出一個新的請求。同時,由于重定向方式產(chǎn)生了一個新的請求,所以經(jīng)過一次重定向后,request內(nèi)的對象將無法使用。 怎么選擇是重定向還是轉(zhuǎn)發(fā)呢?通常情況下轉(zhuǎn)發(fā)更快,而且能保持request內(nèi)的對象,所以他是第一選擇。但是由于在轉(zhuǎn)發(fā)之后,瀏覽器中URL仍然指向開始頁面,此時如果重載當前頁面,開始頁面將會被重新調(diào)用。如果你不想看到這樣的情況,則選擇轉(zhuǎn)發(fā)。 <2>不要僅僅為了把變量傳到下一個頁面而使用session作用域,那會無故增大變量的作用域,轉(zhuǎn)發(fā)也許可以幫助你解決這個問題。重定向:以前的request中存放的變量全部失效,并進入一個新的request作用域。轉(zhuǎn)發(fā):以前的request中存放的變量不會失效,就像把兩個頁面拼到了一起。<3>轉(zhuǎn)發(fā)是在服務(wù)器端發(fā)揮作用,通過RequestDispatcher對象的forword()方法將提交信息多個頁面間進行傳遞.重定向是在客戶端發(fā)揮作用,通過請求新的地址實現(xiàn)頁面轉(zhuǎn)向.
4.會話
一個會話就是用戶通過瀏覽器與服務(wù)器之間進行的一次通話.
session對象用于存儲特定的用戶會話所需的信息.session對象的引入是為了彌補http協(xié)議的不足,http協(xié)議是一種無狀態(tài)的協(xié)議.
session對象的失效方式:超時失效 手動實效
超時失效的實現(xiàn)方式:<1>在頁面中:通過setMaxInactiveInterval()方法設(shè)置session的非活動時間 例:<% session.setAttribute("Login","admin"); session.setMaxInactiveInterval(600); response.sendRedirect("admin.jsp"); %>
<2>在項目web.xml中設(shè)置. <session-config> <session-timeout>10<session-timeout> </session-config> 10的單位十分鐘,設(shè)置0,-1表示永不超時 <3>在應(yīng)用服務(wù)器中設(shè)置,在Tomcat目錄/conf/web.xml中找到<session-config>元素,其中<session-timeout>元素中的30就是默認的時間,單位是分鐘,可以修改其值. 手動實效:通過調(diào)用invalidate()方法實現(xiàn),主要應(yīng)用于用戶注銷場合.但若想清空session中的某個對象,則可以調(diào)用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>voidinvalidate() 設(shè)置session對象失效
<4>String getId() 獲取sessionid
<5>void setMaxInactiveInterval(int interval) 設(shè)置session的非活動時間
<6>int getMaxInactiveInterval() 獲取session的有效活動時間,以秒為單位
<7>void removeAttribute(String key) 從session中刪除指定名稱(key)所對應(yīng)的對象
新聞熱點
疑難解答