Servlet转发、包含、重定向

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中都可以获取 进行参数的传递

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值