本文通过现实生活的例子引出重定向和请求转发,通过图解的方式讲解了整执行流程,希望可以帮助到大家
区别
序号
问题
重定向
请求转发
1
第二次请求谁请求的?
浏览器
服务器
2
浏览器发送了几次请求?
2次以上
1次
3
servlet可以共享request吗?
不可以
可以
4
地址栏是否发生改变?
是
不是
5
浏览器地址栏显示的哪一次访问地址?
最后一次
第一次
6
可以跳转到什么资源?
任意资源
项目内部
7
第二次的请求路径是?
绝对路径
内部路径
如果servlet执行流程不清楚可以查看我的另外个文章:
https://blog..net/u010452388/article/details/80395679
现实生活的例子
重定向
①:A对B说,帮忙拿下快递
②:B对A说,没有空,你找下C吧
③:A对C说,帮忙拿下快递
④:C然后拿了快递给A
请求转发
①:A对B说,帮忙拿下快递
②:第二步,B没有空,直接找让C帮A拿下快递
③:C拿到了快递并返回给A
重定向-流程图、代码、结果
1.流程图
2.1代码BoyServlet
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class BoyServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取请求携带的id
String id = request.getParameter("id");
System.out.println("A对B说:帮我拿下快递,id号是:" + id);
System.out.println("B对A说:我没有空,你找下C");
System.out.println("----分割线----");
// 重定向方式1:
response.setStatus(302);
response.setHeader("location", "/redirect/girl");
// 重定向方式2:(正常用此方法)
// response.sendRedirect("/redirect/girl");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
2.2代码GirlServlet
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class GirlServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置浏览器解析的格式,否则浏览器会出现乱码
response.setContentType("text/html;charset=utf-8");
//获取请求携带的id
String id = request.getParameter("id");
System.out.println("A对C说,帮我拿下快递,id号是:"+id);
System.out.println("拿到快递了");
//获取输出流
PrintWriter writer = response.getWriter();
//将信息返回给浏览器
writer.println("拿到快递了");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
2.3web.xml文件
redirect
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
BoyServlet
BoyServlet
com.redirect.BoyServlet
BoyServlet
/boy
GirlServlet
GirlServlet
com.redirect.GirlServlet
GirlServlet
/girl
3.结果
3.1浏览器输入
3.2浏览器返回结果
3.3控制台打印结果
请求转发-流程图、代码、结果
1.流程图
2.1代码BoyServlet
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class BoyServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取请求携带的id
String id = request.getParameter("id");
System.out.println("A对B说:帮我拿下快递,id号是:" + id);
System.out.println("B对A说:好的");
System.out.println("----分割线----");
//---后面B直接在服务器将请求转发给C---
//获取转发对象,后面括号指定了转发的路径
RequestDispatcher dispatcher = request.getRequestDispatcher("/girl");
//执行转发功能,并将请求和响应一并转发过去
dispatcher.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
2.2代码GirlServlet
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class GirlServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置浏览器解析的格式,否则浏览器会出现乱码
response.setContentType("text/html;charset=utf-8");
// 获取请求携带的id
String id = request.getParameter("id");
System.out.println("B对C说:帮A拿下快递,id号是:" + id);
System.out.println("拿到快递了");
// 获取输出流
PrintWriter writer = response.getWriter();
// 将信息返回给浏览器
writer.println("拿到快递了");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
2.3web.xml文件
dispatcher
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
BoyServlet
BoyServlet
com.dispatcher.BoyServlet
BoyServlet
/boy
GirlServlet
GirlServlet
com.dispatcher.GirlServlet
GirlServlet
/girl
3.结果
3.1浏览器输入
3.2浏览器返回结果
3.3控制台结果