J'ai lu plusieurs docs et je ne comprends pas: je sais que je fais quelque chose de mal mais je ne comprends pas quoi. J'ai un site entièrement généré dynamiquement: il n'y a pratiquement pas de contenu statique.Java JSP/Servlet: servlet du contrôleur jetant le fameux débordement de pile
Donc, essayer de comprendre JSP/Servlet, j'ai écrit mon propre « contrôleur avant » intercepter chaque requête, il ressemble à ceci:
<servlet-mapping>
<servlet-name>defaultservlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Fondamentalement, je veux une demande de l'utilisateur, comme:
- example.org
- example.org/bar
- example.org/foo.html
pour passer par une servlet par défaut que j'ai écrite.
Le servlet examine ensuite l'URI et trouver auquel .jsp la demande doit être envoyée, et fait ensuite, après avoir réglé tous les attributs correctement, un:
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/jsp/index.jsp");
dispatcher.forward(req, resp);
Lorsque j'utilise un motif d'URL (dans web.xml) comme, disons, *.html
, tout fonctionne bien. Mais quand je le change en /*
(pour vraiment tout intercepter), j'entre dans une boucle sans fin et il finit avec ... StackOverflow :)
Lorsque la demande est envoyée, est l'URI ".../WEB-INF/jsp/index.jsp " lui-même apparié par le web.xml filtre/* que j'ai défini?
EDIT apparemment, non, parce que c'est une application exacte index.jsp et, par conséquent, il contourne l'url motif web.xml. Donc, je ne comprends toujours pas comment je peux entrer dans cette boucle sans fin.
Comment dois-je faire si je veux tout intercepter en utilisant un/* url-pattern et être capable d'envoyer/transférer /?
Je ne pose pas de questions sur les spécifications/Javadocs ici: je suis vraiment confus au sujet de la situation dans son ensemble et j'ai besoin d'explications sur ce qui pourrait se passer. Est-ce que je ne suis pas supposé intercepter vraiment tout?
Si je peux tout intercepter, que dois-je savoir en ce qui concerne l'expédition/l'expédition?
connexes: http://stackoverflow.com/questions/1069442/requestdispatcher-forward-loop – leonbloy
@leonbloy: oh dang merci ... je vois. De BalusC 'réponse apparemment ce n'est pas une bonne idée d'utiliser "/ *" pour le mappage de servlet :( – NoozNooz42
s'il vous plaît vider le code complet de trace de la pile/classe ici – techzen