struts-request 請求參數的生命

之前我看過不少文章,大概的意思是:擋在瀏覽器請求時就會生成一個新的線程,request就會在整個線程的生命週期裏,jsp->action->jsp,當線程註銷時,request也會註銷,當你再次請求瀏覽器時,又會再生一個線程,同時也會生成新的request。java

其實這裏面的意思你們都會明白,當看到這樣的文章我也感受本身很明白,但是實際應用中還會表現出不足。瀏覽器

 

 下面的討論都是在product_id不變的狀況下討論的,只是簡單的從一個jsp傳令一個jsp中jsp

瀏覽器中咱們請求路徑:http://localhost:8080/fangdo/calculator/listPriceByProductId.action?product_id=1,會根據配置文件找到相應的action的方法,線程

在方法中咱們能夠經過code

HttpServletRequest request = ServletActionContext.getRequest();
String product_id= request.getParameter("product_id");

這倆行得到product_id參數值,而後在後臺進行邏輯操做。生命週期

能夠經過下面的代碼傳到jsp頁面中get

request.setAttribute("product_id", product_id);

在jsp頁面中能夠經過這一行得到值:io

String product_id = request.getAttribute("product_id");

上面的流程是請求開始時傳遞參數,這個參數伴隨着整個生命週期。

發現問題沒?class

請求是jsp->action->jsp,若是咱們想在跳轉後的jsp頁面中得到參數,能夠直接使用後臺

String product_id= (String)request.getParameter("product_id");

而不用上面那麼麻煩,這個參數一直在這個request生命中,你能夠在在這個request生命中的任什麼時候候獲取他,使用它。

若是在action中得到參數,而後經過setAttribute()方法發送到jsp中,再有jsp中getAttribute()得到。這是對request生命週期的理解錯誤的表現,可能你會理解成jsp->action就是request的做用區域,因此須要setAttribute()方法將參數再次傳一下。其實在瀏覽器請求時就會生成一個新的線程,request就會在整個線程的生命週期裏,jsp->action->jsp,這是request的整個生命週期。

相關文章
相關標籤/搜索