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
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
.
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 /*
)
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.
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.
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Veuillez utiliser/dans votre web.xml (au lieu de/*)
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
<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>