1

我想了解spring mvc中的requestmapping,我有一个应用程序,实际上我才刚刚开始使用spring mvc。

我有这两个网址

最后一个带有正斜杠的第一个似乎工作正常。 http://localhost:8080/contactmanager/index/

最后没有正斜杠的第二个不起作用

http://localhost:8080/contactmanager/index

第二个给了我“HTTP Status 404 -”错误,如何强制应用程序在 url 末尾附加正斜杠?

控制器中的方法如下所示

@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";
}

我的 web.xml 看起来像这样

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

提前致谢。

4

1 回答 1

2

使用java配置:

@Configuration
@EnableWebMvc
public class WebConfig {}

或使用 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 />

来自Spring 的参考文档

上面注册了一个RequestMappingHandlerMapping、一个 RequestMappingHandlerAdapter 和一个 ExceptionHandlerExceptionResolver (以及其他),以支持使用 @RequestMapping 、 @ExceptionHandler 等注解来处理带有注解的控制器方法的请求。

其中RequestMappingHandlerMapping有一个有用的布尔标志 - Javadoc 的说明:

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

由于默认情况下启用此功能,因此请确保您的配置使用RequestMappingHandlerMapping.

如果这对您没有帮助,请检查 spring 的默认 servlet 是否已配置:<mvc:default-servlet-handler/>并尝试添加到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>
于 2013-03-01T08:26:33.097 回答