其实关于java web里面的请求转发和重定向有很多博客,但是本人没有收藏,而是选择了借鉴别人的再重新写一篇,为的就是加深影响,因为好多东西你看懂了和你写出是两回事。
请求转发:
request.getRequestDispatcher().forward();
重定向:
response.sendRedirect();
例如:
请求转发:
request.getRequestDispatcher("/student_list.jsp").forward(request,response);
重定向:
response.sendRedirect(request.getContextPath + "/student_list.jsp")
请求转发的示意图:
请求转发流程:首先,浏览器向ServetA发送请求,ServetA获取浏览器的请求参数或者其他资源后,没有进行处理,而是将这些参数和资源传给了给了servletB,或者jsp,或者其他web资源。接着servletB,或者jsp,或者其他web资源,对浏览器请求的参数或者资源进行处理,处理完后,将结果返回给浏览器。
重定向示意图:
重定向流程:浏览器向服务器里面的ServletA请求,ServletA对请求没有处理,而是返回了一个状态码和url。浏览器在获取ServletA返回的rul后,根据该rul重新向服务器进行请求。服务里面的ServletB或者其他资源对浏览器请求进行处理,并将结果返回给浏览器。
重定向和转发的区别:
- 重定向的地址栏会发生变化,转发不会。因为转发是在服务器内部发生的,浏览器根本不知道。
- 重定向是两次请求两次响应,转发是一次请求一次响应。
- 重定向路径需要添加工程名,转发路径不需要加工程名。
- 重定向可以跳转到任何网站,转发只能在服务器内部进行。