Angular2 Routing dans Apache Tomcat ne fonctionne pas avec la redirection

Je travaille avec Angular2 et un Apache Tomcat 8. Lorsque j’ouvre mon site Web avec l’URL racine, cela fonctionne et cliquer sur des boutons redirige vers les URL spécifiques. Mais en ouvrant manuellement une URL spécifique ou en rechargeant la page Web, cela me donne un 404.

J’ai trouvé cette solution: le routeur Angular 2.0 ne fonctionnait pas sur le rechargement du navigateur, mais il n’y a aucune explication sur la façon de le résoudre avec un tomcat.

J’ai essayé ceci dans le web.xml de tomcat8:

 html-mapping /index.html   html-mapping /*  

Ensuite, je n’ai plus de 404 (il charge tous les fichiers comme le fichier main.bundle.js) mais seul le texte Angular2 “Chargement …” est affiché et il ne continue pas à ouvrir la WebApp.

Je viens de résoudre ce problème sur un projet. Il suffirait ici de créer un servlet très simple et de fournir à ce servlet le mappage dont vous avez besoin pour activer la mise en signet / l’actualisation. De là, votre servlet ne fait que:

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

Cela devrai prendre soin de ça.

J’avais un problème similaire. La raison en est que les URL virtuelles utilisées dans le routage angular sont traitées comme des fichiers par Tomcat, d’où le 404 lorsque le fichier n’existe pas. Je l’ai résolu avec la réécriture d’URL .

J’ai eu ce problème et j’ai essayé beaucoup d’options pour le résoudre sans vraiment obtenir une solution propre que je voulais. Je voulais diffuser mon fichier index.html sans moteur de template. Mais quand je l’ai fait j’ai continué à obtenir le 404 quand je me suis rafraîchi. Les raisons en sont que l’application ne suit pas correctement vos chemins. Eh bien, il le fait correctement, mais pas comme vous le souhaitez.

Pour moi, ma solution était npm install hbs. Utiliser le guidon comme moteur de modèle me permet de créer une page index.hbs, puis de transférer l’application à angular2 . Je ne l’utilise que pour cette seule page et pour quelque raison que ce soit, cela me donne la fonctionnalité que je souhaite pour rafraîchir sans obtenir le 404.

Si vous voulez prendre cette route, ajoutez-la simplement à app.js et créez un nouveau fichier index.hbs. Puis ajoutez-le au moteur de template comme ceci,

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

L’autre itinéraire consiste à utiliser la méthode HashBang. Vous pouvez voir des informations à ce sujet ici ,

Je n’aime pas cette voie car elle ajoute des hashtags à l’URL, ce qui provoque d’autres problèmes ennuyeux. J’ai trouvé la méthode la plus propre pour utiliser simplement les guidons. Fondamentalement, il vous suffit de changer votre fichier index.html actuel en .hbs , puis de l’append à votre fichier app.js en tant que moteur d’application. Assurez-vous que votre chemin est correct afin qu’il sache où le trouver.