`
zhangfy068
  • 浏览: 144883 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

相对路径与绝对路径(转)

 
阅读更多
你的应用访问地址是" http://192.168.0.1/app/"

  其中的"/app"是contextPath,可以从request.getContextPath()得到

  概念

  绝对路径和相对路径

  "/view/login.jsp"就是绝对路径,从根目录/开始写;

  "view/login.jsp"就是相对路径,"./view/login.jsp"也是相对路径,这种路径是相对于当前文件的目录来讲的。

  绝对地址和相对地址

  " http://192.168.0.1/app/login"就是绝对地址;

  "/login"就是相对地址,"view/login.jsp"也是相对地址,这个地址是相对于浏览器地址栏中的当前地址来讲的。

  原理

  1. 服务器解析的路径。

  Servlet forward to JSP

  JSP forward to Servlet

  JSP forward to JSP

  JSP include JSP

  可以从根目录/开始写绝对路径;也可以从本目录开始写,这样可用"."和".."来表示本目录和父目录。

  2. 客户端浏览器解析的路径。

  表单action路径

  redirect重定向路径

  超链接路径

  图片路径

  CSS路径

  Javascript文件路径以及里面要用到的路径

  绝对路径的解析,浏览器直接加在服务器地址后面来访问。例如"/login",浏览器会访问" http://192.168.0.1/login",路径里把"/app"丢失了。绝对路径前面一定要加上contextPath,否则部署环境一变,你的应用就找不到北了。

  相对路径的解析,浏览器以根据地址栏中的当前地址作为基准,把相对路径加上去来访问。例如当前地址栏地址是" http://192.168.0.1/view/login.jsp",那么相对路径"img/face.png"会被浏览器解析为" http://192.168.0.1/view/img/face.png"。

  forward到别的路径以后,浏览器地址栏的当前地址并不会变化,这种情况下,在JSP文件中使用相对路径就很容易发生错误,因为你还要关心forward前是个什么路径,如果forward了多次,或者上一个请求也是forward过来的,那么浏览器地址栏的当前地址根本就没法追踪。有的人说你可以base标签啊,回答:我的应用是WAP,没这个标签。有的人说你可以用变量追踪啊,这种办法很丑陋,很麻烦。

  结论

  1. 不要使用相对路径,统一使用绝对路径,为啥?好找呗。

  2. 在页面中使用相对地址时,一定要加上contextPath。为啥?原来部署在服务器根目录"/",现在想部署在"/app",你要不加上contextPath会死的比较难看。

  我自己写了一套标签,上面2个规则全搞定,嘿嘿
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics