重定向与请求转发的区别
首先要知道,什么是重写向,什么是请求转发!
重定向
浏览器发起:两次请求,两次响应
浏览器先访问servlet1,没有想要的资源,再返回了302重定向码,和location(另一个servlet地址)
浏览器拿到这两个参数后,再访问servlet2。
且地址栏会变化。
图解:
代码如下:
package com.lbl.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/SendRedirect01Servlet") public class SendRedirect01Servlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.sendRedirect("/Day04_war_exploded/SendRedirect02Servlet"); } }
package com.lbl.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/SendRedirect02Servlet") public class SendRedirect02Servlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().println("success"); } }
效果图:
请求转发
浏览器发起:一次请求,一次响应
浏览器访问servlet1,然后servlet1请求转发到servlet2,此时requst和response域会传给servlet2,最后由servlet2响应浏览器。
地址栏不变化
图解:
代码如下:
package com.lbl.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/dispatcher01Servlet") public class Dispatcher01Servlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //将游戏本添加到requst域中 request.setAttribute("name","游戏本"); request.getRequestDispatcher("/dispatcher02Servlet").forward(request,response); } }
package com.lbl.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/dispatcher02Servlet") public class Dispatcher02Servlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.获取值 String name = (String) request.getAttribute("name"); //2.组装标签后,响应给浏览器 response.setContentType("text/html;charset=utf-8"); response.getWriter().println("<font color='red'>"+name+"</font>"); } }
效果图:
作者:水巷石子
链接:https://blog.csdn.net/qq_37924905/article/details/108518202
来源:CSDN
著作权归作者所有,转载请联系作者获得授权,切勿私自转载。