国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

簡單而明了的轉發與重定向~~~

2019-11-15 00:05:58
字體:
來源:轉載
供稿:網友
簡單而明了的轉發與重定向~~~

重定向和轉發有一個重要的不同:

轉發-----jsp容器將使用一個內部的方法來調用目標頁面,新的頁面繼續處理同一個請求,而瀏覽器將不會知道這個過程。

重定向------是第一個頁面通知瀏覽器發送一個新的頁面請求。此時,瀏覽器中所顯示的URL會變成新頁面的URL, 而轉發時,該URL會保持不變。

重定向的速度比轉發慢,因為瀏覽器還得發出一個新的請求。同時,由于重定向方式產生了一個新的請求,所以經過一次重定向后,request內的對象將無法使用。

怎么選擇是重定向還是轉發呢?

通常情況下轉發更快,而且能保持request內的對象,所以他是第一選擇。

但是由于在轉發之后,瀏覽器中URL仍然指向開始頁面,此時如果重載當前頁面,開始頁面將會被重新調用。

如果你不想看到這樣的情況,則選擇重定向

轉發和重定向的區別

轉發方式

:request.getRequestDispatcher().forward();

重定向方式

:response.sendRedirect();

HttpServletResponse.sendRedirect方法實現的請求重定向與RequestDispatcher.forward方法實現的請求轉發的總結比較:

1.RequestDispatcher.forward方法只能將請求轉發給同一個WEB應用中的組件;而HttpServletResponse.sendRedirect方法不僅可以重定向到當前應用程序中的其他資源,

還可以重定向到同一個站點上的其他應用程序中的資源,甚至是使用絕對URL重定向到其他站點的資源。如果傳遞給HttpServletResponse.sendRedirect方法的相對URL以“/”

開頭,它是相對于整個WEB站點的根目錄;如果創建RequestDispatcher對象時指定的相對URL以“/”開頭,它是相對于當前WEB應用程序的根目錄。

2.調用HttpServletResponse.sendRedirect方法重定向的訪問過程結束后,瀏覽器地址欄中顯示的URL會發生改變,由初始的URL地址變成重定向的目標URL;而調用RequestDispatcher.forward

方法的請求轉發過程結束后,瀏覽器地址欄保持初始的URL地址不變。

3.HttpServletResponse.sendRedirect方法對瀏覽器的請求直接作出響應,響應的結果就是告訴瀏覽器去重新發出對另外一個URL的訪問請求,這個過程好比有個綽號叫“瀏覽器”的人寫信找張三借錢,

張三回信說沒有錢,讓“瀏覽器“去找李四借,并將李四現在的通信地址告訴給了“瀏覽器”。于是,“瀏覽器”又按張三提供通信地址給李四寫信借錢,李四收到信后就把錢匯給了“瀏覽器”。可見,“瀏覽器”

一共發出了兩封信和收到了兩次回復,“瀏覽器”也知道他借到的錢出自李四之手。RequestDispatcher.forward方法在服務器端內部將請求轉發給另外一個資源,瀏覽器只知道發出了請求并得到了響應結果,

并不知道在服務器程序內部發生了轉發行為。這個過程好比綽號叫“瀏覽器”的人寫信找張三借錢,張三沒有錢,于是張三找李四借了一些錢,甚至還可以加上自己的一些錢,然后再將這些錢匯給了“瀏覽器”

。可見,“瀏覽器”只發出了一封信和收到了一次回復,他只知道從張三那里借到了錢,并不知道有一部分錢出自李四之手。

4.RequestDispatcher.forward方法的調用者與被調用者之間共享相同的request對象和response對象,它們屬于同一個訪問請求和響應過程;而HttpServletResponse.sendRedirect方法調用者與被調用者使用各自的

request對象和response對象,它們屬于兩個獨立的訪問請求和響應過程。對于同一個WEB應用程序的內部資源之間的跳轉,特別是跳轉之前要對請求進行一些前期預處理,并要使用HttpServletRequest.setAttribute方法傳遞預處理

結果,那就應該使用RequestDispatcher.forward方法。不同WEB應用程序之間的重定向,特別是要重定向到另外一個WEB站點上的資源的情況,都應該使用HttpServletResponse.sendRedirect方法。

5.無論是RequestDispatcher.forward方法,還是HttpServletResponse.sendRedirect方法,在調用它們之前,都不能有內容已經被實際輸出到了客戶端。如果緩沖區中已經有

了一些內容,這些內容將被從緩沖區中清除。

不要僅僅為了把變量傳到下一個頁面而使用session作用域,那會無故增大變量的作用域,

轉發也許可以幫助你解決這個問題。

重定向:

以前的request中存放的變量全部失效,并進入一個新的request作用域。

轉發:

以前的request中存放的變量不會失效,就像把兩個頁面拼到了一起。

session與Cookie的區別

Cookie和Session有很多相似的地方,都是用來臨時存儲來訪者信息,有很多情況下,使用兩者都可以實現某些特定功能,而兩者的根本區別是Cookie對象將信息存放在客戶端,Session對象存放在服務器端;從生存期上講,Cookie可以長期保存,而Session的生存期僅僅到會話結束; 在asp.net中,網站設計者可以選擇Session的存儲位置,可以存儲在服務器端的內存中,也可以存放在SQL Server數據庫中,若要保存到數據庫中需要在Config.web文件中指明數據庫的位置;還可以將Session保存在狀態服務器中,狀態服務器可以單獨地存放Session對象的內容,即使ASP.NET服務器進程失敗,狀態服務器也可以保存Session信息.默認模式是存放在服務器端內存中.但大量的數據會增加服務器的負荷. Cookie保存在客戶端,用戶可以看到Cookie文件,并能對Cookie文件進行類似修改、刪除的操作,Cookie數據的安全性很難得到保障;而Session數據保存在服務器端,有較好的安全性,若和數據庫配合使用,可以使Session數據長期保持,并得到很好的安全性

session超時時間設置方法

由于session值之前沒有設置,以至于剛登錄的網站,不到一分鐘就超時了,總結了一下,原來是session過期的原因,以下是設置session時間的3個方法:

1. 在tomcat——>conf——>servler.xml文件中定義:

<Context path="/test" docBase="/test"  defaultSessionTimeOut="3600" isWARExpanded="true"  isWARValidated="false" isInvokerEnabled="true"  isWorkDirPersistent="false"/>defaultSessionTimeOut="3600"

2. 在web.xml中定義:

<session-config><session-timeout>20</session-timeout></session-config>

3. 在程序中定義:session.setMaxInactiveInterval(30*60);設置單位為秒,設置為-1永不過期

設置session失效的幾種方法

在系統登錄后,都會設置一個當前session失效的時間,以確保在用戶長時間不與服務器交互,自動退出登錄,銷毀session。具體設置很簡單,方法有三種:(1)在主頁面或者公共頁面中加入:session.setMaxInactiveInterval(900);參數900單位是秒,即在沒有活動15分鐘后,session將失效。這里要注意這個session設置的時間是根據服務器來計算的,而不是客戶端。所以如果是在調試程序,應該是修改服務器端時間來測試,而不是客戶端。(2)也是比較通用的設置session失效時間的方法,就是在項目的web.xml中設置

<!-- 設置session失效,單位分 --><session-config><session-timeout>1</session-timeout></session-config>

(3)直接在應用服務器中設置,如果是tomcat,可以在tomcat目錄下conf/web.xml中找到<session-config>元素,tomcat默認設置是30分鐘,只要修改這個值就可以了。

需要注意的是如果上述三個地方如果都設置了,有個優先級的問題,從高到低:(1)>(2)>(3)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汝州市| 新巴尔虎右旗| 芮城县| 二连浩特市| 龙井市| 克东县| 玉山县| 无极县| 丘北县| 莱西市| 修武县| 子长县| 密云县| 集贤县| 平乡县| 育儿| 唐海县| 赤城县| 静宁县| 子洲县| 龙南县| 甘肃省| 阿拉善盟| 囊谦县| 衡阳县| 达日县| 烟台市| 肥城市| 富民县| 玛沁县| 彩票| 康马县| 宁陵县| 永州市| 韶山市| 枞阳县| 禹州市| 翁源县| 盐津县| 平塘县| 睢宁县|