1. sendRedirect()方法是通过浏览器重定向的
例:JSP1代码
String [] test=new String[2];
test[0]="1";
test[1]="2";
request.setAttribute("test",test) ;
response.sendRedirect("jsp2.jsp");
JSP2代码
String test[]=(String[])request.getAttribute("test");
out.print(test);
在第二个JSP页面中获得的request并非是前一个页面的request(两次请求生成了前后两个不同的 request对象了)
--------------RequestDispatcher接口的forward()方法试试看
2. request.setAttribute() VS session.setAttribute()
不同页面间传值使用request.setAttribute("obj1",obj)【把obj这个对象放在名称为obj1的变量中】时,只会从a.jsp到b.jsp一次传递,之后这个request就会失去它的作用范围,再传就要再设一个 request.setAttribute(),而使用session.setAttribute()会在一个过程中始终保有这个值。
3. JavaScript不能取得jsp页面跳转过程中request和session的值,因为JavaScript运行在客户端,而request/session对象运行在服务器端。若想使它们之间可以相互传递参数,可以在JSP中设置一个hidden控件,用request.getAttribute/session.getAttribute得到在request/session中变量的value,再用js去取这个value
4.servletContext,session,request,page的作用范围
request.setAttribute的生命周期就是request级别的
request.getSession().setAttribute的生命周期是session级别的
5. request是服务器端对象,客户端接收不到。request的生命周期就是在服务器端页面之间,来自客户端的请求经Servlet容器处理后,由request对象进行封装,它作为servlet service()方法的一个参数由容器传递给JSP页面,因此,JSP转发时,request会随着发到下一个页面,但一旦最后一个页面处理完成,这个request的生命周期也就结束了,客户端再次提交请求Servlet又会生成一个新的request对象。