论绝对地址和相对地址

在电脑操作学习和互联网使用中,我们经常会接触绝对地址和相对地址的概念。这里,重点谈互联网上的,具体谈在做网站时,绝对地址和相对地址有什么区别?

绝对地址:互联网上的独立地址,在任何网站通过这个地址可以直接到达目标网页。包含主域名和目录地址。

相对地址:相对于网站的地址,当域名改变时,相对地址的“绝对地址”也发生变化。

假设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都是/表示下层的意思,而不是使用\,我觉得这是因为\容易产生转义字符的歧义问题所以才没有采用。不过说来也奇怪,我们计算机的磁盘路径却都是采用\来表示的,我们可以用”\\”转义表示\。当然你用/寻找磁盘路径也不会出错。系统也会自动转化成”\\”。

 

你可能感兴趣的:(论绝对地址和相对地址)