前端路径问题总结
1.相对路径 不以/开头 以当前资源的所在路径为出发点去找目标资源 语法: ./表示当前资源的路径 ../表示当前资源的上一层路径 缺点:不同位置,相对路径写法不同
2.绝对路径 以固定的路径作为出发点作为目标资源,和当前资源所在路径没关系 语法:以/开头,不同的项目中,固定的路径的出发点可能不一致,我的浏览器以http://localhost:8080为出发点 缺点:需要补充项目上下文,项目上下文会发生改变
在不同html文件中访问photo.png图片

index.html文件 img路径相对路径写法
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<img src="static/img/photo.png"/>
</body></html>
当前资源的请求路径:http://localhost:8080/demo05_path_war_exploded/index.html
当前资源是:index.html
当前资源的所在路径是:http://localhost:8080/demo05_path_war_exploded/
相对路径的规则就是当前资源的所在路径后拼接目标资源
浏览器向服务器请求http://localhost:8080/demo05_path_war_exploded/static/img/photo.png
test.html文件
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<img src="../../../static/img/photo.png"/>
</body>
</html>
当前资源的请求路径:http://localhost:8080/demo05_path_war_exploded/a/b/c/test.html
当前资源是:test.htm
当前资源的所在路径是:http://localhost:8080/demo05_path_war_exploded/a/b/c/
相对路径的规则就是当前资源的所在路径后拼接目标资源
浏览器向服务器请求
http://localhost:8080/demo05_path_war_exploded/a/b/c/../../../static/img/photo.png
http://localhost:8080/demo05_path_war_exploded/static/img/photo.png
view.html文件无法直接访问,使用请求转发 View1Servlet
package com.yan.servlet;import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;
@WebServlet("/View1Servlet")
public class View1Servlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.getRequestDispatcher("WEB-INF/views/view.html").forward(req,resp);//请求转发}
}
view.html文件
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<img src="../../static/img/photo.png"/>
</body>
</html>
当前资源的请求路径:http://localhost:8080/demo05_path_war_exploded/View1Servlet
当前资源是:View1Servlet
当前资源的所在路径是:http://localhost:8080/demo05_path_war_exploded/
相对路径的规则就是当前资源的所在路径后拼接目标资源
浏览器向服务器请求
http://localhost:8080/demo05_path_war_exploded/../../static/img/photo.png
http://localhost:8080/static/img/photo.png 无法找到图片
正确代码:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<img src="static/img/photo.png"/>
</body>
</html>
当前资源的请求路径:http://localhost:8080/demo05_path_war_exploded/View1Servlet
当前资源是:View1Servlet
当前资源的所在路径是:http://localhost:8080/demo05_path_war_exploded/
相对路径的规则就是当前资源的所在路径后拼接目标资源
浏览器向服务器请求
http://localhost:8080/demo05_path_war_exploded/static/img/photo.png可以找到图片
绝对路径
绝对路径 以固定的路径作为出发点作为目标资源,和当前资源所在路径没关系 语法:以/开头,不同的项目中,固定的路径的出发点可能不一致,我的浏览器以http://localhost:8080为出发点 缺点:需要补充项目上下文,项目上下文会发生改变
index.html文件
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<img src="/demo05_path_war_exploded/static/img/photo.png"/>
</body></html>
通过head标签中的base标签可以把所有不加修饰的相对路径加上href定义的公共前缀变为绝对路径
<head><meta charset="UTF-8"><title>Title</title><base href="/demo05_path_war_exploded/"> </head>
重定向的路径问题
例1:
Servlet01
@WebServlet("/Servlet01")
public class Servlet01 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.sendRedirect("Servlet02");//重定向}
}
Servlet02
@WebServlet("/Servlet02")
public class Servlet02 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("Servlet02执行了");}
}
当前资源的请求路径:http://localhost:8080/demo05_path_war_exploded/Servlet01
当前资源是:Servlet1
当前资源的所在路径是:http://localhost:8080/demo05_path_war_exploded/
重定向使用相对路径写法
resp.sendRedirect("Servlet02");//重定向
浏览器响应:看Location

浏览器向服务器请求
ttp://localhost:8080/demo05_path_war_exploded/Servlet02
例二:
servlet01
@WebServlet("/x/y/z/Servlet01")
public class Servlet01 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.sendRedirect("../../../Servlet02");}
}
servlet02
@WebServlet("/Servlet02")
public class Servlet02 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("Servlet02执行了");
当前资源的请求路径:http://localhost:8080/demo05_path_war_exploded/x/y/z/Servlet01
当前资源是:Servlet01
当前资源的所在路径是:http://localhost:8080/demo05_path_war_exploded/
重定向使用相对路径写法
resp.sendRedirect("../../../Servlet02");//重定向
浏览器响应:看Location

浏览器向服务器请求
ttp://localhost:8080/demo05_path_war_exploded/x/y/z/../../../Servlet02
ttp://localhost:8080/demo05_path_war_exploded/Servlet02
总结:相对路径规则和前端相对路径一致
例三:
绝对路径重定向:
Servlet01:
@WebServlet("/x/y/z/Servlet01")
public class Servlet01 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.sendRedirect("/demo05_path_war_exploded/Servlet02");}
}
Servlet02:
@WebServlet("/Servlet02")
public class Servlet02 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("Servlet02执行了");}
}
以下代码得到绝对路径更灵活
ServletContext servletContext = req.getServletContext();
String contextPath =servletContext.getContextPath();//返回项目的上下文路径
resp.sendRedirect(contextPath+"/servlet02");
绝对路径以http://localhost:8080为出发点
浏览器向服务器请求
ttp://localhost:8080/demo05_path_war_exploded/Servlet02

请求转发的路径问题
例1:
请求转发的相对路径写法:
Servlet01:
@WebServlet("/Servlet01")
public class Servlet01 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.getRequestDispatcher("Servlet02").forward(req,resp);//相对路径写法}
}
Servlet02:
@WebServlet("/Servlet02")
public class Servlet02 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("Servlet02执行了");}
}
例2:
请求转发的绝对路径写法,不需要写上下文
Servlet01
@WebServlet("/Servlet01")
public class Servlet01 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//绝对路径写法不需要添加项目上下文//请求转发的/代表 项目上下文req.getRequestDispatcher("/Servlet02").forward(req,resp);}
}
Servlet02
@WebServlet("/Servlet02")
public class Servlet02 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("Servlet02执行了");}
}
不设置项目上下文
在idea 的编辑配置-部署中将应用程序上下文 改为/
好处:原来/demo05_path_war_exploded/Servlet02的绝对路径写法,现在写为/Servlet02

相关文章:
前端路径问题总结
1.相对路径 不以/开头 以当前资源的所在路径为出发点去找目标资源 语法: ./表示当前资源的路径 ../表示当前资源的上一层路径 缺点:不同位置,相对路径写法不同2.绝对路径 以固定的路径作为出发点作为目标资源,和当前资源所在路径没关系 语法:以/开头,不同的项目中,固定的路径…...
YOLOv8改进 | 低照度检测 | 2024最新改进CPA-Enhancer链式思考网络(适用低照度、图像去雾、雨天、雪天)
一、本文介绍 本文给大家带来的2024.3月份最新改进机制,由CPA-Enhancer: Chain-of-Thought Prompted Adaptive Enhancer for Object Detection under Unknown Degradations论文提出的CPA-Enhancer链式思考网络,CPA-Enhancer通过引入链式思考提示机制,实现了对未知退化条件下…...
python的pip如何升级
升级pip的方法如下: 打开命令行工具。在Windows系统中,可以通过按下WinR键,然后输入"cmd"来打开命令提示符;在Mac或Linux系统中,可以直接打开终端。检查当前pip版本。在终端或命令行中输入以下命令&#…...
Collection与数据结构 Stack与Queue(一): 栈与Stack
1. 栈 1.1 概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈&…...
内部类(来自类和对象的补充)
❤️❤️前言~🥳🎉🎉🎉 hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥&a…...
Android 高德地图
1.获取Key 进入高德开放平台控制台,创建一个新应用。在创建的应用上点击"添加key"按钮,在弹出的对话框中,依次输入key名称,选择服务平台为“Android平台”,输入发布版安全码 SHA1、以及 Package。 获取 S…...
代码随想录|Day31|贪心06|738.单调递增的数字
738.单调递增的数字 思路: 1. 从右向左遍历 从字符串的最后一位向前遍历,即从低位到高位进行检查。这是因为当我们修改某一位数字时,可能会影响到更低位的数字。 2. 检查并修改数字 在遍历过程中,如果发现当前位数字小于其前一位&…...
机械制造学习笔记
一、切削加工、切削运动的基本概念及刀具切削过程 切削加工: 定义:切削加工是利用切削刀具对工件进行切削,以去除多余材料并得到所需形状和尺寸的加工方法之一。应用:广泛应用于金属加工、木材加工、塑料加工等领域,是…...
Golang | Leetcode Golang题解之第3题无重复字符的最长子串
题目: 题解: func lengthOfLongestSubstring(s string) int {// 哈希集合,记录每个字符是否出现过m : map[byte]int{}n : len(s)// 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动r…...
SWM341系列应用(上位机应用)
SWM341系列之上位机应用 1、分级图像和PNG、JPG的应用 现象:客户使用SWM34SVET6HMI_0.4.1版本上位机进行UI界面布局,反馈在模拟运行时(PC端)流畅,在Demo平台(设备端)运行卡顿。 分析及解决&…...
【软件工程】详细设计(一)
1. 引言 1.1 编写目的 该文档的目的是描述《学生成绩管理系统》项目的详细设计,其主要内容包括: 系统功能简介 系统详细设计简述 各个模块的实现逻辑 最小模块组件的伪代码 本文档的预期的读者是: 开发人员 项目管理人员 测试人员 …...
【AIGC】如何在Windows/Linux上部署stable diffusion
文章目录 整体安装步骤windows10安装stable diffusion环境要求安装步骤注意事项参考博客其他事项安装显卡驱动安装cuda卸载cuda安装对应版本pytorch安装git上的python包Q&A linux安装stable diffusion安装anaconda安装cudagit 加速配置虚拟环境挂载oss(optional…...
基于java实现的弹幕视频网站
开发语言:Java 框架:ssm 技术:JSP JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclip…...
【大数据存储】实验4 NoSQL数据库
实验4 NoSQL数据库 NoSQL数据库的安装和使用实验环境: Ubuntu 22.04.3 Jdk 1.8.0_341 Hadoop 3.2.3 Hbase 2.4.17 Redis 6.0.6 mongdb 6.0.12 mogosh 2.1.0 Redis 安装redis完成 新建终端启动redisredis-server新建一个终端redis-cli 建表操作 尝…...
从零学算法80
80. 删除有序数组中的重复项 II 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外…...
Jupyter notebook文件默认存储路径以及更改方法
初次使用Jupyter Notebook,确实好用啊!但安装Anaconda后,打开Jupyter Notebook 的时候,新建文件的默认存储路径一般在C系统盘下面的XXX目录,那么路径是什么呢?我想把文件保存到其他的文件夹下应该怎么做呢&…...
WPF中通过自定义Panel实现控件拖动
背景 看到趋时软件的公众号文章(WPF自定义Panel:让拖拽变得更简单),发现可以不通过Drag的方法来实现ListBox控件的拖动,而是通过对控件的坐标相加减去实现控件的位移等判断,因此根据文章里面的代码,边理解边…...
Centos7安装Docker与Docker-compose【图文教程】
个人记录 查看一下系统是否已经安装了Docker yum list installed | grep docker如下图代表没有安装Docker 卸载已有Docker yum remove docker docker-common docker-selinux docker-engine切换目录 cd /etc/yum.repos.d/查看当前目录所有的镜像源 ll安装yum-util与devi…...
mac电脑maven配置环境变量
1、下载maven https://maven.apache.org 2、配置环境变量 vim .bash_profile JAVA_HOME/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home PATH$JAVA_HOME/bin:$PATH export JAVA_HOME export PATH#maven export MAVEN_HOME/Users/haines/desktop/work/java/a…...
后端返还二进制excl表格数据时候,如何实现在前端下载表格功能及出现表格打开失败的异常处理。
背景: 后端返还一个二进制流的excl表格数据,前端需要对其解析,然后可提供给客户进行下载。 思路:把二进制流数据转换给blob对象,然后利用a标签进行前端下载。 代码: 后端返还 类似如下的数据 前端代码…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
