重定向与转发

重定向和转发

1.重定向:response.sendRedirect("URL路径");

重定向redirect:服务器强制性地要求浏览器再次发出新请求去访问指定路径,多次请求,数据无法共享。

@WebServlet(value="loginservlet",name="userLoginServlet")
public class userLoginServlet extend HttpServlet{
    @Override
    //doGet()或daPost()方法
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        ..........一些逻辑处理...........//代码一   
       response.sendRedirect("welcome.html");//代码二
    }
}

ps:当客户端一直F5刷新时,只会请求welcome.html

重定向是两次请求,两次响应。所以welcome.html页面中获取不到代码一中的请求数据。地址栏会发生变化。

2.转发:

转发forward:转发是服务器把本次请求对象和响应对象直接交给下一个资源,只有一次请求,数据可以共享。

例如:RequestDispatcher dispatcher = request.getRequestDispatcher("/welcome.jsp");
dispatcher.forward(request, response);
@WebServlet(value="loginservlet",name="userLoginServlet")
public class userLoginServlet extend HttpServlet{
    @Override
    //doGet()或doPost()方法
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        ..........一些逻辑处理...........//代码一   
     request.getRequestDispatcher("/welcome.jsp").forward(request, response);//代码二
    }
}

ps:当客服端一直F5刷新时,会一直执行loginservlet的doGet()或doPost()方法.

转发是一次请求,一次响应,所以welcome.jsp页面中可以获取的到代码一中的请求数据。地址栏不变

3.总结

重定向特点:(做数据的增删改时,需要使用重定向)

1、重定向是客户端行为。
2、重定向是浏览器做了至少两次的访问请求。
3、重定向浏览器地址改变。
4、重定向两次跳转之间传输的信息会丢失(request范围)。
5、重定向可以指向任何的资源,包括当前应用程序中的其他资源,同一个站点上的其他应用程序中的资源,其他站点的资源。

转发特点:

1、转发是服务器行为
2、转发是浏览器只做了一次访问请求
3、转发浏览器地址不变
4、转发两次跳转之间传输的信息不会丢失,所以可以通过request进行数据的传递
5、转发只能将请求转发给同一个Web应用中的组件

请求转发和重定向区别总结

l 请求转发是一次请求一次响应,而重定向是两次请求两次响应。

l 请求转发地址栏不会变化的,重定向地址栏发生变化。

l 请求转发路径不带工程名,重定向需要带工程名路径。

l 请求转发只能在本网站内部,重定向可以定向到任何网站。

注意:

如果需要使用request进行值传递,需要通过请求转发完成。如果页面需要跳转到其他网站上必须使用重定向。

Don't just say it. Show me your code.
原文地址:https://www.cnblogs.com/bigbeardhk/p/12694830.html