web-dev-qa-db-fra.com

Aucun mappage trouvé pour la demande HTTP avec URI Spring MVC

Voici mon Web.xml

dispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring/servlet-context.xml 1

<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

mon servlet-context.xml

    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/WEB-INF/views/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>

Et enfin la classe Handler. qui se trouve sous com.springexample.controller.impl

@Controller
public class IndexControllerImpl implements IndexController {

    @RequestMapping("/")
    public String index() {

        return "index";
    }
}

Cependant en allant à localhost:8080/projectname/

il renvoie une erreur 404.

 Jul 27, 2013 8:18:31 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/tasklist/WEB-INF/views/index.jsp] in DispatcherServlet with name 'dispatcherServlet'
Jul 27, 2013 8:18:37 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/tasklist/index] in DispatcherServlet with name '

Voici ma structure de projet

Project Structure

13
user962206

Avec le web.xml configuré comme vous l'avez fait dans la question, en particulier:

<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

TOUTES les demandes faites à votre application web seront dirigées vers le DispatcherServlet. Cela inclut des demandes telles que /tasklist/, /tasklist/some-thing.html, /tasklist/WEB-INF/views/index.jsp.

Pour cette raison, lorsque votre contrôleur renvoie une vue qui pointe vers un .jsp, au lieu de permettre à votre conteneur de serveur de traiter la demande, le DispatcherServlet se met en marche et commence à rechercher un contrôleur capable de traiter cette demande, il n'en trouve aucun et donc le 404.

Le moyen le plus simple de résoudre le problème est de faire correspondre l'URL de votre servlet comme suit:

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

Remarquez le *. Cela indique au conteneur que toute demande qui n'a pas de path info dedans (urls sans .xxx à la fin), doit être envoyé au DispatcherServlet. Avec cette configuration, lorsqu'un xxx.jsp la demande est reçue, le DispatcherServlet n'est pas consulté, et le servlet par défaut de votre conteneur de servlet répondra à la demande et présentera le jsp comme prévu.

J'espère que cela vous aide, je réalise que vos commentaires précédents indiquent que le problème a été résolu, mais la solution NE PEUT PAS simplement ajouter method=RequestMethod.GET au RequestMethod.

40
Akshay

J'ai le même problème .... Je change le nom de mon projet et j'ai ce problème ... ma solution était de vérifier les références du projet et d'utiliser / dans mon web.xml (au lieu de /*)

2
Charles Lennon

Vérifiez d'abord si les classes Java Java sont compilées ou non dans votre répertoire [PROJECT_NAME]\target\classes.

Sinon, vous avez des erreurs de compilation dans vos classes Java.

2
kishore

Essayez de passer l'objet Model dans votre méthode d'index et cela fonctionnera

@RequestMapping("/")

public String index(org.springframework.ui.Model model) {

 return "index";

    }

En fait, le conteneur Spring recherche un objet Model dans la méthode de mappage. S'il le trouve, il transmettra la chaîne de retour en tant que vue au résolveur de vue.

J'espère que cela t'aides.

1
JavaEnthusiast
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

Veuillez utiliser/dans votre web.xml (au lieu de/*)

0
Ashish

J'ai ajouté le dossier META-INF avec context.xml contient

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/SpringGradleDemo"/>

SpringGradleDemo est le nom de mon projet et ça marche. Mon servlet-mapping est "/" Je l'ai lu ici https://Tomcat.Apache.org/Tomcat-5.5-doc/config/context.html

0
Thuan Luong
<servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>

changer en:

<servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>
0
Tony.Cruise