整理sPRingmvc的demo的時候遇到一件奇葩事情,本來就是想簡單演示一下SimpleUrlHandlerMapping的用法就完活.結果寫好demo怎么都無法進行映射,就好像根本就沒有創建SimpleUrlHandlerMapping一樣..關鍵配置文件如下:
<!-- 容器默認的DefaultServletHandler處理 所有靜態內容與無RequestMapping處理的URL--> <mvc:default-servlet-handler/><bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <!-- 指定請求和Controller對應關系 --> <property name="mappings"> <props> <prop key="simpleUrl">helloController</prop> </props> </property>
</bean>
非常簡單的映射確怎么都不好使,我還特意改用了集中不同的請求映射方法都是不好使的..就算存在版本差異也不能全不好使啊..然后百度一圈找到一個讓我很在意的資料:
<mvc:default-servlet-handler/>會把"/**" url,注冊到SimpleUrlHandlerMapping的urlMap中,把對靜態資源的訪問由HandlerMapping轉到 org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler 處理并返回.
換句話說就是這個注解會自己創建一個SimpleUrlHandlerMapping如果沒有的話,然后將靜態資源的請求連接映射到其中.
到這里基本心里有了大概的猜想,然后調整一下配置文件中注解的順序:
<bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <!-- 指定請求和Controller對應關系 --> <property name="mappings"> <props> <prop key="simpleUrl">helloController</prop> </props> </property> </bean><!-- 容器默認的DefaultServletHandler處理 所有靜態內容與無RequestMapping處理的URL--> <mvc:default-servlet-handler/>
再次運行,成功映射..
到此問題原因基本確認,<mvc:default-servlet-handler/>自己創建的SimpleUrlHandlerMapping導致后來我們自定義的SimpleUrlHandlerMapping失效(應該是沒有引用).
新聞熱點
疑難解答