我有几个网页位于不同的目录中,我的目标是拥有某种有组织的结构,以便我可以访问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>
在这种情况下,我仍然可以自由移动文件,而不必返回每个文件。
我可以对我的方法有所了解吗?还有其他方法可以解决这个问题吗?
答案 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" />..
如果您更改文件夹名称或路径,则为此。你只需要改变配置