从不同目录位置访问时如何管理文件路径?
-
28-09-2019 - |
题
我几乎没有坐在不同目录中的网页,我的目标是拥有某种有组织的结构,以便我可以访问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" />..
这样,如果您更改文件夹的名称或路径。您只需要更改配置
不隶属于 StackOverflow