转发(forward)
1.新建AServlet通过转发器转发到BServlet:
@WebServlet(name = "AServlet", urlPatterns = "/AServlet")
public class AServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//转发到Bservlet
request.getRequestDispatcher("BServlet").forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
2.新建BServlet,输出到网页
@WebServlet(name = "BServlet",urlPatterns = "/BServlet")
public class BServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().println("this is Bservlet");
}
结果:
结果显示 ip地址栏并未发生改变
重定向(sendRedirect):
1.新建AServlet重定向到BServlet
@WebServlet(name = "AServlet", urlPatterns = "/AServlet")
public class AServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//重定向到BServlet
response.sendRedirect("BServlet");
}
结果:
我们可以看到ip地址栏发生了改变
总结:
1.请求转发之间是共享同一个request(一次请求)
原理:当浏览器向服务器请求AServlet时,tomcat服务器会指向Aservlet,之后内部转发(Fword)到BServlet
我们在AServlet中保存一个键值对转发到BServlet中,会发现在BServlet中可以拿到键值对的值:
2.重定向servlet之间有各自独立的request对象**(两次请求)
原理:当浏览器向服务器请求AServlet时,tomcat服务器会指向AServlet中,通过SendREdirect重定向至BServlet,此时服务器会向客户端返回一为302的状态码,要求客户端重新请求BServlet,客户端会再次发送请求BServlet;
我们同样的保存键值对后重定向到BServlet中发现拿不到键值对的值: