web-dev-qa-db-fra.com

Aucun mappage trouvé pour la requête HTTP avec l'URI…. Dans DispatcherServlet avec le nom

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?

70
erik.c

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.

38
Nils

Ajouter

  <mvc:default-servlet-handler/>

à spring-servlet.xml

69
user965884

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.

27
ssk

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

14
ASHISH GUPTA

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.

10
kishore

Assure-toi

<mvc:annotation-driven/>
<context:component-scan base-package="com.hireartists.web.controllers"/>

pointe vers le bon package contenant les contrôleurs.

9
prayagupd

Essayer:

<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

Travaillé pour moi!

9
Udeep Shakya

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();
}
6
Gaurav Goyal

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>
3
Vishal Gupta

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.

3
Alee

l'ajout de <mvc:annotation-driven/> a fonctionné pour moi. Ajoutez-le avant la ligne <context:component-scan ............/>

3
Nilay Deshmukh

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.

2
Jan

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.

2
Ashish Jagga

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.

2

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.

2
nat

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

  1. mVN propre installer
  2. paquet mvn

É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.

2
anshu

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);
}
2
naXa

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.
2
vimal krishna

La suppression du serveur Tomcat et l'ajout d'une nouvelle configuration Tomcat dans Eclipse ont résolu le problème.

1
D8Sasi

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" 
1
Ravikumar D G

Dans pom.xml, assurez-vous que empaquetage est défini sur war comme <packaging>war</packaging>, sans jar ou autre chose.

1
Hadi Rasouli

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>
1
Medini Patki

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); 
    }
}
0
Dalton Dias