Mon gestionnaire transmet à internalresourceview 'apiForm' mais j'obtiens l'erreur 404 RequestURI =/WEB-INF/pages/apiForm.jsp. Je suis sûr que apiForm.jsp situé dans/WEB-INF/pages /
13: 45: 02,034 DEBUG [org.springframework.web.servlet.view.JstlView] - Transfert vers la ressource [/WEB-INF/pages/apiForm.jsp] dans InternalResourceView 'apiForm'
13: 45: 02,035 DEBUG [org.springframework.web.servlet.DispatcherServlet] - DispatcherServlet avec le nom 'testapp2' déterminant la dernière valeur modifiée pour [/ WEB-INF/pages/apiForm.jsp]
13: 45: 02,038 DEBUG [org.springframework.web.servlet.DispatcherServlet] - Aucun gestionnaire trouvé dans getLastModified
13: 45: 02,038 DEBUG [org.springframework.web.servlet.DispatcherServlet] - DispatcherServlet avec le nom 'testapp2' pour le traitement de [/WEB-INF/pages/apiForm.jsp ]
13: 45: 02,038 WARN [org.springframework.web.servlet.PageNotFound] - Aucun mappage trouvé pour une demande HTTP avec l'URI [/WEB-INF/pages/apiForm.jsp] dans DispatcherServlet avec le nom 'testapp2'
13: 45: 02,045 DEBUG [org.springframework.web.servlet.DispatcherServlet] - Requête complétée avec succès
13: 45: 02,048 DEBUG [org.springframework.web.servlet.DispatcherServlet] - Requête complétée avec succès
voici à quoi ressemble mon dispatcher.xml ..
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
On dirait que DispatcherServlet essaie de traiter la demande de apiForm.jsp, ce qui me suggère que le mappage de servlets web.xml dirige les demandes pour cet espace vers DispatcherServlet.
Vous pourriez avoir quelque chose comme ça?
<servlet-mapping>
<servlet>dispatcher</servlet>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Essayez d’appeler vos contrôleurs avec une autre extension (.do par exemple) et mettez à jour le mappage de servlets en fonction de vos besoins.
<servlet-mapping>
<servlet>dispatcher</servlet>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
Oui, je sais que je suis en retard pour cette fête, mais cela pourrait aider les autres.
Le conteneur de servlets choisit le mappage en fonction du plus long chemin correspondant. Ainsi, vous pouvez mettre ce mappage dans vos JSP et il sera choisi par-dessus le mappage/*.
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>/WEB-INF/pages/*</url-pattern>
</servlet-mapping>
En fait, pour Tomcat, c'est tout ce dont vous avez besoin, car jsp est une servlet prête à l'emploi. Pour les autres conteneurs, vous devez connaître le nom du servlet JSP ou ajouter une définition de servlet telle que:
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.Apache.jasper.servlet.JspServlet</servlet-class>
</servlet>
Ajoutez simplement <mvc:default-servlet-handler />
à votre configuration DispatcherServlet et vous avez terminé!
vous obtiendrez un No mapping found for HTTP request with URI
erreur
si vous avez scanné le mauvais paquet
par exemple, votre contrôleur est dans my.package.abc mais vous avez mis par erreur
_<context:component-scan base-package="my.package.efg*" />
_
ou
@ComponentScan("my.package.efg*")
ce qui dans le sens, votre contrôleur n'est pas analysé dans le contexte de l'application Web, lorsque la demande arrive non seulement dans l'URL, mais dans toute la classe n'est pas trouvée!
La solution qui m'a aidé est la suivante: ne mappez pas DispatcherServlet
sur /*
, mappez-le sur /
. La configuration finale est alors:
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
...
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Je pense avoir lu tout l’internet pour savoir comment faire en sorte que sitemesh gère les chemins html sans extension + les chemins d’API sans extension. J'étais enveloppé dans une veste droite pour comprendre cela, chaque virage semblait casser quelque chose d'autre. Puis je suis finalement tombé sur ce post.
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.Apache.jasper.servlet.JspServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>/WEB-INF/views/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>/WEB-INF/decorators/*</url-pattern>
</servlet-mapping>
Entrez ceci dans votre dispatcher-servlet.xml
<mvc:default-servlet-handler/>
Avec Spring 3.1 et Tomcat 7, j'ai l'erreur suivante:
org.springframework.web.servlet.DispatcherServlet noHandlerFound Aucun mappage trouvé pour la requête HTTP avec l'URI [/ baremvc /] dans DispatcherServlet avec le nom 'appServlet'
Et j'avais besoin d'ajouter à la configuration suivante de web.xml:
<welcome-file-list>
<welcome-file/>
</welcome-file-list>
Et l'application a fonctionné!
Une simple vérification peut être faite. J'utilise actuellement l'architecture Spring MVC avec hibernate. J'avais manqué d'écrire des annotations @Controller juste au-dessus du nom de la classe. Cela causait le problème pour moi.
@Controller
public class MyClass{
...
}
J'espère que cette vérification simple résoudra votre problème.
J'ai eu le même problème, bien sûr il y avait une petite différence. L'histoire était que lorsque je retirais la ligne ci-dessous:
<mvc:resources mapping="/resources/**" location="classpath:/resources/" />
Tout allait bien, mais en présence de cette ligne, la même erreur se produit.
Après quelques essais et erreurs, j'ai constaté que je devais ajouter la ligne ci-dessous à mon fichier de contexte d'application Spring:
<mvc:annotation-driven />
J'espère que ça aide!
Même réponse que Brad Parks ... plus de texte cependant
J'ai eu exactement le même problème et j'ai essayé les solutions ci-dessus avec beaucoup d'autres, toutes avec des résultats négatifs. J'ai même commencé avec un nouvel env. Dev et j'ai tout simplement installé un modèle spring-mvc-template et essayé de l'exécuter directement après l'installation (cela devrait fonctionner, mais j'ai échoué pour moi).
Pour moi, le problème était que j'utilisais jdk1.6 dans mon projet, mais l'environnement d'exécution sélectionné dans Eclipse était jdk1.7. La solution consistait à modifier les paramètres d'environnement d'exécution spécifiques du projet afin que ce projet soit défini sur jdk1.6. Cliquez avec le bouton droit de la souris sur projet -> Propriétés -> Java Compilateur -> Cochez la case "Activer les paramètres spécifiques au projet" si ce n'est déjà fait -> sélectionnez le jdk approprié (ou ajoutez-le s'il n'est pas installé).
J'espère que cela peut aider quelqu'un et lui faire gagner du temps, car j'ai passé les derniers jours à chercher la réponse aux quatre coins d'Internet. Je suis tombé par hasard dessus quand j'ai commencé à être désespéré et à chercher la solution dans des zones où elle (selon mon cerveau) était moins susceptible d'être trouvée. =)
Mes 2 centimes Merci!
Edit1: Utiliser les paramètres spécifiques du projet
Edit2: Je viens de me rendre compte que Brad Parks avait déjà répondu à cette question dans ce fil même. Eh bien, au moins, j'ai eu le "Editor" -badge de celui-ci = D
J'ai rencontré ce problème dans Eclipse Luna EE. Ma solution consistait simplement à redémarrer Eclipse et le chargement de servlet par magie avait commencé comme par magie.
Malheureusement, ceci est un message d'erreur de classe assez large. Une autre chose qui pourrait mal se passer est si vous manquez des classes/bocaux. Par exemple, s'il vous manque le fichier jar spring-expression, le dispatch-servlet ne sera pas en mesure de localiser votre contrôleur, peu importe les efforts que vous déployez et comment. corriger tout le reste est configuré.
Cela peut également arriver lorsque votre application ne compile pas, mais qu'elle est toujours lancée dans Tomcat. Lorsque j'ai vu cela se produire, il n'a pas été compilé car le projet comportait un JDK "spécifique au projet" et le code a été extrait sur une machine ne disposant pas de ce JDK spécifique. Eclipse a été remplacé par défaut par un JRE, et non par un JDK, puis l'application n'a pas été compilée.
Pour résoudre ce problème dans notre cas spécifique, nous avons simplement désactivé "Paramètres spécifiques au projet" ici:
"Projet | Propriétés | Java Compilateur"
Voici des informations plus détaillées sur la façon de procéder: https://stackoverflow.com/a/2540730/2651
"/ openStudentPage" est la page que je veux ouvrir en premier.
@RequestMapping(value = "/", method = RequestMethod.GET)
public String index(Model model) {
return "redirect:/openStudentPage";
}
@RequestMapping(value = "/openStudentPage", method = RequestMethod.GET)
public String listStudents(Model model) {
model.addAttribute("student", new Student());
model.addAttribute("listStudents", this.StudentService.listStudents());
return "index";
}
Ce dont vous avez besoin est d’avoir un contrôleur qui réponde à l’url en premier et qui restitue ensuite votre jsp. Voir ceci lien pour une solution .