SpringMVC——靜態資源訪問之與

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這個註解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章