我几乎没有坐在不同目录中的网页,我的目标是拥有某种有组织的结构,以便我可以访问JS或CSS文件,而无需进行硬编码。

例如,目录结构是:

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

然后main.jsp和foo.jsp尝试引用某些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>

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

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

有帮助吗?

解决方案

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

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

(这 contextPath 本身已经以一个 /, ,所以您无需自己前缀)

您也可以使用 html <base> 标记这样 每一个 页面中的相对URL与之相对。这样您就不需要复制 ${pageContext.request.contextPath} 整个地方。

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

但是,这有一个警告:锚点, <a href="#foo"> 也将成为与之相关的。如果您这样做,您也需要考虑到这一点。

也可以看看:

其他提示

MM,我不确定工厂是否是最合适的方法,也许它会起作用。.我记得我使用了一个接口,在该界面中我实现了一些常数,包括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" />..

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top