探討下request的生命周期


1)如果使用request.getRequestDispatcher().forward() 這種方式進行跳轉頁面,前后頁面共享一個request,存儲在request里面的數據也會一起發送過去下一個頁面, 。
2)如果用response.sendRedirect()是重新定向,前后頁面不是一個request。

你在頁面中寫的request,當這個jsp頁面被servlet容器編譯成servlet,再生成html流,通過response輸出到前端時生命周期才算結束,你的request在編譯、執行期間都是有效的,這次請求響應的周期直到response.write才算結束。不要弄混淆,你寫的JSP和用戶在前端看到的並不是同一個東西,JSP只是腳本,用戶看到的是腳本解釋執行后輸出的結果

 

這次請求響應的周期直到response.write才算結束"-----你的意思是當響應完成request才消失
是的,否則怎么能稱為請求-響應。你在JSP中寫的request,並沒有脫離這次請求的服務端,JSP中的變量、標簽等等都會在服務端解釋完后再write到客戶端,這才算響應完成
你可以設置request里面的數據存活時間。Request.setTime("httpwwwzhishajihaocom",1232322);

 當從一個jsp發出一個request,即表明了這個request生命周期的開始,當到達action之后一般有兩種處理request的方式,一種為request.getDispatcher.forward,一種是response.sendRedirect.
對於request的forward,該request的生命周期將會繼續延續下去,當采用forward如果到達JSP頁面,那么之前從第一個JSP頁面中發送出來的request的消息將仍然存在,新的頁面同樣能夠取得該request里所包含的一些信息,比如之前的JSP發送request中所包含的參數信息.事實上,它們是同一個request.

而如果是使用response.sendRedirect那么該request的生命周期將結束.

     對於request,對request信息的傳遞,只有setAttribute()這一個方法,該方法將設置一個Object對象到request中.
但是,如果當一個request是從jsp從發出,包含的信息段為param1=test這樣的方式,那么只能通過getParameter()得到,getAttribute()是得不到param1的value的.
     再次,對於JSP的EL表達式,${}這中方式只能得到setAttribute中的值,因此當從一個JSP發送request到達action並且被forward到新的JSP中時,如果想在該JSP中取得JSP發送時的參數信息需要寫為這種形式:${param.patam1}.



我們都知道jsp中傳值 會涉及到 request,session,application這三個容器。
當我們想做一些緩存或者存儲一些全局變量時,就要考慮到它們的生命周期。
我們也有會疑惑一台計算機上打開同一WEB應用是否只產生一個session?

我們可以做對比了解:

application
全局作用范圍,整個應用程序共享,就是在部署文件中的同一個webApp共享,生命周期為:應用程序啟動到停止。

 

session
會話作用域,當用戶首次訪問時,產生一個新的會話,以后服務器就可以記住這個會話狀態。生命周期:會話超時,或者服務器端強制使會話失效。

打開一個瀏覽器請求一個網站的頁面后,Session開始,當session超過時間限制(一般是20分種)后,session注銷而失效或是人為使用session.invalidate();使用session失效。

用瀏覽器打開一個web程序,一個瀏覽器窗口就會有一個session,且是唯一的,過了session的生存周期就沒了,或者是你關了窗口也就沒了。

不同瀏覽器的session在計算機中並不是同一個。

 

 

request
請求作用域,就是客戶端的一次請求。比如訪問某個頁面,就是一次請求。頁面訪問結束,該頁面的request就結束了

 

 

 

 

ps

由上可知,如果我們有一份比較大的數據想做緩存。可以使用application 或者 session。 但是 application 占用的是服務器的資源,需要自己寫數據清除。session當用戶緩存就比較簡便,占用的是客戶端資源,會自動失效。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM