изменить поведение tomcat, когда страница не найдена (404) - PullRequest
0 голосов
/ 18 октября 2018

Может ли кто-нибудь дать совет о том, как настроить Tomcat, чтобы полностью избежать 404, и вместо этого, когда страница не найдена (особенно в тех случаях, когда должно быть запущено 404), вернуть содержимое index.html и 200 в качестве статуса?Позвольте мне объяснить, почему я хочу это сделать:

  1. У нас есть угловое приложение "www.app.exmpl / app", когда пользователь нажимает "www.app.exmpl / app"приложение отображается правильно и 200 вернулся.Возвращается index.html с угловым кодом приложения.

  2. Когда пользователь нажимает "www.app.exmpl / app / some_unexisted_url_in_file_system_path", tomcat пытается найти конечную точку или html-файл, который может обслуживать этот URL,и возвращает 404, и в web.xml у нас есть эта конфигурация:

    <error-page>
     <error-code>404</error-code>
     <location>/index.html</location>
    </error-page>
    

, которая приводит пользователя к ответу 404, но веб-приложение все равно загружается должным образом, так как index.html имеет угловое приложениев нем и после загрузки страница переписывает URL-адрес в соответствующий, например: «www.app.exmpl / app».

Когда пользователь нажимает «www.app.exmpl / app / url_handled_by_angular_app», тогда конечная точка страницы OR в разделе «url_handled_by_angular_app» не найдена, поэтому tomcat устанавливает код в 404 и отображает index.html, который возвращается пользователю,и на компьютере пользователя этот ответ отображается как угловое приложение без перезаписи URL, так как угловое приложение знает, как обрабатывать этот маршрут "url_handled_by_angular_app".

В общем, мне нужно просто избавиться от 404 и заменить их на 200, и в таких случаях просто визуализировать содержимое index.html.Какова лучшая практика для этой ситуации?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Если страница с ошибкой является не статической, а страницей JSP (или сервлетом), она может изменить состояние ответа (response.setStatus(200)) и предоставить статический файл (пересылать или включать его).

Хотя я предполагаю, что в случае использования, подобном вашему, было бы более целесообразно использовать ответ 302 (перенаправление клиента), например response.sendRedirect(application.getContextPath() + "/index.html").

0 голосов
/ 18 октября 2018

Можете ли вы предоставить более подробную информацию о вашем Routing Strategy.Ну, я думаю, вы должны использовать это {useHash: true}

Это может быть случай, если вы не использовали {useHash: true} и при перезагрузке его искать конкретный файл, который находится в пути URL, вы можетеузнать больше здесь https://thinkster.io/tutorials/angular-2-routing-navigation

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