2013-03-01 3 views
1

J'essaie de comprendre requestmapping au printemps mvc, j'ai une application, en fait je viens de commencer avec spring mvc.RequestMapping au printemps mvc

J'ai ces deux urls

Le premier avec une barre oblique à la fin semble fonctionner très bien. http://localhost:8080/contactmanager/index/

La seconde sans une barre oblique à la fin ne fonctionne pas

http://localhost:8080/contactmanager/index 

Ce second me donne le « statut HTTP 404 - » erreur, comment puis-je forcer l'application à être annexant une barre oblique à la fin de l'URL?

La méthode dans le contrôleur se présente comme suit

@RequestMapping("/index") 
public String listContacts(Map<String, Object> map) { 

    map.put("contact", new Contact()); 
    map.put("contactList", contactService.listContact()); 
    //org.springframework.web.context.ContextLoaderListener 
    //org.springframework.web.context.ContextLoaderListener 
    //org.springframework.web.servlet.DispatcherServlet 
    //org.springframework.web.servlet.DispatcherServlet 
    return "contact"; 
} 

et mon web.xml ressemble à ce

<servlet> 
    <servlet-name>contactmanager</servlet-name> 
    <servlet-class> 
     org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/contactmanager-servlet.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>contactmanager</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

Merci à l'avance.

+0

"/ index **" ....... – user1428716

+0

@ user1428716 la question est si j'écris l'URL avec une barre oblique (/) à la fin comme index /, je l'obtiens fonctionnant mais quand j'omets la barre oblique à la fin juste comme l'index, alors j'obtiens 404, a il à voir avec le chemin web.xml est configuré? –

Répondre

2

Utilisation de la configuration java:

@Configuration 
@EnableWebMvc 
public class WebConfig {} 

ou en utilisant la configuration XML

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc.xsd"> 

<mvc:annotation-driven /> 

De Spring's reference documentation:

registres ci-dessus Requ estMappingHandlerMapping, un RequestMappingHandlerAdapter, et un ExceptionHandlerExceptionResolver (entre autres) à l'appui des demandes de traitement avec annotées méthodes de commande à l'aide d'annotations telles que @RequestMapping, @ExceptionHandler, et d'autres.

En RequestMappingHandlerMapping il y a drapeau booléen utile - decription de Javadoc:

/** 
* Whether to match to URLs irrespective of the presence of a trailing slash. 
* If enabled a method mapped to "/users" also matches to "https://stackoverflow.com/users/". 
* <p>The default value is {@code true}. 
*/ 
public void setUseTrailingSlashMatch(boolean useTrailingSlashMatch) { 
    this.useTrailingSlashMatch = useTrailingSlashMatch; 
} 

Depuis cette option est activée par défaut assurez-vous que votre configuration utilise RequestMappingHandlerMapping.

Si cela ne vous aide pas, vérifiez que le servlet par défaut de ressort est configuré: <mvc:default-servlet-handler/> et essayer ajouter à web.xml

<!-- Disables Servlet Container welcome file handling. Needed for compatibility with Servlet 3.0 and Tomcat 7.0 --> 
<welcome-file-list> 
    <welcome-file></welcome-file> 
</welcome-file-list> 
+0

Merci, je pense que je n'ai pas eu une cartographie claire de l'ensemble de mappage au printemps mvc, maintenant je comprends, vous pouvez spécifier le mappage sur la classe ou la méthode du contrôleur et l'imbrication dans la méthode signifie que vous ajoutez le chemin de la classe au un dans la méthode.Merci pour le lead –

+0

Pour ceux qui utilisent une classe de configuration qui étend 'WebMvcConfigurerAdapter', remplacez la méthode' configurePathMatch (Configurateur PathMatchConfigurer) 'et configurez' configure.setUseTrailingSlashMatch (false); '. La valeur par défaut est 'true', comme vous l'avez sans doute découvert si vous lisez cette question et cette réponse. – Paul