2016-11-28 3 views
2

Я работаю с Angular2 и Apache Tomcat 8. При открытии моего сайта с корневым URL-адресом он работает и нажимает кнопки перенаправления на определенные URL-адреса. Но при открытии вручную определенного URL-адреса или перезагрузке веб-страницы мне дается 404.Angular2 Маршрутизация в Apache Tomcat не работает с перенаправлением

Я нашел это решение: Angular 2.0 router not working on reloading the browser, но нет объяснения, как его решить с помощью tomcat.

Я попробовал это в web.xml из tomcat8:

<servlet> 
    <servlet-name>html-mapping</servlet-name> 
    <jsp-file>/index.html</jsp-file> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>html-mapping</servlet-name> 
    <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

Тогда у меня нет 404 больше (он загружает все файлы, как на main.bundle.js), но только «Загрузка Angular2 ... "отображается текст, и он не продолжает открывать WebApp.

ответ

-1

У меня была эта проблема, и я попробовал много вариантов, чтобы решить ее, не получив при этом чистого решения, которое я хотел. Я хотел бы обслуживать файл index.html без механизма шаблонов. Но когда я это сделал, я продолжал получать 404, когда обновлялся. Причина в том, что приложение неправильно отслеживает ваши пути. Ну, он делает это правильно, но не так, как вы хотите.

Для меня мое решение было npm install hbs. Используя рули в качестве механизма шаблона вслух меня, чтобы создать одну страницу index.hbs, откройте приложение до angular2. Я использую его только для одной страницы и по какой-то причине дает мне функциональность, которую я хочу для обновления, не получая 404.

Если вы хотите, чтобы этот маршрут просто добавили его в app.js и создали новый индекс .hbs. Затем добавьте его в шаблон двигателя, как это,

// view engine setup 
app.set('views', path.join(__dirname, 'public')); 
app.set('view engine', 'hbs'); 

Другой путь заключается в использовании метода HashBang, Вы можете увидеть информацию о том, что в this answer here,

мне не нравится этот маршрут, потому что он добавляет хештегов к URL-адресу, который вызывает другие неприятные проблемы. Я нашел самый чистый способ просто использовать рули. В основном вам просто нужно изменить текущий файл index.html на .hbs, а затем добавить его в свой файл app.js в качестве приложения. Просто убедитесь, что ваш путь правильно, поэтому он знает, где его найти.

+0

Это кажется простым, но у меня нет файла app.js. Где я могу найти его? – L3n95

0

Только что решил этот вопрос по проекту. Все, что здесь необходимо, это создать очень простой сервлет и предоставить сервлет с отображением, которое вам нужно, чтобы разрешить закладок/обновление. Отсюда ваш сервлет ничего не делает:

request.getRequestDispatcher("/index.html").forward(request, response); 

Это должно позаботиться об этом.

+0

Итак, этот сервлет находится в корневой папке Tomcat и в методах get/post/... он вызывает этот requestDispatcher? – L3n95

0

У меня была аналогичная проблема. Причина в том, что виртуальные URL-адреса, используемые в Угловой маршрутизации, рассматриваются как файлы Tomcat, поэтому 404, когда файл не существует. Я решил это с URL rewriting.