从不同的目录位置访问时如何管理文件路径?

时间:2010-08-14 01:07:02

标签: html jsp file-structure

我有几个网页位于不同的目录中,我的目标是拥有某种有组织的结构,以便我可以访问js或css文件,而无需对路径进行硬编码。

例如,目录结构是:

root --- js --- some.js
      |
      |--css --- some.css
      |
      |---pages ---- main.jsp
      |
      |---other----foo---- foo.jsp
                 |
                 |--bar --- bar.jsp  

然后main.jsp和foo.jsp尝试引用some.js但必须有不同的路径。

( main.jsp )

<script type="text/javascript" src="../js/some.js"></script>

( foo.jsp)

<script type="text/javascript" src="../../js/some.js"></script>

如果我想更改main.jsp或foo.jsp的位置,这是不理想的,我必须回到每个文件并手动更改路径。

我正在考虑让工厂类具有每个文件的完整路径,以便它看起来像:

<script type="text/javascript" src=<% Factory.getFullPath(some.js) %> ></script>

在这种情况下,我仍然可以自由移动文件,而不必返回每个文件。

我可以对我的方法有所了解吗?还有其他方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

使用上下文相对路径。它将使路径绝对到域根。您可以按HttpServletRequest#getContextPath()获取上下文路径。在JSP中,${pageContext.request}可以使用HttpServletRequest

<script type="text/javascript" src="${pageContext.request.contextPath}/js/some.js"></script>

contextPath本身已经以/开头,因此您无需自己添加前缀

您还可以使用HTML <base>标记进行设置,以便页面中的每个相对网址都相对于它。这样您就不需要在所有地方复制${pageContext.request.contextPath}

<base href="${pageContext.request.contextPath}"></base>
<script type="text/javascript" src="js/some.js"></script>

但是有一点需要注意:像<a href="#foo">这样的锚点也会变得相对于它。如果你这样做,你也需要考虑到这一点。

另见:

答案 1 :(得分:1)

mm我不确定工厂是否是最合适的方式,也许它会工作..我记得那个我使用了一个接口,我实现了一些常量,包括JS和CSS文件夹路径< / p>

public interface Configuration {
   public static final String SERVER_URL = "http://localhost:8080/";
   public static final String CSS_URL = SERVER_URL + "css/";
   public static final String JS_URL = SERVER_URL + "js/";
}

然后我必须在servlet中导入这个接口并像这样调用它:

...src="<% Configuration.JS_URL %>some.js" />..

如果您更改文件夹名称或路径,则为此。你只需要改变配置