一、<mvc:default-servlet-handler/>處理靜態資源
若將 DispatcherServlet 請求映射配置為 /,則 Spring MVC 將捕獲WEB 容器的所有請求,包括靜態資源的請求, SpringMVC 會將他們當成一個普通請求處理,因找不到對應處理器將導致錯誤。
可以在 SpringMVC 的配置文件中配置 <mvc:default-servlet-handler/> 的方式解決靜態資源的問題:
– <mvc:default-servlet-handler/> 將在 SpringMVC 上下文中定義一個DefaultServletHttpRequestHandler,它會對進入 DispatcherServlet 的請求進行篩查,如果發現是沒有經過映射的請求,就將該請求交由 WEB 應用服務器默認的 Servlet 處理,如果不是靜態資源的請求,才由DispatcherServlet 繼續處理
– 一般 WEB 應用服務器默認的 Servlet 的名稱都是 default。若所使用的WEB 服務器的默認 Servlet 名稱不是 default,則需要通過 default-servlet-name 屬性顯式指定
二、<mvc:annotation-driven />
• <mvc:annotation-driven /> 會自動注冊RequestMappingHandlerMapping、RequestMappingHandlerAdapter 與ExceptionHandlerExceptionResolver三個bean。
• 還將提供以下支持:
– 支持使用 ConversionService 實例對表單參數進行類型轉換
– 支持使用 @NumberFormat annotation、@DateTimeFormat注解完成數據類型的格式化
– 支持使用 @Valid 注解對 JavaBean 實例進行 JSR 303 驗證
– 支持使用 @RequestBody 和 @ResponseBody 注解
三、注意
<mvc:annotation-driven />在實際開發中通常都需要配置,否則如果配置了<mvc:view-controller path="/success" view-name="success"/>(可以直接相應轉發的頁面, 而無需再經過 Handler 的方法)或者配置了<mvc:default-servlet-handler/>(處理靜態資源)時其他的轉發就用不了了