Servlet处理完数据后进行页面跳转的两种主要方式。
----重定向
----请求转发
一.重定向
重定向是指页面重新定位到某个新地址
之前的请求Request失效,进入一个新的请求
跳转后浏览器地址栏内容将变为新的指定地址
重定向是通过HttpServletResponse对象的sendRedirect( )来实现,
该方法用于生成302响应码和Location响应头,
从而通知客户端去重新访问Location响应头中指定的URL
相当于浏览器重新发送一个请求
方法:
pubilc void sendRedirect(java.lang.String location)
二.请求转发
请求转发是指将请求再转发到另一资源(一般为JSP或Servlet)。
此过程依然在同一个请求范围内,转发后浏览器地址栏内容不变
请求转发使用RequestDispatcher接口中的forward()方法来实现,
该方法可以把请求转发到另外一个资源,
并让该资源对浏览器的请求进行响应
方法:
RequestDispatcher rd = request.getRequestDispatcher(path);
rd.forward(request,response);
三.重定向和请求转发的区别
(1).forward()只能将请求转发给同一个Web应用中的组件,
sendRedirect方法不仅可以重定向到当前应用程序中的其他资源,
还可以重定向到其他站点的资源。
(2).sendRedirect()方法重定向的访问过程结束后,
浏览器地址栏中显示的URL会发生改变,
由初始的URL地址变成重定向的目标URL;
而调用forward()方法的请求转发过程结束后,
浏览器地址栏保持初始的URL地址不变。
(3).forward()方法的调用者与被调用者之间共享相同的request对象和response对象;
而sendRedirect()方法调用者和被调用者使用各自的request对象和response对象,
它们属于两个独立的请求和响应过程。
重定向流程图:![在这里插入图片描述](https://img-blog.csdnimg.cn/20200422095354301.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0OTE5NDU1,size_16,color_FFFFFF,t_70#pic_center)
请求转发流程图:
四.代码实现
1.重定向
public class RedirectServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
request.setAttribute("test","helloworld");
response.sendRedirect(request.getContextPath() + "/myservlet");
}
}
2.请求转发
public class ForwardServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
request.setAttribute("test","helloworld");
PrintWriter out = response.getWriter();
RequestDispatcher rd = request.getRequestDispatcher("/myservlet");
rd.forward(request, response);
}
}
目标servlet类
public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置响应到客户端的文本类型为HTML
response.setContentType("text/html; charset=UTF-8");
// 获取输出流
PrintWriter out = response.getWriter();
String test =(String)request.getAttribute("test");
out.println("重定向和请求转发");
out.println(test);
}
}
重定向:
请求转发:
参考:https://blog.csdn.net/naruhina/article/details/90139298