Servlet转发与重定向的资源路径问题解析
一. 问题引入
转发和重定向可以说是Servlet中最重要的知识点也不为过,因为它决定着整个向Servlet体系中,执行流程的问题。
转发:
request.getRequestDispatcher("/index.jsp").forward(request, response);
重定向:
response.sendRedirect("index.jsp");
相信上面两句话大家应该是再熟悉不过了,以我的习惯Servlet转发时写绝对路径,也就是转发地址用“/”开头;而重定向时通常使用的是相对路径,也就是不以“/" 开头。那Servlet中的绝对路径和相对路径具体是什么,那我们就一起来研究一下。
二. 电脑的绝对/相对路径
如何理解绝对路径与相对路径
在Windows中,以盘符开头的称为绝对路径,见下图:
、
那相对路径是什么呢?
在Linux系统中有一个工作目录的概念,所谓的工作目录就是当前用户所在的目录,那么在这里也暂且将所在目录称为工作目录。相对目录就是以当前所在目录开始计算路径值。
举个栗子:
如果用户当前这在 E:\ A目录下,那么此时 “B \ index.html”这个相对目录表示的绝对路径就是 “E:\ A \ B \ index.html”。
相对路径中的常用用法
在使用相对路径时如果想进入下一级目录可能大家清楚的很,直接在后面加斜杠然后写上目录或文件名即可。那如果我们必须进入上一级目录呢,首先明确我们在什么需求下需要进入上一级目录:
1. 获取上级目录中的文件
2. 进入当前目录的同级目录
那在相对路径的写法中,如何进入上级目录呢?
两个点代表上级目录。例如: 我们想进入当前目录的同级目录haha,我们可以这样表示“../haha”
扯得有点远了,现在我们回到正题,来讲一讲Servlet中转发和重定向时相对路径与绝对路径的使用。
三. 转发和重定向时的相对路径与绝对路径
1. 绝对路径
首先需要明确Servlet中的绝对路径到底是什么,在Servlet中转发时所代表的的绝对路径实际上就是该项目的根路径。例如:http://localhost:8080/TestWeb/。
你以为重定向时的绝对路径初始值也是当前项目根路径吗?Servlet在重定向时所代表的的绝对路径是当前Tomcat容器所在的根路径(也就是webapps)。例如:http://localhost:8080/ ,说白了就是重定向时绝对路径的初始值是没有项目名称的。
我们现在就来看一下重定向的绝对路径的效果。
Servlet代码:

访问时的URL:

回车后:

这样就会导致找不到我们项目中的index.jsp页面
解决方案:
1. 将路径写成相对路径

2. 在绝对路径前面加上项目名

绝对路径总结:在转发时绝对路径的初始值是带有项目名的,而在重定向时绝对路径的初始值是不带有项目名的。
2. 相对路径
说完绝对路径我们再来说一说相对路径,在绝对路径中重定向与转发有一定的区别,而在使用相对路径中转发与重定向没有任何区别,它们都是相对于当前所在目录来进行访问的(这句话如果看不懂就自行略过吧:这里的目录既代表WebRoot下面的真实目录,也代表Servlet配置<url-pattern>的逻辑目录。)既然重定向和转发在使用相对路径是的目录起算点是相同的,那么我们就以重定向来进行演示。

访问时的URL:

回车后的URL:

总结
在Servlet中使用绝对路径进行转发和重定向,他们的路径起算点是不相同的,转发时以项目名称作为起算点,重定向时以端口号作为起算点。而如果使用相对路径进行重定向或转发,他们都是以当前所在路径作为起算点。
Servlet转发与重定向的资源路径问题解析的更多相关文章
- servlet转发与重定向区别
servlet转发与重定向 HttpServletRequest: 表示浏览器向服务器发送的请求报文,由Tomcat创建然后作为参数传递给我们doget,dopost方法. 功能:getParam ...
- Servlet转发和重定向的区别
附上视频教学的一张图: 区别: 1.转发产生一次请求,一次响应: 重定向产生2次请求 两次响应 2.转发客户端不可见的: 重定向客户端是可以察觉的. 3.转发时候url不变: 重定向URL会改变 案例 ...
- Servlet转发到JSP页面的路径问题
一.现象与概念 1. 问题 在Servlet转发到JSP页面时,此时浏览器地址栏上显示的是Servlet的路径,而若JSP页面的超链接还是相对于该JSP页面的地址且该Servlet和该JSP页面不在同 ...
- servlet转发与重定向
HttpServletRequest: 表示浏览器向服务器发送的请求报文,由Tomcat创建然后作为参数传递给我们doget,dopost方法. 功能:getParameter()获取请求参数 get ...
- servlet转发和重定向
1 转发 RequestDispatcher getRequestDispatcher(java.lang.String path) 1)地址栏不会改变 2)转发只能转发到当前web应用内的资源 3) ...
- Servlet(四):转发与重定向、路径问题
在上次的小案例中用到了转发的技术,今天来仔细聊聊转发和重定向的问题,以及一些小知识的汇总. 一.转发 1.转发的概念 转发主要是将浏览器的请求交给另外一个servlet或jsp来处理,借助reques ...
- Servlet中转发和重定向的路径问题以及表单提交路径问题
一.请求转发与响应重定向的种类 有两种方式获得Servlet转发对象(RequestDispatcher):一种是通过HttpServletRequest的getRequestDispatcher() ...
- Servlet中转发和重定向的路径问题【转】
转发和重定向的路径问题 Servlet中有两种方式获得转发对象(RequestDispatcher):一种是通过HttpServletRequest的getRequestDispatcher()方法获 ...
- Servlet 转发请求与重定向,以及路径问题
转发请求 当一个servlet接收到请求后,如果需要将请求转发给另外一个servlet或者jsp文件,可使用下面这种方法: package cn.ganlixin.servlet; import ja ...
- servlet的转发与重定向
转发和重定向都能让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有着很大的区别. 1.转发:有两种方式获得转发对象(RequestDispatcher):一种是通过HttpServletR ...
随机推荐
- centos 6.4下fdisk分区、格式化、挂载新硬盘
centos 6.4下fdisk分区.格式化.挂载新硬盘 作者: cat 日期: 2013 年 9 月 10 日 发表评论 (0) 查看评论 1.# fdisk -l 查看当前磁盘信息,就会发现最下面 ...
- 高效生产管理:选择顺通鞋业ERP系统派单的理由
显然,传统的生产管理模式已经难以满足现代企业的需求,因此选择一款适合自身业务特点的生产管理软件成为了企业的当务之急.顺通鞋业ERP系统作为一款功能强大的生产管理软件,凭借其出色的派单功能,正逐渐成为众 ...
- dbeaver导出结果集中乱码
重要的一步 需要点击
- python:在cmd中输入pip install pandas 显示‘pip’不是内部或外部命令,也不是可运行的程序 或批处理文件解决办法
1.首先找到自己文件夹中python的安装位置,一定要在Scripts文件夹下,可以看到pip文件,复制这时候的路径 2.使用快捷键 "win +R"打开cmd窗口,首先进入自己 ...
- 中仑网络全站 Dubbo 2 迁移 Dubbo 3 总结
简介: 中仑网络在 2022 年完成了服务框架从 Dubbo 2 到 Dubbo 3 的全站升级,深度使用了应用级服务发现.Kubernetes 原生服务部署.服务治理等核心能力.来自中仑网络的技术负 ...
- ZooKeeper 在阿里巴巴的服务形态演进
简介: 本文将给大家介绍下 ZooKeeper 的最佳实践场景,归为了 3 类,分别是:微服务领域,代表的集成产品是 Dubbo/SpringCloud:大数据领域,代表的集成产品是 Flink/Hb ...
- Bilibili资深运维工程师:DCDN在游戏应用加速中的实践
简介: bilibili资深运维工程师李宁分享<DCDN在游戏应用加速中的实践>从bilibili游戏应用的效果和成本入手,深入浅出地分享DCDN全站加速在游戏加速场景中的应用. 日前,云 ...
- 日志服务Dashboard加速
简介: 阿里云日志服务致力于为用户提供统一的可观测性平台,同时支持日志.时序以及Trace数据的查询存储.用户可以基于收集到的各类数据构建统一的监控以及业务大盘,从而及时发现系统异常,感知业务趋势.但 ...
- [Go] Colly 使用 POST 提交 application/x-www-form-urlencoded 示范
Colly 提供了 Post 和 PostRaw 方法,它们的参数类型不一样,需要注意. 目标地址接受指定的 Content-Type,可以通过设置 request Header. 局部代码: // ...
- [Contract] 监听 MetaMask 网络变化, 账号切换
为什么需要监听网络变化?目前在 MetaMask 中切换网络,网页会自动刷新,但是这一特性后面将停止使用. MetaMask: MetaMask will soon stop reloading pa ...