Я думаю, что вы получаете 404, потому что вы запрашиваете http://localhost/route, которого нет на сервере tomcat. Так как Angular 2 использует маршрутизацию html 5 по умолчанию, а не хэши в конце URL, обновление страницы выглядит как запрос другого ресурса.
При использовании угловой маршрутизации на tomcat вам необходимо убедиться, что ваш сервер будет сопоставлять все маршруты в вашем приложении с вашим основным index.html при обновлении страницы. Есть несколько способов решить эту проблему. Куда бы ты ни подходил, ты можешь пойти на это.
1) Поместите ниже код в web.xml вашей папки развертывания:
<error-page>
<error-code>404</error-code>
<location>/index.html</location>
</error-page>
2) Вы также можете попробовать использовать HashLocationStrategy с # в URL для маршрутов
Попробуйте использовать:
RouterModule.forRoot (маршруты, {useHash: true})
Вместо:
* * RouterModule.forRoot тысячи двадцать-одина (маршруты) * * 1 022
С HashLocationStrategy ваши URL будут выглядеть так:
http://localhost/#/route
3) Tomcat URL Rewrite Valve: переписать URL-адреса, используя конфигурацию уровня сервера для перенаправления в index.html, если ресурс не найден.
3.1) Внутри папки META-INF создайте файл context.xml и скопируйте в него приведенный ниже контекст.
<? xml version='1.0' encoding='utf-8'?>
<Context>
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
</Context>
3.2) Внутри WEB-INF создайте файл rewrite.config (этот файл содержит правило перезаписи URL и используется tomcat для перезаписи URL).
Внутри rewrite.config скопируйте содержимое ниже:
RewriteCond %{SERVLET_PATH} !-f
RewriteRule ^/(.*)$ /index.html [L]