美文网首页
JavaWeb开发之转发与重定向

JavaWeb开发之转发与重定向

作者: 小丸子的呆地 | 来源:发表于2021-07-13 06:05 被阅读0次

重定向

什么是重定向

服务器发送一个302状态码及一个Location消息头(值是一个地址,称为重定向地址),通知浏览器立即向重定向地址发请求。

  1. 浏览器请求服务器地址A(servletA)
  2. 服务器解析地址A(servletA)请求,返回302状态码、一个Location消息头值存放地址B(servletB)
  3. 浏览器拿到返回信息,解析出Location=地址B。
  4. 浏览器请求地址B(servletB)。

如何重定向

使用response.sendRedirect(String url);

注意两个问题

1)重定向之前,不要调用out.close();会报错!

    out.println("添加成功");//能看到这个输出!(如果不写这个输出,则响应为空白页)
    out.close();
    response.sendRedirect("list");//看不到重定向结果!

2)重定向之前,服务器会先清空response对象上缓存的数据。Servlet只允许同时发送一个响应。

    out.println("添加成功");//看不到这个输出!缓存数据被清空(响应一)
    response.sendRedirect("list");//能看到重定向结果!(响应二)
    out.close();

重定向的特点

  • 重定向是两次请求。
  • 重定向之后,浏览器地址栏的地址会变成重定向地址。
  • 重定向的地址是任意的(前提要存在否则报404)。

何时用重定向

1)比如用户作删除操作时,删除操作已做完,重定向访问list.do

转发

什么是转发

服务器内部servlet将请求转发到另外的servlet方法中,由其他servlet进行处理并返回结果。

  1. 浏览器请求服务器地址A(servletA)
  2. 服务器解析地址A请求(servletA),将request内容一并请求至地址B(servletB)
  3. 由地址B(servletB)完成请求处理,并返回结果
  4. 浏览器拿到结果response

如何转发

    @RequestMapping("demo")
    public void demo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getRequestDispatcher("/list").forward(request, response);
    }

转发的特点

  • 转发是一次请求,访问了多个servlet
  • 转发之后,地址栏不变
  • 转发所涉及的各个Web组件可以共享同一个request对象和response对象

何时用转发

1)用户调用list.do
2)有ListServlet到数据库查询数据
3)ListServlet将查询到的结果通过Servlet引擎(通信模块)转发给负责显示的empList.jsp
4)empList.jsp将数据通过友好的界面显示给用户,比如用户作删除操作时,删除操作已做完,重定向访问list.do

转发和重定向的区别

1)转发的目的地只能是同一个应用内部某个组件的地址,而重定向的目的地是任意的。
2)转发之后,浏览器地址栏的地址不变,而重定向会变。
3)转发所涉及的各个Web组件可以共享request对象,而重定向不可以。
4)转发是一件事情未做完,而重定向是一件事情已经做完。

相关文章

网友评论

      本文标题:JavaWeb开发之转发与重定向

      本文链接:https://www.haomeiwen.com/subject/swvkpltx.html