之前我看过不少文章,大概的意思是:挡在浏览器请求时就会生成一个新的线程,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的整个生命周期。