Spring RedirectView ведет себя по-разному в разных установках Tomcat - PullRequest
5 голосов
/ 26 января 2011

У меня есть 2 экземпляра кота. оба находятся за прокси-сервером Apache httpds. мой код в контроллере Spring выглядит так:

@RequestMapping(value = "/doSuperSexyStuff", method = RequestMethod.GET)
public String viewSuperSexyStuff() {
    return "redirect:/mySuperSexyStuff";
}

На моей первой установке tomcat в Windows у меня somedomain1.dev перенаправлен на http://localhost:8080/myapp, и все работает без нареканий. редирект переходит на http://somedomain1.dev/mySuperSexyStuff

В другой установке tomcat (которая находится в Linux) перенаправление работает относительно пути контекста, и пользователь в итоге получает http://somedomain2.dev/myapp/mySuperSexyStuff, что, очевидно, неверно.

Что я должен сделать для Spring, чтобы игнорировать путь контекста и просто перенаправить пользователя туда, где он "принадлежит"?

Все URL в моем приложении являются абсолютными (все, включая ссылки в jsps, URL-адреса перенаправления и все места, где используются ссылки). Я думаю, что это неправильный способ сделать что-то: если мне придется реализовать HTTPS-версию сайта, у меня будут проблемы. Поэтому, если вы считаете, что я должен что-то кардинально изменить в своем подходе, пожалуйста, укажите мне правильное направление.

Ответы [ 3 ]

8 голосов
/ 12 января 2013

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

@RequestMapping(value = "/doSuperSexyStuff", method = RequestMethod.GET)
    public View viewSuperSexyStuff(){
    return new RedirectView("/mySuperSexyStuff");
}

Представление перенаправления имеет конструктор, который принимает логический contextRelative, поэтому следующее будет делать противоположное приведенному выше:

return new RedirectView("/mySuperSexyStuff", true);

Все ваши URL должны быть относительными по контексту, если вы действительно не указываете их на ваш сайт, поэтому ссылки на CSS, изображения и т. Д. Должны использовать теги jsp <c:url /> для разрешения путей.

0 голосов
/ 05 июня 2011

В документации Spring для MVC сказано, что путь всегда должен быть относительно вашего контекстного пути.

Насколько я вижу, у вас есть два варианта:

  • Использование в вашем перенаправлении абсолютного пути, например "http://somedomain. ..."

  • Проверьте конфигурацию пути к контексту веб-приложения

Надеюсь, это поможет сделать еще один шаг ...

0 голосов
/ 05 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...