本地服务器和 tomcat 之间的 url 上下文更改

Posted

技术标签:

【中文标题】本地服务器和 tomcat 之间的 url 上下文更改【英文标题】:url context changing between local server and tomcat 【发布时间】: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/'" 以查看它是否有效?我知道这不是正确的做法,但请尝试一下。 好吧,这很奇怪,但显然我的应用程序现在运行良好。我没有做任何修复它。这很古怪。我只是在周末保持原样。可能是服务器问题? 【参考方案1】:

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

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

【讨论】:

我正在使用百里香叶。请参阅我对其他答案的评论。【参考方案2】:

每当您尝试访问 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/"/>

【讨论】:

百里香叶不需要这个。请记住,我没有为 JSP 使用传统的视图解析器。问题是别的。【参考方案3】:

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

【讨论】:

以上是关于本地服务器和 tomcat 之间的 url 上下文更改的主要内容,如果未能解决你的问题,请参考以下文章

从虚拟主机的 URL 中删除 Tomcat 上下文(mod_jk、mod_rewrite)

从虚拟主机的URL中删除Tomcat上下文(mod_jk,mod_rewrite)

作为 Gradle Build 的一部分运行本地 Apache Web Server + Tomcat

从服务器上下载图片到本地

安装在服务器上的 WL 应用程序仍然指向适配器的本地 URL

在没有zookeeper,nimbus依赖的情况下以本地模式运行storm crawler