JavaWeb中的路径问题
一、html中的路径
1、无<base>
标签
路径前有/ | 路径前无/ |
---|---|
此时的斜杠等同于端口号后的斜杠 | 此时以地址栏路径为基准 |
eg:action="/a.tml" <=>localhost:8080/a.html |
eg: action="a.html" <=>地址栏当前路径下/a.html |
2、有<base>
标签
<base>
标签的用法
- 位置:必须位于
<head></head>
标签内- 定义和用法:标签为页面上的所有链接规定默认地址或默认目标。
通常情况下,浏览器会从当前文档的 URL 中提取相应的元素来填写相对 URL 中的空白。
使用 <base> 标签可以改变这一点。浏览器随后将不再使用当前文档的 URL,而使用指定的基本 URL 来解析所有的相对 URL。这其中包括<a>、<img>、<link>、<form>、<link>
等标签中的 URL。
属性 | 值 | 描述 |
---|---|---|
href(必选项) | URL | 规定页面中所有相对链接的基准 URL。 |
target(可选项) | _blank _parent _self _top framename |
在何处打开页面的链接 |
eg:
<base href="http://localhost:8080/test/">//注意最后的斜杠一定要有
<base target="_blank">//表示在新的窗口中打开链接
路径前有/ | 路径前无/ |
---|---|
表示<base> 标签中端口号后的/ |
表示在base标签的基础上 |
eg:<a href="/a.html"></a> <=>href="http://localhost:8080/a.html" |
eg:<action="a.html"> <=>action="http: //localhost:8080/test/a.html" |
二、Java中的路径(与<base>
标签无关)
类型 | 有/ | 无/ |
---|---|---|
重定向 | 表示端口号后的/ | 以地址栏路径为基准 |
转发 | 表示部署名后的/ | 以地址栏路径为基准 |
eg:地址栏路径为:http://www.baidu.com:80/test/user/b.html (test为项目部署名,可通过request.getContextPath获取)
- 重定向
//此时重定向的路径为:http://www.baidu.com:80/test/user/a.html
response.sendRedirect("a.html");
//此时重定向的路径为:http://www.baidu.com:80/a.html
response.sendRedirect("/a.html");
- 转发
//此时转发的路径为:http://www.baidu.com:80/test/user/a.html
request.getRequestDispatcher("a.html").forward(req.resp);
//此时转发的路径为:http://www.baidu.com:80/test/a.html
request.getRequestDispatcher("/a.html").forward(req.resp);
重定向地址栏改变,转发地址栏不变。所以如果经过转发后再使用相对地址就可能产生错误,导致404NOT FOUND。 因此一般书写路径时,都需以/开头。html中需要base标签。
限于作者水平有限,如发现错误还请大家在下方评论联系作者。