web.xml 配置:
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Map all requests to the DispatcherServlet for handling -->
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 配置 HiddenHttpMethodFilter: 把 POST 請求轉爲 DELETE、PUT 請求 -->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
SpringMVC.xml配置
<!-- 配置自動掃描的包 -->
<context:component-scan base-package="com.atguigu.springmvc"></context:component-scan>
<!-- 配置視圖解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
在做項目的時候,我希望靜態資源由WEB服務器默認的Servlet來處理,所以我在SpringMVC.xml配置文件中添加了如下的語句:
<mvc:default-servlet-handler/>
但是我再次運行項目,並訪問資源的時候,發現訪問@RequestMapping(“/path1/path2”)都不能訪問了,之前沒有添加的時候是能夠訪問的。
解決方案是,在配置文件中再添加一句代碼:
<mvc:annotation-driven/>
這樣做的原因是:
當兩種標籤都沒有的時候,框架默認註冊的有AnnotationMethodHandlerAdapter這個bean,所以能夠處理@RequestMapping這個註解,但是隻配置了時所註冊的三個bean都不能處理@RequestMapping註解,因此無法找到相應的Controller,進而無法進行訪問路徑的映射,當兩種標籤都有的時候,會註冊一個RequestMappingHandlerAdapter的bean,這個bean能夠處理@RequestMapping這個註解。