2

我很少有网页位于不同的目录中,我的目标是拥有某种有组织的结构,这样我就可以访问 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>

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

我可以对我的方法发表一些意见吗?还有其他方法可以解决这个问题吗?

4

2 回答 2

2

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

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

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

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

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

然而,这有一个警告:锚点<a href="#foo">也将与它相关。如果你这样做,你也需要考虑到这一点。

也可以看看:

于 2010-08-14T02:40:14.877 回答
1

毫米我不确定工厂是否是最合适的方法,也许它会起作用..我记得为此我使用了一个接口,我在其中实现了一些常量,包括 JS 和 CSS 文件夹路径

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" />..

这样,如果您更改文件夹名称或路径。您只需要更改配置

于 2010-08-14T01:31:08.293 回答