重定向与请求转发的区别
首先要知道,什么是重写向,什么是请求转发!
重定向
浏览器发起:两次请求,两次响应
浏览器先访问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>");
}
}
效果图: