一. 问题引入

转发和重定向可以说是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转发与重定向的资源路径问题解析的更多相关文章

  1. servlet转发与重定向区别

    servlet转发与重定向   HttpServletRequest: 表示浏览器向服务器发送的请求报文,由Tomcat创建然后作为参数传递给我们doget,dopost方法. 功能:getParam ...

  2. Servlet转发和重定向的区别

    附上视频教学的一张图: 区别: 1.转发产生一次请求,一次响应: 重定向产生2次请求 两次响应 2.转发客户端不可见的: 重定向客户端是可以察觉的. 3.转发时候url不变: 重定向URL会改变 案例 ...

  3. Servlet转发到JSP页面的路径问题

    一.现象与概念 1. 问题 在Servlet转发到JSP页面时,此时浏览器地址栏上显示的是Servlet的路径,而若JSP页面的超链接还是相对于该JSP页面的地址且该Servlet和该JSP页面不在同 ...

  4. servlet转发与重定向

    HttpServletRequest: 表示浏览器向服务器发送的请求报文,由Tomcat创建然后作为参数传递给我们doget,dopost方法. 功能:getParameter()获取请求参数 get ...

  5. servlet转发和重定向

    1 转发 RequestDispatcher getRequestDispatcher(java.lang.String path) 1)地址栏不会改变 2)转发只能转发到当前web应用内的资源 3) ...

  6. Servlet(四):转发与重定向、路径问题

    在上次的小案例中用到了转发的技术,今天来仔细聊聊转发和重定向的问题,以及一些小知识的汇总. 一.转发 1.转发的概念 转发主要是将浏览器的请求交给另外一个servlet或jsp来处理,借助reques ...

  7. Servlet中转发和重定向的路径问题以及表单提交路径问题

    一.请求转发与响应重定向的种类 有两种方式获得Servlet转发对象(RequestDispatcher):一种是通过HttpServletRequest的getRequestDispatcher() ...

  8. Servlet中转发和重定向的路径问题【转】

    转发和重定向的路径问题 Servlet中有两种方式获得转发对象(RequestDispatcher):一种是通过HttpServletRequest的getRequestDispatcher()方法获 ...

  9. Servlet 转发请求与重定向,以及路径问题

    转发请求 当一个servlet接收到请求后,如果需要将请求转发给另外一个servlet或者jsp文件,可使用下面这种方法: package cn.ganlixin.servlet; import ja ...

  10. servlet的转发与重定向

    转发和重定向都能让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有着很大的区别. 1.转发:有两种方式获得转发对象(RequestDispatcher):一种是通过HttpServletR ...

随机推荐

  1. HarmonyOS属性动画开发示例(ArkTS)

      介绍 利用ArkUI组件不仅可以实现属性变化引起的属性动画,也可以实现父组件状态变化引起子组件产生动画效果,这种动画为显式动画.效果如图所示: 相关概念 显式动画:提供全局animateTo显式动 ...

  2. MySQL集群入门(PXC)

    目标: 1.掌握PXC集群MySQL方案的原理: 2.掌握PXC集群的强一致性: 3.掌握PXC集群的高可用方案:硬件要求: 1.Win10x64企业版/linux/MacOS: 2.Docker虚拟 ...

  3. ef 查询生成语句的几种方式

    前言 整理一下ef 如何查看生成sql 语句的,现在有ef core 了,统一整理一下. 正文 方式如下: 数据库监听 这是一种推荐方式,因为调试和代码分开,不会有影响. 然后连接: 然后可以进行一些 ...

  4. 论文记载:A Survey on Traffic Signal Control Methods

    ABSTRACT 交通信号控制是一个重要且具有挑战性的现实问题,其目标是通过协调车辆在道路交叉口的移动来最小化车辆的行驶时间.目前使用的交通信号控制系统仍然严重依赖过于简单的信息和基于规则的方法,尽管 ...

  5. 涂色-【BFS】

    涂色 有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间.给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newC ...

  6. 为什么我要写spring.factories文件?

    在阅读spring-boot相关源码时,常常见到spring.factories文件,里面写了自动配置(AutoConfiguration)相关的类名,因此产生了一个疑问:"明明自动配置的类 ...

  7. Spring JDBCTemplet通用RowMapper帮助类

    1 import java.lang.reflect.Method; 2 import java.math.BigDecimal; 3 import java.math.BigInteger; 4 i ...

  8. 4款值得推荐的AI辅助编程工具(支持C#语言)

    前言 在这个AI迅速发展的阶段,涌现出了一大批好用的AI辅助编程工具.AI辅助编程工具能够提高开发效率.改善代码质量.降低bug率,是现代软件开发过程中的重要助手.今天大姚给大家分享4款AI辅助编程工 ...

  9. Oracle 将字符中含有的字母或特殊字符去除并将字符串置换成数字

    将字符中含有的字母或特殊字符去除并将字符串置换成数字 将字符中含有的字母或特殊字符去除并将字符串置换成数字 to_number(nvl(TRANSLATE(u.scsqrbzl, 'qwertyuio ...

  10. 阿里巴巴大规模应用Flink的踩坑经验:如何大幅降低 HDFS 压力?

    众所周知 Flink 是当前广泛使用的计算引擎,Flink 使用 checkpoint 机制进行容错处理[1],Flink 的 checkpoint 会将状态快照备份到分布式存储系统,供后续恢复使用. ...