JSP、Servlet中的相对路径和绝对路径

阅读更多

你的应用访问地址是"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个规则全搞定,嘿嘿

你可能感兴趣的:(JSP,Servlet,浏览器,应用服务器,WAP)