问题描述:
        使用 REST 风格的资源URL时,SpringMVC请求静态资源(图片、js等)发生异常。
    
        优雅的 REST 风格的资源URL 不希望带 .html 或 .do 等后缀。
        若将 DispatcherServlet 请求映射配置为 /,则 Spring MVC 将捕获WEB 容器的所有请求,包括静态资源的请求,SpringMVC 会将他们当成一个普通请求处理,因找不到对应处理器将导致错误。
例如:
No mapping found for HTTP request with URI [/springmvc-2/scripts/jquery-1.12.3.min.js] in DispatcherServlet 
with name 'springDispatcherServlet'  即js中代码无法执行


解决办法:
        可以在 SpringMVC 的配置文件中配置 <mvc:default-servlet-handler/> 的方式解决静态资源的问题:
 <mvc:default-servlet-handler/> 将在 SpringMVC 上下文中定义一个DefaultServletHttpRequestHandler,它会对进入 DispatcherServlet 的 请求进行筛查,如果发现是没有经过映射的请求,就将该请求交由 WEB 应用服务器默认的 Servlet 处理,如果不是静态资源的请求,才由 DispatcherServlet 继续处理。
         一般 WEB 应用服务器默认的 Servlet 的名称都是 default。若所使用的 – WEB 服务器的默认 Servlet 名称不是 default,则需要通过 defaultservlet-name 属性显式指定。
         如果只是配置<mvc:default-servlet-handler/>,则原来的RequestMapping映射则不起作用,还需配置<mvc:annotation-driven></mvc:annotation-driven>!

         <mvc:annotation-driven /> 会自动注册RequestMappingHandlerMapping 、RequestMappingHandlerAdapter 与 ExceptionHandlerExceptionResolver  三个bean!

还将提供以下支持:
 ①支持使用 ConversionService 实例对表单参数进行类型转换;
 ②支持使用 @NumberFormat 、@DateTimeFormat 注解完成数据类型的格式化;
 ③支持使用 @Valid 注解对 JavaBean 实例进行 JSR 303 验证;
 ④支持使用 @RequestBody 和 @ResponseBody 注解。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐