web.xml文件中配置(servlet, spring, filter, listenr)的加載順序

加載順序會影響對spring bean 的調用。

    比如filter 需要用到 bean ,但是加載順序是 先加載filter 後加載spring,則filter中初始化操作中的bean爲null;

首先可以肯定 加載順序與他們在web.xml 文件中的先後順序無關。

web.xml 中 listener 和 serverlet 的加載順序爲 先 listener 後serverlet

最終得出結果:先 listener >> filter >> servlet >>  spring

 所以,如果過濾器中要使用到 bean,可以將spring 的加載 改成 Listener的方式

<listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>


 搞定!

 關於他們的內部執行順序,也需要注意,如下面文章中遇到的問題

web.xml的filter執行順序導致的亂碼,切記!
2008-05-02 01:38
發現引起bug的原因是web.xml的下面幾行:
    <filter-mapping>
        <filter-name>SecurityFilter</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>CharacterEncoding</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>CharacterEncoding</filter-name>
        <url-pattern>*.jsp</url-pattern>
    </filter-mapping>

根據servlet2.3規範filter執行是按照web.xml配置的filter-mapping先後順序進行執行,所以上面的配置會導致遇見*.do的url請求,先進行SecurityFilter的過濾器處理,這時候沒有做編碼處理,已經是亂碼,到下面的filter處理時已經時亂碼,再做編碼處理已經沒有用處。

修正方式,調整filter-mapping順序,如下:

    <filter-mapping>
        <filter-name>CharacterEncoding</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>CharacterEncoding</filter-name>
        <url-pattern>*.jsp</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>SecurityFilter</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/wayfoon322/archive/2008/05/08/2418011.aspx

發佈了32 篇原創文章 · 獲贊 5 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章