web笔记六:转发(forward)和重定向(sendRedirect)

本文探讨了web开发中的转发(forward)和重定向(sendRedirect)的区别,主要从URL地址变化、请求信息保留及根目录三个方面展开。转发在服务器内部执行,URL不变,保留请求信息,根目录为web应用目录;而重定向由浏览器执行,URL变化,不保留请求信息,根目录为web服务器目录。此外,还详细分析了相对路径和绝对路径在两者中的表现,并给出代码示例。

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

本章节将介绍转发和重定向的区别,在了解它们之前,我们需要知道一句话:转发是由服务器内部实现的,而重定向的工作则是由浏览器去执行,它们之间的区别也都是围绕这这句话进行,它们之间的区别主要有三点。

一、URL地址是否变化
由于转发是在服务器内部执行的,浏览器并不知道请求的内容转发到其他地方进行处理,所以浏览器上面的地址栏是不变的。而重定向是由浏览器执行的,所以URL会发生变化。
结论:
转发:URL不变
重定向:URL变化

二、请求信息是否保留
请求信息包括parameter、attribute等,由于转发是在服务器内部执行的,所以这些请求信息都会保留传递到目的servlet的HttpServletRequest中,而重定向则相当于重新发起一个新的请求,不会保留请求信息。
结论:
转发:保留请求信息
重定向:不保留请求信息

三、根目录(/)
转发是在内部的,所以根目录对应的就是web应用的目录,而浏览器是针对web服务器发起的请求,所以重定向的根目录为web服务器目录。例如我们将helloweb.war包放到tomcal/webapps目录下,启动tomcat。那么http://localhost:8080/helloweb/就是我们web应用的根目录,http://localhost:8080/就是我们web服务器的根目录。
总结:
转发:web应用目录
重定向:web服务器目录

说完不同点,下面结合共同点来讲一下相对路径、绝对路径在转发和重定向的具体变现是怎样的。

  1. 首先我们先建立两个类MyServlet、MyServlet_02,分别设置url-mapping为 /a/*、/b/*
<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/a/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
       <servlet-name>MyServlet2</servlet-name>
       <url-pattern>/b/*</url-pattern>
   </servlet-mapping>

2.在两个servlet的service方法分别插入以下代码

System.out.println("===MyServlet===");
try {
    System.out.println(request.getRequestURL());
    Thread.sleep(1000);//防止转发/重定向到当前servlet一下子打印过多信息。
    String url="";//
    //request.getRequestDispatcher(url).forward(request, response);//转发
    //response.sendRedirect(url);//重定向
} catch (InterruptedException e) {
    e.printStackTrace
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值