在电脑操作学习和互联网使用中,我们经常会接触绝对地址和相对地址的概念。这里,重点谈互联网上的,具体谈在做网站时,绝对地址和相对地址有什么区别?
绝对地址:互联网上的独立地址,在任何网站通过这个地址可以直接到达目标网页。包含主域名和目录地址。
相对地址:相对于网站的地址,当域名改变时,相对地址的“绝对地址”也发生变化。
假设2个网站A:www.seowhy.com B: www.baidu.com
这2个网站的根目录下有都一个网页,比如:404.html
在这两个网站上,我们做同样的一个链接 /404.html (相对地址)
在网站A上,指向的是 www.seowhy.com/404.html
在网站B上,指向的是 www.baidu.com/404.html
如果你希望在A网站上的 /404.html 指向B网站,那么你需要写 www.baidu.com/404.html(绝对地址)。
上面是泛谈了两者的区别,最近我在学习javaweb时候,更深入的了解两者的用法与区别,下面我将用具体的例子作解释。
相信大家都不陌生Servlet中请求转发,下面我列出了两种转发方式。
ServletContext context = getServletContext();
RequestDispatcher dispatcher = context.getRequestDispatcher(path); dispatcher.forward(request,response);
这两种方式都实现了请求转发,实现上都达到一样的效果;。两者的区别就是在path上,前者的path必须为绝对路径,后者的path既可以为绝对路径也可以为相对路径。所谓绝对路径就是以符号”/”开头的路径,”/”表示当前web应用的url入口,而相对路径就是指相对于当前文件的路径,不以”/”开头。下面我们来看一个例子就明白了。
examcodeServlet:
RequestDispatcher dispatcher = request.getRequestDispatcher("/register.jsp"); dispatcher.forward(request, response);
上面的servlet存在于MyWebApp的工程下的一个java程序。上面采用绝对路径,/代表 localhost:8080/MyWebApp,所以请求自己自然就转发到localhost:8080/MyWebApp/register.jsp
假如将path改为”register.jsp”,那么这种情况就有所不同了。先看一下examcodeServlet在web.xml配置。
<servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>examCode</servlet-name> <servlet-class>com.app.examCodeServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>examCode</servlet-name> <url-pattern>/examCode</url-pattern> </servlet-mapping>
examcodeServlet的url的寻址路径采用/examCode,上面我们说过了/的用法,这里就不重复了。
可以得到url:localhost:8080/MyWebApp/examCode,而它的物理路径是D:/MyWebApp/src/com/app/examCodeServlet.java,讲清楚了这个问题,我们回到上一个问题,path改”register.jsp”后的变化,首先从web.xml中找到当前的servlet的寻址路径也就是.这里的寻址路径为localhost:8080/MyWebApp/examCode,然后以这个localhost:8080/MyWebApp为根目录,path的实际值就是localhost:8080/MyWebApp/register.jsp。相对路径的意思,大家应该也都明白了吧。就是指在寻址的url的层面上处于同一目录下面。
下面我想说一下重定向里面的路径问题.
response.sendRedirect(path);
这里也是存在绝对和相对路径的问题,但是和上面的请求转发又有点不一样。这里的”/”也表示绝对路径,但是不是相对于Web应用的绝对路径,而是相对于当前服务器的根目录路径的url,”/success.jsp” 就是指localhost:8080/success.jsp,相对路径的使用和请求转发是一样的。此外还存在一种以”http://”开头的路径,这代表一个完整的url。
不知道大家发现没有网页的url都是/表示下层的意思,而不是使用\,我觉得这是因为\容易产生转义字符的歧义问题所以才没有采用。不过说来也奇怪,我们计算机的磁盘路径却都是采用\来表示的,我们可以用”\\”转义表示\。当然你用/寻找磁盘路径也不会出错。系统也会自动转化成”\\”。