SpringSource IDE不使用项目名称作为SpringMVC应用程序的根URL
使用SpringSource IDE创建Spring MVC模板项目时,我运行应用程序,根URL设置为默认包名的最后一个字: 例如,当我创建项目时,我将默认包设置为SpringSource IDE不使用项目名称作为SpringMVC应用程序的根URL,spring,spring-mvc,sts-springsourcetoolsuite,Spring,Spring Mvc,Sts Springsourcetoolsuite,使用SpringSource IDE创建Spring MVC模板项目时,我运行应用程序,根URL设置为默认包名的最后一个字: 例如,当我创建项目时,我将默认包设置为com.sample.myapp。当我运行应用程序时,它会在http://localhost:8080/myapp。为什么根URL不使用我的项目名,MyProject 这是一个问题,因为我必须将应用程序中的所有URL指定为/myapp/resources/css/mycss.css,但当我导出.war并将其部署到Tomcat服务器时,
com.sample.myapp
。当我运行应用程序时,它会在http://localhost:8080/myapp
。为什么根URL不使用我的项目名,MyProject
这是一个问题,因为我必须将应用程序中的所有URL指定为/myapp/resources/css/mycss.css
,但当我导出.war并将其部署到Tomcat服务器时,Tomcat需要的是项目名称(它想让我使用/MyProject/resources/css/mycss.css
。因此,我的所有链接在部署时都会断开(但在SpringSource IDE中本地运行tomcat时不会断开…)
还有其他人遇到过这个问题吗
下面的评论讨论示例:
<bean id="serviceProperties" class="org.springframework.security.cas.ServiceProperties">
<property name="service"
value="https://localhost:8443/MyProject/j_spring_cas_security_check" />
<property name="sendRenew" value="false" />
</bean>
不确定STS,但war文件名在pom文件中设置:
</dependencies>
<build>
<finalName>yourProject</finalName>
你的项目
(刚刚意识到你没有指定maven,哦)这取决于你如何运行应用程序。我假设你从SpringSource IDE(STS)中选择了“在服务器上运行”?如果你双击STS中的服务器定义,你会看到一个“模块”选项卡。从那里,你可以编辑“路径”并将其设置为任何你想要的。当你选择“在服务器上运行”,STS必须定义一个上下文路径,并将其默认为默认包的最后一个元素。如果我没记错的话,默认情况下Tomcat使用压缩或分解的.war的文件名。在任何一种情况下,您都可以忽略它
希望对您有所帮助。URL中主机和端口之后的第一部分称为上下文路径。在您的示例中,tomcat中的myapp.in上下文路径等于war文件的名称。如果您将war文件命名为ROOT.war,则不使用上下文路径 正如bimsapi提到的,您也可以在STS中更改上下文路径 但是:您可以而且应该使您的应用程序独立于上下文路径。如果您使用JSP,则使用
标记构建链接:
<c:url value="/resources/css/mycss.css" />
其中request是当前的HttpServletRequest
对象。
使用它可以使你的应用程序完全独立于实际的上下文路径,这大大简化了部署。你的假设是正确的,这正是我想要的。非常感谢!非常感谢。在花了这么多时间、更改servlet上下文、pom细节和清理/构建项目之后,我仍然找不到它。甚至在我开始问一个新问题之前,我都没有找到任何东西。这是非常有用的,谢谢。我开始寻找一种方法,不必将应用程序名称硬编码到我的URL中,这似乎会奏效!谢谢!Florian,还有一个问题。我的应用程序中也有一些URLtext-security.xml,其中我在上下文路径中硬编码。你知道使bean定义中的URL相对的推荐方法吗?它是什么类型的URL?如果它是用于spring安全的,那么只需提供不带上下文路径的相对URL,如下所示:Florian,请参阅我修订的帖子以获取URL类型的示例。抱歉,我不知道现在,但有一个相关的问题:
<c:url value="/items/index" var="cancel-url" />
<a href="${cancel-url}">Cancel</a>
request.getContextPath()