一、web 中的相对路径和绝对路径
在 JavaWeb 中,路径分为相对路径和绝对路径两种:
1、相对路径
相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。
. 表示当前目录
../ 表示上一级目录
资源名 表示当前目录/资源名
2、绝对路径
绝对路径是指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径。(一般都是以"/"斜杠开头的)
HTML中的绝对路径(Absolute path)指带域名的文件的完整路径。
Web中的绝对路径:指带请求协议的路径,根据给出的请求路径可以准确定位到资源的路径,绝对路径=参照路径+相对路径
格式:http://ip:port/工程路径/资源路径
注意:在实际开发中,路径都使用绝对路径,而不是使用相对路径。
使用绝对路径的两种方式:
① 直接使用绝对路径;
② 也可以使用 <base>标签(参照路径)+ 相对路径 的方式
二、web 中 "/" 的意义
在 Web 项目中 /(斜杠)是一种绝对路径。
1、/ 斜杠被浏览器解析
/(斜杠) 如果被浏览器解析,代表着当前服务器的路径
地址格式:http://ip:port http://主机地址:端口号[到服务器]
有下面几种情况都是由浏览器解析的:
(1)html中的路径,如:
① img 标签和script标签的 src 的属性;
② a标签和link标签的 href 属性;
③ from标签的 action属性;
(2)重定向
response.sendRediect(“/”); 把斜杠发送给浏览器解析,得到 http://ip:port/
重定向没有任何局限,可以重定向web项目内的任何路径,也可以访问别的web项目中的路径,并且这里就用"/"区分开来,如果使用了"/"开头,就说明我要重新开始定位了,不访问刚才的web项目,自己写项目名,如果没有使用"/"开始,那么就知道是访问刚才那个web项目下的servlet,就可以省略项目名了。就是这样来区别。
2、/ 斜杠被服务器解析
/(斜杠) 如果被服务器解析,代表着当前项目的路径
地址格式是: http://ip:port/工程路径 http://主机地址:端口号/项目名[到项目]
以下几种情况都是由服务器解析的:
(1)web.xml 中的设置,如 /servlet1
(2)servletContext.getRealPath(“/”); 得到当前项目的真实路径
(3)request.getRequestDispatcher(“/”); (请求转发)
request.getRequestDispatcher(Stringpath).forward(request,response); //path:转发后跳转的页面,这里不管用不用"/"开头,都是以web项目根开始,因为这是请求转发,请求转发只局限与在同一个web项目下使用,所以这里一直都是从web项目根下开始的,这里可以看出,web项目根就是从该web项目名开始,所以我们请求转发时,只需要接着项目名后面需要访问的路径写就行了,特点:浏览器中url不会改变,也就是浏览器不知道服务器做了什么,是服务器帮我们跳转页面的,并且在转发后的页面,能够继续使用原先的request,因为是原先的request,所以request域中的属性都可以继续获取到。
总结:
(1)带斜杠的放在配置文件和Java代码中的路径为后台路径(后台路径的参照路径是web应用的根,例如http://127.0.0.1:8080/ServletDemo)
(2)带斜杠的放在 JSP 前台页面的前台路径(其参照路径是服务器的根,http://localhost:8080)
(3)没有以斜杠开头的路径,其参照路径就是当前的访问路径
(4)"> base标签会自动在当前页面的不以斜杠开头的路径前加上 basepath 的路径(即web项目的路径),使其变为绝对路径
IDEA 中JavaWeb项目目录结构:
三、Base 标签的作用
base标签是HTML语言中的基准网址标记,它是一个单标签,位于网页头部文件的head标签内,Title标签下面,一个页面最多只能使用一个base元素,用来提供一个指定的默认目标,也算是一种表达路径和连接网址的标记。
通俗的说,base 标签可以设置当前页面中所有相对路径工作时,让相对路径不再参考相对位置,只和基准地址拼接,然后来进行跳转。(注意:是相对路径的参照,对绝对路径无效)
常见的 url 路径形式分别有相对路径与绝对路径,如果 base 标签指定了目标,浏览器将通过这个目标来解析当前文档中的所有相对路径,包括的标签有(a、img、link、form)。
也就是说,浏览器解析时会在路径前加上base给的目标,而页面中的相对路径也都转换成了绝对路径。
格式:
<base href="http://localhost:8080/项目路径/ ">
<base href="/项目路径/" >
注意:base 后面的最后一个 /(斜杠) 不能省略,因为它表示一个目录,如果省略了,就代表一个资源。
使用了base标签就应带上href属性和target属性。
1、base的 href属性
比如由base制定了一个URL地址,接下来你所要调用的文件或图片等就无须再填写完整的地址,只需写上该文件名或图片名即可。
2、base target
target属性是网页窗口的打开方式,在base标签中设置该属性,那么页面中所有的链接都将遵循这个方式来打开网页,分别有如下几种选择:
_blank:在新窗口打开链接页面。
_parent:在上一级窗口中打开链接。
_self: 在当前窗口打开链接,此为默认值,可以省略。
_top: 在浏览器的整个窗口打开链接,忽略任何框架。
注意:<base>标签仅对相对地址有效,对于绝对地址是无效的。