2013-05-17 3 views
3

Привет Я работаю над приложением, которое имеет странную проблему. Приложение отлично работает как в локальном tomcat, так и удаленном развертывании tomcat, но на некоторых модулях изменяется контекст URL-адреса.Изменение контекста URL-адреса между локальным сервером и tomcat

Вот один из примеров:

первый у меня есть это в моей 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, который идет к моему контроллеру mvc весны просто отлично. Однако в удаленном развертывании tomcat, где приложение находится под контекстом testapp, он должен перевести на XX.XX.XXX.XX:8080/testapp/customer/relations/add. Это не тот случай, он вместо этого делает это: XX.XX.XXX.XX:8080/customer/relations/add, который затем дает сообщение 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, проблема с весной или проблема с тимелеафом.

Любые подсказки относительно того, как я могу это решить? В противном случае мне пришлось бы поддерживать доступ к удаленным журналам, и мне потребовалось бы немного времени, чтобы получить учетные данные для доступа к ним.

+0

В качестве первого шага используйте Firebug или что-то, чтобы проверить URL-адрес исходящего запроса. Если в нем есть правильный контекст, вы будете знать, что посмотреть на стороне сервера. Если нет, то клиентская сторона.Он также может показывать перенаправление на неправильный URL-адрес, который может дать дополнительные подсказки. –

+0

Вы пытались установить действие th: action на th: action = "@ {'/ testapp/customer/relations/add /'}", чтобы увидеть, работает ли оно или нет? Я знаю, что это не правильный способ сделать это, но попробуйте сделать снимок. – brnrd

+1

Хорошо, это странно, но, видимо, мое приложение работает отлично. Я ничего не сделал, чтобы это исправить. Странно. Я просто оставил его, как в выходные. Возможно, проблема с сервером? – Nimchip

ответ

0

Проблема была на стороне сервера. По-видимому, были некоторые кеши, которые не были очищены, поэтому изменения в моем html/тимелеафе не прошли. Обратите внимание, что это также может быть проблемой нечистого кода, а также, возможно, локальными кешами браузера.

0

Учитывая, что страница, содержащая форму уже достигнута, вы можете просто использовать «ядро» TagLib для разрешения контекста формы в:

<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}"> 
+0

Я использую тимелеаф. См. Мой комментарий к другому ответу. – Nimchip

0

Всякий раз, когда вам пытаются получить доступ к URL-адрес или разместить данные в URL-адрес с помощью

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

или вам необходимо включить JSTL код

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

и использовать с: URL Тег для указания URLS как

<c:url value="/customer/relations/add/"/> 
+0

Это не нужно с тимелеафом. Помните, что я не использую традиционный просмотрщик имен для JSP. Проблема была что-то другое. – Nimchip