我一直在研究Web应用程序(Java + Spring + Maven + HTML + CSS + js + JSP),现在我正在尝试将其部署到tomcat。 (我使用IntelliJ作为IDE)
我在代码中有很多相对路径,例如
pcm.!default {
type hw
card 1
}
ctl.!default {
type hw
card 1
}
或
<script type="text/javascript" src="./static/external/jquery-2.1.0.js">
当我使用tomcat在本地测试时,所有这些路径都可以正常工作。我将“应用程序上下文”设置为默认“/”,所以没问题。
将WAR部署到远程服务器到Tomcat时,问题就开始了。 WAR文件名是yarimelma-1.0.0.war ,以便在tomcat 下创建一个 /yarimelma-1.0.0 的上下文并提供服务我在这种情况下的申请。的(https://[mydomain]/yarimelma-1.0.0)
在这种情况下会发生什么,我的代码中的所有路径都无法访问,因为它试图找到js,例如,在https:// {mydomain} / static / js /下的 jquery.js 但由于已部署上下文,它实际上可以在https:// {mydomain} /yarimelam-1.0.0/static/js/jquery.js下访问。 我的ajax调用因为这个原因也不起作用,因为客户端试图对https://[mydomain]/yarimelma/connect执行ajax调用,但它实际上应该https://[mydomain]/yarimelma-1.0.0/yarimelma/connect
关于解决方案的想法?
1 - 我应该在弹簧配置或战争导出设置中将我的应用程序上下文设置为 /yarimelma-1.0.0 吗? 2 - 解决方案是什么?
由于
答案 0 :(得分:0)
我有一个类似结构的项目。
在我的配置文件中,我有:
<resources mapping="/resources/**" location="/resources/" />
通过有效地提供$ {webappRoot} / resources目录中的静态资源来处理对/ resources / **的HTTP GET请求。
现在在我的JSP中,我使用scriptlet获取资源路径,如:
<link href="<%=request.getContextPath()%>/resources/css/error.css" rel="stylesheet" type="text/css" />
使用request.getContextPath()可以获取应用程序的上下文(在您的情况下,在部署时,服务器中应用程序的上下文)
答案 1 :(得分:0)
您可以使用JSTL核心taglib,我相信这是最常用的方法。
将它包含在你的jsp:
中<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
并使用它:
<script type="text/javascript" src="<c:url value="/static/external/jquery-2.1.0.js"/>"></script>
它会自动关注您的上下文路径。
另一种选择是手动将上下文路径附加到您的网址,如@canillas建议的那样,但我建议使用${pageContext.request.contextPath}
而不是使用scriplets。
因此,您的网址可能如下所示:
<script type="text/javascript" src="${pageContext.request.contextPath}/static/external/jquery-2.1.0.js">