J'ai déjà vérifié presque tous les articles pertinents sur stackoverflow, mais je ne peux tout simplement pas résoudre mon problème.
Voici le code: web.xml:
<display-name>Spring3MVC</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</context-param>
<listener>
<listener-class> org.springframework.web.context.ContextLoaderListener </listener-class>
</listener>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.html</url-pattern>
<url-pattern>/</url-pattern>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
</web-app>
spring-servlet.xml:
<context:component-scan base-package="com.mycompany.elso" />
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
<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/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
monContrôleur:
public class myController {
@RequestMapping("/hello")
public ModelAndView helloWorld() {
String message = "Hello World, Spring 3.0!";
return new ModelAndView("hello", "message", message);
}
}
Pages Web/index.jsp:
<html>
<head>
<title>Spring 3.0 MVC Series</title>
</head>
<body>
<a href="hello.html">Say Hello</a>
</body>
</html>
Pages Web/WEB-INF/jsp/hello.jsp:
<html>
<head>
<title>Spring 3.0 MVC Series: Hello World - ViralPatel.net</title>
</head>
<body>
${message}
</body>
</html>
Ainsi, lorsque je lance l'application, l'index.jsp est chargé correctement, mais lorsque je clique sur l'icône href pour accéder à hello.jsp, j'ai obtenu une erreur 404 et le journal du serveur indique:
No mapping found for HTTP request with URI [/Elso/hello.html] in DispatcherServlet with name 'spring'
J'ai consulté des dizaines d'articles de ce genre, mais je ne trouve pas l'erreur, personne n'a la moindre idée de ce que cela pourrait être?
Vous pouvez essayer d'ajouter une annotation @Controller
au-dessus de votre classe myController et essayer l'url suivante /<webappname>/my/hello.html
. Ceci est dû au fait que org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping
ajoute le préfixe / my à chaque RequestMapping de la classe myController.
Ajouter
<mvc:default-servlet-handler/>
à spring-servlet.xml
Si vous utilisez
<mvc:annotation-driven/>
assurez-vous que votre spring-servlet.xml est correct
<context:component-scan base-package="com.....controller" /> tag.
Fondamentalement, vous devez inclure tous les packages pour lesquels vous avez utilisé l'annotation dans votre code Java.
De plus, assurez-vous de ne pas dupliquer composant-scan (pour la découverte de beans). Si votre XML de configuration contient déjà l'élément, toutes les classes de votre contrôleur annotées par @ ComponentScan (basePackages = ... doivent être débarrassées de cette annotation.
J'ai résolu mon problème avec: Java Chemin de construction -> Bibliothèque système JRE -> Édition -> Autre JRE -> -> Terminer
Comme il était configuré dans le dossier JDK, il donnait Exception
Veuillez vérifier votre répertoire [PROJECT_NAME]\target\classes
pour voir si myController.class
est généré ou non.
Si ce n'est pas le cas, veuillez vérifier si votre code source Java _ contient des erreurs de compilation.
Assure-toi
<mvc:annotation-driven/>
<context:component-scan base-package="com.hireartists.web.controllers"/>
pointe vers le bon package contenant les contrôleurs.
Essayer:
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Travaillé pour moi!
Si vous utilisez le code Java basé sur la configuration Spring MVC, activez DefaultServletHandlerConfigurer
dans l'objet WebMvcConfigurerAdapter
.
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
Vérifiez vos xmlns Bean ..
J'ai également eu le même problème, mais je l'ai résolu en ajoutant mvc xmlns.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
<context:component-scan base-package="net.viralpatel.spring3.controller" />
<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/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
Si vous voulez servir des fichiers .html, vous devez ajouter ceci <mvc:default-servlet-handler />
dans votre fichier de configuration printanier. Les fichiers .html sont statiques. J'espère que cela peut aider quelqu'un.
l'ajout de <mvc:annotation-driven/>
a fonctionné pour moi. Ajoutez-le avant la ligne <context:component-scan ............/>
J'ai eu exactement la même erreur et il m'a fallu beaucoup de temps pour la comprendre. C’est très probablement dû à des erreurs de compilation, les classes Java n’ont pas été publiées dans votre servlet. Vérifiez ceci en allant sur le serveur que vous utilisez\tmp1\wtpwebapps [PROJECT_NAME]\WEB-INF\classes\et essayez de trouver vos classes de contrôleur pour voir si elles ont été publiées ou non. Sinon, vous devez aller au fond des erreurs de compilation.
si vous utilisez maven, exécutez la commande maven install avant d'exécuter votre application Web sur un serveur, car elle génère un fichier de classe pour votre contrôleur. D'après mon expérience, c'est ce que votre application manquait.
Ajoutez @Controller
à votre contrôleur ou à l'endroit où vous avez le @RequestMapping
pour vous.
Cela a fonctionné pour moi tout en déployant une application similaire.
Si vous utilisez maven comme outil de génération de projet, générez votre projet correctement, les modifications apportées au code et aux fichiers XML ne sont pas prises en compte après les compilations.
J'ai eu le même problème et après beaucoup de recherches, j'ai découvert que les classes n'étaient pas publiées dans mon dossier cible. J'ai donc exécuté les deux commandes ci-dessous à partir de cmd
Étonnamment, j'ai pu accéder à la page et l'erreur a disparu. Les mêmes peuvent être vérifiés à partir du dossier cible où vous pourrez trouver les classes conformes qui manquaient auparavant.
Si vous dépendez de Spring Social , vérifiez que vous avez configuré un bean Web Controller:
import org.springframework.context.annotation.Bean;
import org.springframework.social.connect.web.ConnectController;
import org.springframework.social.connect.ConnectionFactoryLocator;
import org.springframework.social.connect.ConnectionRepository;
...
@Bean
public ConnectController connectController(ConnectionFactoryLocator connectionFactoryLocator, ConnectionRepository connectionRepository) {
return new ConnectController(connectionFactoryLocator, connectionRepository);
}
Ce n'est pas trouver les contrôleurs, ce sont des problèmes fondamentaux. cela peut être dû aux raisons suivantes.
A. Dans le dossier WEB-INF, vous avez le fichier web.xml qui fait référence à dispatcherServlet. Ici ce cas est mvc-config.xml
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
B. Ce fichier mvc-config.xml a des espaces de noms et doit analyser les contrôleurs.
<context:component-scan base-package="org.vimal.spring.controllers" />
<mvc:annotation-driven />
C. Vérifiez l'exactitude du nom du paquet sur lequel vous avez les contrôleurs. Ça devrait marcher.
All Controllers must be Annotated with @Controller.
La suppression du serveur Tomcat et l'ajout d'une nouvelle configuration Tomcat dans Eclipse ont résolu le problème.
J'ai également rencontré le même problème, mais après avoir mis l'espace de noms ci-dessous, cela fonctionne bien:
xmlns:mvc="http://www.springframework.org/schema/mvc"
Dans pom.xml, assurez-vous que empaquetage est défini sur war
comme <packaging>war</packaging>
, sans jar ou autre chose.
Si vous utilisez Maven, ajoutez-les à votre pom.xml
<dependency>
<groupid>javax.servlet</groupid>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>runtime</scope>
<dependency>
<groupid>taglibs</groupid>
<artifactId>standard</artifactId>
<version>1.1.2</version>
<scope>runtime</scope>
Qu'est-ce que/Elso?
Tu essayes:
@RequestMapping("/Elso")
public class myController {
@RequestMapping("/hello")
public ModelAndView helloWorld() {
String message = "Hello World, Spring 3.0!";
return new ModelAndView("hello", "message", message);
}
}