1、引入外部css时的href问题
jsp中内容
css中内容
目标:将“测试url”文字居中变红
相对路径请求
相对路径表示的是要引入的index.css和当前jsp的位置关系。可以从目录结构看到当前css目录和当前index.jsp处于同一级目录,所以我们只需要直接使用css/index.css
就可以成功获取到css资源了。
不加/直接写包名
的都是相对路径
./
表示相对于当前这一级目录下,这个是相对路径
../
表示当前这一级目录的上一级目录下,这个是相对路径
写法1
<link rel="stylesheet" type="text/css" href="css/index.css">
写法2
<link rel="stylesheet" type="text/css" href="./css/index.css">
值得注意的是./
表示的也是相对路径,但是它表示的是当前这一级目录下
绝对路径
所有以/开头的都是绝对路径。
因为我们的项目部署到服务器上了,所以这里的绝对路径的根目录是/,表示tomcat这个容器下,这里不用纠结根目录表示的是tomcat容器中哪一个文件,因为我们写的时候并不会考虑到这个问题。只需要遵循虚拟路径+/相对路径
的写法即可
绝对路径怎么写呢?
绝对路径是由虚拟路径+/相对路径
组成的,==相对路径前面的/==在idea中就相当于webapp目录或者web目录、在eclipse中就相当于WebContent目录。
虚拟路径是什么呢?
在idea中虚拟路径就是我们配置tomcat是配置的application context
而在eclipse中的虚拟路径则是/项目名
idea写法举例
<link rel="stylesheet" type="text/css" href="/test_war_exploded/css/index.css">
当然我们并不建议这种写法,因为我们的application context
有可能会改变所以不能写死,这里建议使用EL表达式${pageContext.request.contextPath}
来动态获取项目的虚拟目录
动态写法举例
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/index.css">
2、引入外部js和引入css同理不做解释
3、form表单提交时的action写法问题
jsp内容如下
serlvet只做简单获取input中输入的东西
相对于web容器的绝对路径的写法
也就是虚拟目录+/相对路径
的方式### 写法举例
<form method="post" action="/test_war_exploded/doForm">
同样并不建议写死,建议使用el表达式来动态获取虚拟路径
相对路径的写法
<form method="post" action="doForm">
此时这个doForm先当于位于当前html页面的这一级域名目录下,就是这个
因为当前index.jsp位于这个位置,那么相对路径的写法也会是相对于这个级别的域名的
4、转发的路径写法问题
规则
- 转发实际上是服务器资源内部跳转的行为,所以我们在访问的写转发路径的时候不用写虚拟路径
- 并且我们在转发到另一个servlet或者jsp的时候可以不写/,写/和不写/效果上没有区别
serlvet代码如下
发送转发请求
xml注册的映射配置
访问doForm这个servlet
成功转发
5、重定向的路径写法问题
规则:
- 因为重定向本质上是两次请求,第一次请求然后告诉浏览器下一次访问的路径,然后根据这个路径进行第二次请求
- 所以重定向在写路径的时候必须使用虚拟目录
- 并且需要注意,一定要有/,不然会404
- 当然我们不建议写死,还是建议使用动态获取的方式
虚拟目录写死示范:
动态获取虚拟目录写法示范
注意这里不能省略index.jsp的/
6、serlvet的映射路径问题
7、ajax中的url问题
规则
1、完整路径的写法:包括协议名称、主机地址、端口、web项目名称等的完整请求路径
2、绝对于web容器的写法:不需要协议名、主机地址、端口、web项目名称,只需要请求的路径。
3、如果请求不以根路径开头,则该请求路径是相对于当前html所在的路径的。
声明:
ajax的路径问题参考该博客,该博客中的/webname
是eclipse中的叫法,在idea中是application context
https://blog.csdn.net/shenju2011/article/details/90748409