正文开始:
先说一下他们之间的区别:
重定向的时候地址栏会变化,而转发的时候地址栏是不会变化的.
应用场景:
重定向:当用户注册的时候我们必须通过改变地址栏的方式来告诉用户,他/她应经注册成功了.
转发:比如一个网站不想使用index.jsp这个页面当做首页,但是内容还是这个index.jsp中的内容,那么就可以在Servler中使用转发的功能转到index.jsp这个页面上.
方式:
重定向:
在Servlet中:
1)使用 http头信息
response.setStatus(302);
response.setHeader("location", request.getContextPath()+"/test.jsp");
2)使用response 对象中的sendRedirect()方法实现重定向
response.sendRedirect(request.getContextPath()+"/test.jsp");
jsp中:
<jsp:forward page=request.getContextPath()+"/test.jsp" />
转发:
request.getRequestDispatcher("/test.jsp").forward(request, response);
这里需要注意的就是地址的使用,什么时候使用request.getContextPath(),什么时候直接使用"/"?
response一般都是针对浏览器进行响应的,所以针对的是浏览器,那么就必须将资源的详细地址写入,所以这个时候使用request.getContextPath()
request:的时候一般是针对服务器,所以对于服务器"/" 指的是服务器中编译之后的目录,所以这个时候一般就会使用"/"代表路径.
转发还有一个重要的功能就是可以携带数据到目的地,request会将数据存储在request域中,然后再目的地使用getAttribute()取出数据.
这里不得不提及到的是j2ee中的四个域.
从大到小:application->session->request->page
可以使用request.getAttribute("key","value");获取传递的值.当然也可以使用EL表达式从四个 域中进行取(顺序:page->request->session->application).
初学jsp,有什么不足之处请尽管提出来,自己也好改正.