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的整个生命周期。

相关文章
相关标签/搜索