如何在创建war文件时设置应用程序上下文?

时间:2017-11-08 19:54:11

标签: java spring spring-mvc deployment tomcat8

我一直在研究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 - 解决方案是什么?

由于

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