Servlet的生命週期 AND forward和redirect區別

Servlet生命週期:Servlet程序加載 --> 初始化 --> 服務 -->銷燬

init():負責對Servlet程序進行初始化,當服務器執行Servlet程序時,讀取web.xml配置文件中的信息,構造指定的Servlet對象,創建ServletConfig對象,同時將創建的ServletConfig對象作爲init方法的參數,完成對Servlet對象的初始化。init方法只會執行一次。

service():是Servlet的核心,負責響應用戶的請求,當用戶請求一個HttpServlet對象,該對象的service()方法就要進行調用,傳遞給方法一個請求對象ServletRequest和響應對象ServletResponse作爲參數,HttpServlet中實現了service()方法,並將請求ServletRequest、ServletResponse 強轉爲HttpServletRequest和HttpServletResponse。默認的服務功能是調用與HTTP請求的相應的doGet或doPost方法。

destroy():銷燬方法只在web工程停止時調用,只執行一次。當Servlet對象退出執行週期時,負責釋放資源。

forward和redirect區別

forward:請求轉發,requerst 調用 getRequestDispatcher("url網址").forward(req,resp);

redirect:重定向,response.sendRedirect("新地址");

1. 瀏覽器地址欄的顯示

forward 是在服務器內部進行轉發,服務器直接訪問目標地址的url網址,讀取裏面的內容,然後把內容轉發給瀏覽器,對於瀏覽器而言並不知道數據從何而來,最終瀏覽器的網址並不會發生變化。

redirect 是客戶端給服務器發請求,然後服務器告訴客戶端說。我給你一些地址。你去新地址訪問。最終瀏覽器的網址更新爲新地址。

2. 請求次數

forward 只進行一次請求,redirect進行了兩次請求。

3. 共享數據

forward 在轉發過程進行一次請求,使用同一個request,將request中的信息帶到新的程序中使用,數據是共享的。

redirect 數據不能共享。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章