spring-boot-2, обслуживающий простые старые страницы jsp БЕЗ контроллера?

#java #spring-boot #spring-mvc #jsp #war

#java #spring-boot #spring-mvc #jsp #Война

Вопрос:

Я пытаюсь преобразовать старое устаревшее приложение из JavaEE в spring-boot-2.

Как вы на самом деле обслуживаете простые старые JSP-страницы БЕЗ контроллера?

Я снова и снова гуглил это, и, как ни странно это звучит, я не могу понять это или найти простой пример, который действительно работает. Я просто продолжаю получать «404 Не найдено» при попытке доступа к JSP.

Я использую maven, упаковываю как файл WAR, и я нормально запускаю его как «взорванный» (что кажется лучшим выбором?), Но все еще не смог заставить его работать.

Я не понимаю, как это может быть так сложно, неужели это больше невозможно сделать в spring-boot-2?

Кто-нибудь может указать мне на рабочий пример? Или подробная инструкция, как это сделать?

РЕДАКТИРОВАТЬ: это то, что говорят документы Spring. Ограничения JSP:

«С Jetty и Tomcat это должно работать, если вы используете war-упаковку». Откуда:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle /

Но как именно? Это то, что я пытаюсь выяснить…

Комментарии:

1. В WAR где у вас есть файлы JSP.

2. На самом деле я перепробовал «все», что смог найти, но пока ничего не сработало. Что вы рекомендуете?

3. Страницы JSP компилируются в сервлеты с помощью движка сервлетов, поэтому вы хотите, чтобы Spring обслуживал ваши представления JSP со своих контроллеров, или вы хотите полностью обойти Spring и использовать JSP традиционным способом (который вы, кажется, спрашиваете, и который вообще не связан с Spring)?

4. @Kayaman — если код работает в контейнере JavaEE (или обычном старом Tomcat), но не при развертывании того же в Spring-Boot, я думаю, что проблема имеет какое-то отношение к Spring, не так ли? — смотрите правильный ответ ниже.

Ответ №1:

Проблема в том, что Spring Boot по умолчанию захватывает мир, т. Е. регистрирует DispatcherServlet с отображением сервлета / , тем самым ускоряя обработку *.jsp файлов в контейнерах сервлетов.

Чтобы позволить контейнеру сервлета нормально обрабатывать JSP, нам нужно убедиться, что Spring DispatcherServlet не перехватывает их, например, гарантируя, что он обрабатывает запросы только с определенными суффиксами или с определенными префиксами.

Например. если ни один путь JSP не начинается с /api/ , то мы можем использовать это для DispatcherServlet , т. Е. Любой запрос на /api/* будет обработан Spring Boot, а любой другой запрос будет обработан контейнером сервлета.

Для этого добавьте следующее в application.properties файл:

 spring.mvc.servlet.path = /api
  

Комментарии:

1. БИНГО!! Да, НАКОНЕЦ-ТО! ЭТО решило проблему!! СПАСИБО, Андреас, куда я могу отправить тебе пиво?!! 🙂

2. «Весенняя загрузка по умолчанию захватывает мир» — Хорошая строка, кстати. Это верно более чем в одном смысле! 🙂

Ответ №2:

вы где-нибудь объявили отображение сервлета? я считаю, что вам нужна точка входа, иначе это просто мертвый файл, указывающий в никуда

Комментарии:

1. Сопоставления сервлетов предназначены для сервлетов, afaik. — Простые старые страницы JSP, я бы максимально ожидал, что параметр конфигурации, указывающий на их местоположение, или что-то в этом роде.

2. извините, мое объяснение не удалось, я имел в виду, что в среде Spring вам нужно это настроить. Я не считаю свой ответ полностью неправильным, просто неполным