3

嗨,我正在开发一个有奇怪问题的应用程序。该应用程序在本地 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 控制器就好了。但是,在应用程序在上下文中的远程 tomcat 部署中,testapp它应该转换为XX.XX.XXX.XX:8080/testapp/customer/relations/add. 情况并非如此,而是这样做:XX.XX.XXX.XX:8080/customer/relations/add,然后产生带有 message 的 404 The requested resource (/customer/account-relations/add/) is not available.。应用程序的其余部分在远程部署服务器上运行良好并保持在上下文中。

经过检查,当我打开页面并检查源时,它被正确定义为:

    <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 安全问题还是 thymeleaf 问题。

关于我如何解决这个问题的任何线索?否则我将不得不坚持访问远程日志,这将花费我一些时间来获取访问它们的凭据。

4

3 回答 3

0

考虑到已经到达包含表单的页面,您可以简单地使用“核心”标签库来解析表单的上下文:

<html xmlns:c="http://java.sun.com/jsp/jstl/core"> ...

和...

<c:url value="/customer/relations/add/" var="customerUrl" />
<form name="cra" method="POST" enctype="application/x-www-form-urlencoded" action="${customerUrl}">
于 2013-05-22T01:05:14.457 回答
0

问题出在服务器端。显然有一些缓存没有被刷新,所以对我的 html/thymeleaf 的更改没有通过。请注意,这也可能是不干净的代码问题,也可能是本地浏览器缓存。

于 2013-05-23T22:58:35.743 回答
0

每当您尝试访问 url 或将数据发布到 url 时,请使用

"${pageContext.request.contextPath}/customer/..."

或者您需要包含 JSTL 代码

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

并使用 c:url 标签指定 URL,如

<c:url value="/customer/relations/add/"/>
于 2013-05-23T10:33:53.827 回答