Servlet的请求转发:
两个资源文件对应一个请求和一个响应。转发是在服务器端起效果的。浏览器端是感觉不到的。
转发的示例代码:
RequestDispatcher rd=request.getRequestDispatcher(“/url-pattern”); rd.forward(request,response); //一般情况下,我们把两行代码合并成一行。 request.getRequestDispatcher(“/url-pattern”).forward(request,response); //如果要转发到一个html request.getRequestDispatcher(“/html的路径”).forward(request,response);
重定向
Action要跳转到jsp我们是通过转发跳过去的。Servlet跳转提供了两种方式,重定向就是除了转发外的另一个跳转方式。
重定向和转发实现的效果都是一样的。
重定向的过程中会有两次的请求和响应。RegistAction运行结束后,会给浏览器响应一个重定向的指令。浏览器接收到这个重定向指令后,会自动发出请求。不用用户做任何操作。
重定向的代码:
response.sendRedirect(“/appName/url-pattern”);
转发和重定向的区别:
1.转发的代码request和重定向的代码response。转发的参数是url-pattern。重定向的参数是/appName/url-pattern
2.转发的过程中只有一次请求和响应。重定向的过程中会产生两次请求和响应。
3.转发的地址栏显示的是转发前资源的路径。重定向的地址栏显示的是重定向后的资源的路径。
4.因为重定向会产生两个request对象,所以重定向的时候使用request作用域会没有效果。
5.重定向刷新后,不会造成数据库数据的异常。
什么时候用转发,什么时候用重定向。
如果跳转后的页面需要用到request作用域里面的数据,那么必须使用转发。换个角度理解,如果action要给jsp传递数据,那么一定要使用转发。
不需要传递数据时,那我们可以考虑使用重定向。
增删改,使用重定向。
查询使用转发。