Servlet转发、包含、重定向

java web 专栏收录该内容
4 篇文章 0 订阅

Servlet转发、包含、重定向

一、转发

首先创建两个Servlet,RequestServlet1 、RequestServlet2

RequestServlet1

@WebServlet("/request1.do")
public class RequestServlet1 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setAttribute("name", "cs");
        RequestDispatcher requestDispatcher = req.getRequestDispatcher("/request2.do");
        // 转发
        requestDispatcher.forward(req, resp);
        // 响应
        resp.setCharacterEncoding("UTF-8");
        PrintWriter out = resp.getWriter();
        out.print(req.getAttribute("name"));
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

RequestServlet2

@WebServlet("/request2.do")
public class RequestServlet2 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        //设置响应的内容的字符集 告诉servlet  响应的时候 将采用UTF-8来响应字符
        resp.setCharacterEncoding("UTF-8");
        PrintWriter out =  resp.getWriter();
        out.print(req.getAttribute("name"));
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

在上面两个Servlet都会在在页面上响应内容
转发
在这里插入图片描述

二、将上面转发变为包含

requestDispatcher.include(req, resp);

请求页面,比较上下两张图,可以看出,响应了两次
在这里插入图片描述

总结:在请求转发的时候 浏览器只发送了一次请求 而且在响应的时候 第一个servelt的响应将不发挥作用 只有第二个servelt的响应才会被相应给客户
请求包含 也只发送一次请求 但是是将第二个servlet的内容包含到了第一个servlet中 相当于将两个sevlet合并为一个servlet 会将两个servlet中的内容都相应给客

三、重定向

重定向 是浏览器向服务器发送了两次请求 地址栏会发生变化
将HttpServlet1的doPost方法改为

req.setAttribute("name", "cs");
        RequestDispatcher requestDispatcher = req.getRequestDispatcher("/request2.do");
        // 响应
        resp.setCharacterEncoding("UTF-8");
        resp.sendRedirect("/request2.do");

请求页面
在这里插入图片描述
可以看出地址发生了变化,并且页面响应信息为空

转发和重定向的区别

1 转发发送一次请求 重定向发送两次请求

2 转发的时候 地址栏不会发生变化 重定向 地址栏会发生变化

3 转发对两个servlet来说 是同一个请求 所以请求的参数在两个servlet中都可以获取 进行参数的传递

​ 重定向中不能进行参数的传递

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值