原文参考:https://blog.youkuaiyun.com/Frank_Jay/article/details/51243481
request.setAttribute通常和RequestDispatcher.forward()一起使用,而不能和sendRedirect一起使用。sendRedirect是浏览器重定向的,第二个jsp页面中获得的request对象并非是前一个页面的request,两次请求生成了前后两个不同的request对象。但使用RequestDispatcher接口的forward()方法就是从服务器端进行转发。
关于request的生命周期:方法setAttribute用来在同一个request周期中保存变量使用,如果jsp页面需要servlet的处理结构可以通过request.getAttribute获取。
request.setAttribute()和request.getAttribute()
request.getAttribute("nameOfObj"),可得到JSP页面一表单中控件的Value。其实表单控件中的Object的 name与value是存放在一个哈希表中的,所以在这里给出Object的name会到哈希表中找出对应它的value.
而不同页面间传值使用request.setAttribute(position, nameOfObj)时,只会从a.jsp到b.jsp一次传递,之后这个request 就会失去它的作用范围,再传就要再设一个 request.setAttribute()。而使用session.setAttribute()会在一个过程中始终保有这个值。
JavaScript与JSP中不能相互传值,因为JavaScript运行在客户端,而JSP运行在服务器端。若想使它们之间可以相互传递参数,可以在JSP中设置一个hidden控件,用它的value结合上面所说的用法来传递所需的数值。