【问题标题】:How to configure Spring MVC DispatcherServlet to avoid url's with extensions?如何配置 Spring MVC DispatcherServlet 以避免带有扩展名的 url?
【发布时间】:2015-07-10 00:49:10
【问题描述】:

我有一个 Spring (4.1.6.RELEASE) MVC 项目,其控制器映射到 /home,但我的问题是它也被 /home.html/home.do 等路径调用

我的配置是:

web.xml

   <servlet>
      <servlet-name>main</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
      <servlet-name>main</servlet-name>
      <url-pattern>/</url-pattern>
   </servlet-mapping>

main-servlet.xml

   <mvc:annotation-driven />
   <mvc:resources mapping="/resources/**" location="/resources/" />
   <!-- ... -->
   <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/jsp/" />
      <property name="suffix" value=".jsp" />
   </bean>

HomeController.java

@Controller
@RequestMapping({"/", "/home"})
public class HomeController {  
   @RequestMapping(method = RequestMethod.GET)
   public String doGet(Model model) {
        // ...
        return "home";
    }
}

正如在类似问题中所建议的那样:

我尝试添加以下配置:

   <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
      <property name="useDefaultSuffixPattern" value="false" />
   </bean>

   <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
      <property name="useSuffixPatternMatch" value="false" />
      <property name="useRegisteredSuffixPatternMatch" value="false" />
   </bean>

但没有成功。

当我调试DispatcherServlet 时,我可以看到RequestMappingHandlerMappingDefaultAnnotationHandlerMapping 的实例没有将上述注释属性设置为false

似乎应该做一个简单的配置,但我错过了一些我无法找到的东西。

我应该如何正确配置DispatcherServlet 以避免映射路径中的文件扩展名?

提前致谢。

【问题讨论】:

    标签: spring spring-mvc servlets web.xml


    【解决方案1】:

    根据Spring doc,配置应该在mvc:annotation-driven下,例如

      <mvc:annotation-driven>
        <mvc:path-matching suffix-pattern="false" />
      </mvc:annotation-driven>
    

    docs中所述

    匹配模式时是否使用后缀模式匹配(".*") 要求。如果启用映射到"/users" 的方法也匹配到 "/users.*"。默认值为 true

    【讨论】:

    • 是的,你是对的。那行得通!如果您还可以提供文档的链接,那就完美了。
    • 肯定的,链接就知道了
    猜你喜欢
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 2014-07-12
    相关资源
    最近更新 更多