先说一下我的项目目录结构
webcontent--css(文件夹)---具体的各种css文件
          --js(文件夹)---具体的各种js文件
          --page(文件夹)---根据不同功能分类的文件夹(AA)---各种jsp文件
现在我在jsp文件中引用js和css文件
<script type="text/javascript" src="../js/jquery.js"></script>
<link href="../css/style2.css" rel="stylesheet" type="text/css" />
引用成功了,但是我对此引用文件的路径有些困惑,就引用js的src="../js/jquery.js"来说,此jsp文件的../应该是上一级的AA这一层,然而这一层是无论如何也找不到js这个文件夹的,如果我改成src="../../js/jquery.js"显然没有正确引用jquery.js,不知道我错在哪里,请高手指点,或者讲解一下,谢谢

解决方案 »

  1.   

    一般情况下最好用绝对路径 <%=basePath%>/js/jquery.js
    其中basePath是下面的值
    <%
     String path = request.getContextPath();
     String basePath = request.getScheme() + "://"
       + request.getServerName() + ":" + request.getServerPort()
       + path + "/";
    %>为什么要这么做?因为从静态的jsp路径来看它和js的路径相对关系是../js/,但是往往很多时候我们不是直接访问jsp页面的,是通过其他的jsp页面或者servlet,或者struts的action通过forward的方式转发过来访问的,这时候请求的当前路径就不是该jsp的路径,而是转发过来之前那个jsp,servlet或action的路径,所以和js的相对路径关系就可能不再是../js/了,而在实际使用中,访问同一个jsp可能由很多不同的来源,那么它的相对路径关系可能随时都可能改变,这时候jsp页面里写死的相对路径就无法访问到对应的资源了。所以要使用绝对路径访问。
      

  2.   

    应该用绝对路径而不是相对路径,否则后面很容易出现各种问题,建议修改为:<% String cp = request.getContextPath(); %>
    <script   type= "text/javascript "   src= "<%=cp%>/js/jquery.js "> </script> 
      

  3.   

    例如:
    假如我们要访问这个页面,http://localhost:8080/web/jsp/abc.jsp
    abc.jsp的相对路径是http://localhost:8080/web/jsp/,abc.jsp里引用了../js/jquery.js,这时候直接访问abc.jsp是没有问题的。
    但如果由以下三个请求转发到abc.jsp来访问
    1. http://localhost:8080/web/business/test/test.jsp 
    相对路径是http://localhost:8080/web/business/test/,访问js需要使用../../js/jquery.js
    2. http://localhost:8080/web/struts/action/test.action
    相对路径是http://localhost:8080/web/struts/test/,访问js需要使用../../js/jquery.js
    3. http://localhost:8080/web/servlet
    相对路径是http://localhost:8080/web/,访问js需要使用js/jquery.js这时候abc.jsp里的../js/jquery.js的死路径就不能正确访问到js了。
      

  4.   

    http://www.iteye.com/topic/352202看第二种情况的部分。
    应该是你的问题的解答。
      

  5.   

    你的目录结构是这种吗?
    WebContent
               --js
                 --test.js
               --page
                 --AA
                   --test.jsp
    如果是这样的话,那么在jsp里引用js的话,就这样就可以啊
    <script type="text/javascript" src="../../js/test.js"></script>
    但是这种方法在项目中使用可能不大好。一般web项目会加上设定的一个基准路径。
      

  6.   

    你说的我基本明白了,因为没有之前用过struts所以没有涉及这类问题,按照老的配置方法没出过问题。我在网上看到一篇文章说此时应该使用相对于Web工程的相对路径,http://www.blogjava.net/Johnny-Ajun/archive/2011/06/16/352440.html,这个路径我没有看懂,到底是怎么回事?
      

  7.   

    如果你的page下面有AA,然后再是jsp文件的话。引用就应该是前两级目录的,可能是缓存的问题,你清除一下缓存我这里测试过,按你说的目录结构,这样引用就OK
    <script type="text/javascript" src="../../js/jquery-1.6.js"></script>
    <script type="text/javascript" src="../../js/test.js"></script>
      

  8.   

    2楼的说得对,如果你用struts或servlet的话,就要用绝对路径, 不然跳转过去是不会正确的
      

  9.   

    有我用了struts的,普通这么用没有问题
      

  10.   

    http://www.blogjava.net/Johnny-Ajun/archive/2011/06/16/352440.html,这个路径我没有看懂,到底是怎么回事?===================
    这里讲的第一种就是相对路径,第三种就是绝对路径,跟我讲的一样
    至于他的第二种所谓的web相对路径的讲法是不对的,实际上还是第一种相对路径而真正的相对于web工程的绝对路径写法是:/ 代表url根路径,例如http://localhost:8080/web/js/jquery.js里的http://localhost:8080/,而./代表web工程根路径http://localhost:8080/web/
    所以你还可以这么写:
    1. /web/js/jquery.js
    2. ./js/jquery.js
      

  11.   

    你提供的第一绝对路径basePath和1. /web/js/jquery.js这个试过成功了,也不难理解,但./js/jquery.js
    这个没有成功!
    <script   type= "text/javascript "   src= "../js/jquery.js "> </script>
    <link   href= "../css/style2.css "   rel= "stylesheet "   type= "text/css "   /> 
    这个写法我是自己试试出来的,但是我认为是解释不通的,因为js和page(文件夹)平级,但是page下还有个文件夹admin,admin下面才是具体的jsp文件,之前没用struts之前用../../js/jquery.js都没有错的,但是正如你所讲用了struts之后计算路径不一样了,但是 也不至于是src= "../js/jquery.js "这种表达方式