1.會話信息保存在服務器內存上,可以斷續訪問,和cookie相比,其保存在服務器上。
2.男人就像藍牙:只有在你接近時,他才會找上你。當你離開后,他便又去找其他的“設備”了。女人就像Wi-Fi:她能看到周圍所有的“設備”,但只選擇強壯的那個“接入”。
3.會話關閉:瀏覽器關閉,主動關閉,會話超時
4.會話底層實現:cookie和url重寫(保存的是sessionID,就是調用response.encodeURL,那么自動加上id)
5.session里有創建時間和最后訪問時間,不同於cookie(還得自己寫),不過返回的是毫秒數,那么new Date(方法)
6.javabean的類必須是public的,否則不能訪問的!!!一定要用public申明
7.BeanUtils主要提供了對於JavaBean進行各種操作。
8.forward是服務器轉發,在servlet內部,而sendRedirect是重定向(通過瀏覽器)。
- forward轉發是在容器內部實現的同一個Web應用程序的之間的轉發,所以forward方法只能重定向到同一個Web應用程序中的一個資源,重定向后瀏覽器地址欄URL不變,而sendRedirect方法可以重定向到任何URL, 因為這種方法是修改http頭來實現的,URL沒什么限制,重定向后瀏覽器地址欄URL改變。
- forward重定向將原始的HTTP請求對象(request)從一個servlet實例傳遞到另一個實例,而采用sendRedirect方式兩者不是同一個application。
- 基於第二點,參數的傳遞方式不一樣。forward的form參數跟着傳遞,所以在第二個實例中可以取得HTTP請求的參數。sendRedirect只能通過鏈接傳遞參數,response.sendRedirect(“login.jsp?param1=a”)。 使用forward重定向的過程,是瀏覽器先向目的Servlet發送一次Request請求,然后再服務器端由Servlet再將請求發送到目的url,再由服務器端Servlet返回Response到瀏覽器端。瀏覽器和服務器一次請求響應(3次操作)。使用sendRedirect轉發的過程,瀏覽器先向目的Servlet發送一次請求,Servlet看到sendRedirect將目的url返回到瀏覽器,瀏覽器再去請求目的url,目的url再返回response到瀏覽器。瀏覽器和服務器兩次請求響應(四次操作)。可以看出哪種方式稍快一些。
forward方法報錯: java.lang.IllegalStateException: Cannot forward after response has been committed
sendRedirect報錯:java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435)
再來看一個具體例子!!!參考:http://zhaoyuqiang.blog.51cto.com/6328846/1132795
<html><head><title>web</title></head><body><h1>我的技術博客:http://zhaoyuqinag.blog.51cto.com</h1></body></html>
<%@ page language="java" contentType="text/html" pageEncoding="gbk" %><html><head><title>web</title></head><body><%System.out.println("====forward跳轉之前=========");%><jsp:forward page="turnAfter.html"/><%System.out.println("====forward跳轉之后=========");%></body></html>
運行一下,看瀏覽器的結果,的確是跳轉了,但是地址欄並沒有發生改變,更有趣的是看一下服務器的結果,如下圖所示:
根據結果顯示,只有跳轉之前,而沒有跳轉之后。我們再來看另一種跳轉方式會怎么樣。
<%@ page language="java" contentType="text/html" pageEncoding="gbk" %><html><head><title>web</title></head><body><%System.out.println("====response跳轉之前=========");%><% response.sendRedirect("turnAfter.html");%><%System.out.println("====response跳轉之后 =========");%></body></html>
運行一下,看一下服務器的結果如下:
可以看出forward屬於無條件的跳轉。跳轉之前的語句會執行,而跳轉之后的語句將不會執行,那么如果現在在jsp中使用了JDBC的話,很明顯必須子啊跳轉之前進行數據庫的關閉,否則數據庫就再也無法關閉了;sendredirect跳轉是在所有語句都執行完之后才完成的操作。


