javaWeb之重定向和转发

本文详细阐述了重定向与转发的概念及其在Web开发中的实现方式。重定向通过客户端跳转到新的URL,而转发则是服务器内部的行为,仅需一次客户端请求即可完成。两者在实际应用中有不同的特点和用途。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

重定向是什么?转发又是什么?

重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置.

转发:个人理解就是将自己的资源分享给别人.(建议读者自己Google吧)

重定向如何实现,转发又如何实现

1,重定向
使用指定重定向位置 URL 将临时重定向响应发送到客户端。此方法可以接受相对 URL;servlet 容器必须在将响应发送到客户端之前将相对 URL 转换为绝对 URL。如果位置是相对的,没有前导 ‘/’,则容器将相对于当前请求 URI 对其进行解释。如果位置是相对的,有一个前导 ‘/’,则容器将相对于 servlet 容器根对其进行解释

response.sendRedirect(String path);

2,转发
返回一个 RequestDispatcher 对象,它充当位于给定路径上的资源的包装器。可以使用 RequestDispatcher 对象将请求转发给资源,或者在响应中包含资源。资源可以是动态的,也可以是静态的。

RequestDispatcher getRequestDispatcher(String path).forward(ServletRequest request, ServletResponse response) //转发的方法

//include(ServletRequest request, ServletResponse response) //请求包含
这时候应该举个例子了

1,重定向

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        System.out.println("请求重定向");
        request.setAttribute("username", "ggg");

        response.sendRedirect(request.getContextPath()+"/Demo3");
//      response.sendRedirect("https://www.taobao.com/");

        System.out.println("还回来不?");
        String name = (String) request.getAttribute("username");

        System.out.println(name);

}

2,转发

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        resp.setContextType("text/html;charset=UTF-8");

        System.out.println("A:帮我做件事");
        resp.getWriter().println("Welcome");
        req.setAttribute("user", "bb");
        req.getRequestDispatcher("/demo2").forward(req, resp);//请求转发
/*  req.getRequestDispatcher("https://www.taobao.com/").forward(req, resp);*/
        System.out.println("转发回来了");
        String name = (String) req.getAttribute("user");
        if (name!=null) {

            System.out.println(name);
        }
        System.out.println("A:办完了");

    }

运行后会发现以下区别:

转发 :
  • request 由服务器执行
  • 客户端只发送一次请求
  • 地址栏不变
  • 转发能够传递数据
  • 转发也是一个域对象(servletContext)
  • 转发之后,回来才会继续执行位于转发语句之后的代码.
重定向:
  • response 由客户端执行
  • 客户端发送两次请求
  • 地址栏会发生变化
  • 不能传递数据
  • 可以跳转到其它应用
  • 当前应用的所有代码执行完后执行.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值