【发布时间】:2013-05-13 04:43:11
【问题描述】:
您好,我正在开发一个有奇怪问题的应用程序。该应用程序在本地 tomcat 和远程 tomcat 部署中都可以正常工作,但在某些模块上,url 上下文会发生变化。
这是其中一个例子:
首先我在我的Web.xml 中有这个以消除疑问:
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
我有以下表格:
<form name="cra" th:action="@{'/customer/relations/add/'}" method="POST">
<input type="hidden" name="craAcctCustNbr"/>
<input type="hidden" name="craChildAcctCustNbr"/>
</form>
由 javascript 调用。请注意,我使用的是 Thymeleaf 标签。通常这会修复 url,使其位于应用程序的上下文中。
现在在我的本地实例中,这转换为localhost:8080/customer/relations/add,它可以很好地转到我的 spring mvc 控制器。但是,在应用程序位于上下文testapp 下的远程tomcat 部署中,它应该转换为XX.XX.XXX.XX:8080/testapp/customer/relations/add。情况并非如此,而是这样做:XX.XX.XXX.XX:8080/customer/relations/add,然后产生带有消息 The requested resource (/customer/account-relations/add/) is not available. 的 404。应用程序的其余部分在远程部署服务器上运行良好,并且保持在上下文中。
经检查,当我打开页面并检查源时,它被正确定义为:
<form name="cra" method="POST" enctype="application/x-www-form-urlencoded" action="/testapp/customer/relations/add/">
<input type="hidden" name="craAcctCustNbr" />
<input type="hidden" name="craChildAcctCustNbr" />
</form>
但是,当动作发生时,它会进入我刚才解释的内容。
我无法检查应用程序日志,我不确定这是 tomcat 问题、spring security 问题还是 thymeleaf 问题。
关于我如何解决这个问题的任何线索?否则我将不得不坚持访问远程日志,这将花费我一些时间来获取访问它们的凭据。
【问题讨论】:
-
第一步,使用 Firebug 或其他工具检查传出请求 URL。如果其中包含正确的上下文,您就会知道在服务器端查看。如果没有,那么客户端。它还可能显示重定向到不正确的 URL,这可能会提供额外的提示。
-
您是否尝试将 th:action 设置为 th:action="@{'/testapp/customer/relations/add/'}" 以查看它是否有效?我知道这不是正确的做法,但请尝试一下。
-
好吧,这很奇怪,但显然我的应用程序现在运行良好。我没有做任何修复它。这很古怪。我只是在周末保持原样。可能是服务器问题?
标签: java tomcat spring-mvc spring-security thymeleaf