11
votes

Spring de base MVC Config: Pagenotfound en utilisant internalResourceViewresolver

J'essaie d'obtenir une première configuration de printemps 3 MVC en cours d'exécution.

Mon application s'exécute sur Tomcat, avec dans le contexte du serveur de "Grapevine"

Aux fins des tests, je 'm Essayer d'obtenir des demandes de http: // localhost: 8080 / vigne / test Pour rendre le contenu de web-inf / jsp / nosuchinvitation.jsp

Quand j'essaye cela, je reçois un 404 et les journaux suggèrent que mon JSP n'est pas présent: xxx

i Doit avoir mal configuré cela quelque part, mais je ne vois pas ce que j'ai fait de mal.

Voici tous les extraits pertinents.

web.xml: xxx

de mon contexte: xxx

contrôleur: xxx

journal: xxx


2 commentaires

Êtes-vous sûr qu'il n'y a pas d'erreur d'orthographe?


Dupliqué possible de Pas de cartographie trouvée Pour la demande HTTP avec URI [/web-inf/pages/apiform.jsp]


5 Réponses :


27
votes

Ceci est parce que le dans votre web.xml est trop "large". Une valeur de / * signifie que le servlet est configuré pour recevoir toutes les demandes, ce qui inclut la demande du servlet au JSP. Le message d'erreur que vous voyez est de Disternersservlet , qui reçoit sa propre demande transférée.

Vous devez choisir un plus spécifique , par ex. / xyz / * , de sorte que votre URL devienne alors http: // localhost: 8080 / vigne / xyz / test , et puis cela devrait fonctionner bien.


6 commentaires

Quelle est la différence entre / * et juste /? J'ai un webay de printemps configuré presque exactement de la même manière que celle de Marty, mais le mien fonctionne avec le servlet Dispatcher mappé sur /.


@Ben: / correspondra uniquement à l'URL racine, tandis que / * correspondra à toutes les URL.


Cela corrige le problème, merci. Hovewer, j'ai une question. Compte tenu d'un exemple de page, l'URL-motif / correspond à seulement exemple.com . Comment est-il possible que la demande de exemple.com/test est redirigé vers le servlet Dispatcher à ressort?


@ WOJCIECHGÓRSKI au démarrage, vos contrôleurs sont numérisés et les chemins nécessaires sont définis comme des servlets. Vous pouvez vérifier vos journaux pour O.S.S.S.M.M.A.ReQuestMappinghandlermappage et voir les chemins définis.


Selimober, je sais que ça marche. J'étais juste curieux pourquoi Ça fonctionne (le modèle URL devrait s'appliquer uniquement à l'URL racine, non aux "sous-pages")


@ Wojciechgórski C'est ce que je crois comprendre que, avec / uniquement les URL mappées sont transmises au servlet Dispatcher, ce qui pourrait être par exemple: / foo / bar / baz . D'autre part avec / * Chaque demande va à Dispatcher, elle sert à quoi elle peut et n'envoie pas non plus trouvé.



1
votes

solution 1 forte>: vous pouvez enregistrer votre servlet à * .html et * .json (ou xml, gif, png ...): xxx pré>

Solution 2 Strong>: Si vous souhaitez conserver votre servlet mappé à / * code>, ajoutez les éléments suivants à votre fichier Spring.xml: P>

<servlet-mapping>
  <servlet-name>jsp</servlet-name>
  <url-pattern>/WEB-INF/jsp/*</url-pattern>
 </servlet-mapping>

<servlet>
  <servlet-name>jsp</servlet-name>
  <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
</servlet>


0 commentaires

2
votes

Il suffit de remplacer / * sur / comme votre URL-motif . Cela fonctionnera ...


1 commentaires

Un peu expliquant pourquoi cela fonctionne serait également apprécié.



0
votes

méfiez-vous: cela pourrait être un message d'erreur trompeur. c'est seulement arrivé a moi.

même pensé que le message d'erreur contient de manière inattendue / contextname / ... Au début du chemin, il pourrait toujours s'agir d'une mauvaise gestion du préfixe internalResourceViewresolver: xxx

Ou le chemin de fichier lui-même.

Maintenant que j'ai réparé mon orthographe, cela fonctionne bien. Je ne sais pas pourquoi le contexte montre dans le message d'erreur et je me suis vraiment amené à ignorer ma typo stupide et à tenter d'essayer les merveilleuses autres contributions à cette question. Ne laissez pas cela vous arriver!

BTW, j'utilise le printemps 4.0.0 Libération.


0 commentaires

0
votes

Pour moi, j'ai résolu le problème en utilisant des modèles .jsp et non seulement .html.


0 commentaires