Servlet重定向

请求重定向:客户端的一次请求到达后,发现需要借助其他Servlet来实现功能

特点:浏览器地址栏发生改变,两次请求,请求域对象中不能共享数据,可以重定向到其他服务器 

重定向的实现原理

设置响应状态码为302.resp.setStatus(302);

设置响应的资源路径(响应到哪里去,通过响应消息头location来指定)

resp.setHeader("location","/response/responseDemo07");

但是我们可以选择直接使用响应对象重定向方法

返回值

方法名说明
voidsendRedirect(String name)设置重定向

接下来我们来实践一下这个方法,代码如下:

 * 请求重定向  */
@WebServlet("/servletDemo6")
public class ServletDemo6 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("demo6执行了");

        //设置请求域共享数据
        req.setAttribute("username", "zhang");

        //请求重定向
        //前面获取虚拟路径名称,后面跟着想要跳转到的地方
        resp.sendRedirect(req.getContextPath() + "/servletDemo7");
    }

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

将会重定向到/servletDemo7

 * 请求重定向  */
@WebServlet("/servletDemo7")
public class ServletDemo7 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("demo7执行了");

        //获取共享数据
        Object username = req.getAttribute("username");
        System.out.println(username);
    }

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

然而我们可以看到控制台中的输出结果中,getAttribute并不能取到对应的值,只会显示null

 这是因为重定向的原因,经过二次请求,请求域对象中的数据在第二次请求时就已经丢失

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值