Вопрос: Spring RedirectView ведет себя по-разному в разных установках tomcat


У меня есть 2 экземпляра tomcat. оба находятся за прокси-серверами apache. мой код в контроллере 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 на сайте, у меня будут проблемы. Поэтому, если вы думаете, что я должен что-то изменить в своем подходе, пожалуйста, укажите мне в правильном направлении.


4


источник


Ответы:


Вместо того, чтобы возвращать String, которая очень негибкая, рассмотрим возможность возврата View:

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

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

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

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


7



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


0



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

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

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

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

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


0