AccessLogFilter を Spring管理

| コメント(0) | トラックバック(0)

SpringFrameworkの練習がてら、こないだから作っている AccessLogFilter を Spring管理に作り直し中。

はじめはFilterに入った時点でBeanFactoryを作ってDI管理にしようかと思っていたんだけど、SpringFrameworkのAPIを探っていたらFilter自体を管理できそうなことを発見。
せっかくなのでやってみることに。

とりあえずログ取りBeanをインターフェイス抽出、Filterにsetterをつけて、生成はSpringにお任せ。
はて・・・?
どうやって Beanを抽入すんだべ?
org.springframework.web.filter.DelegatingFilterProxy というものを発見。
名前からして、Struts-Springの時に使う DelegatingActionProxy と同じような使い方だろうと推測。
設置場所は、web.xml だろうとあたりをつけて、早速設定してみた。

・・・・なにやらエラー。

 java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?


うーん、何でだろうとエラーメッセージを頼りにいろいろググってみたところ、 Filterを SpringFramework で管理するのに ServletContextListener に ContextLoaderListener を登録しておく必要があることが判明。
Webアプリ用の ApplicationContextである、WebApplicationContext を呼び出すのに、内部的に WebApplicationContextUtils を使っているようで、これを使うのにはこの Listener を登録する必要があるみたいです。

というわけで、web.xmlに


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


をつけることで見事に動きました。
ついでだったので requestオブジェクトの文字コード設定フィルタも、Spring付属のものに変更。

これから AccessLogger の内部構造を Spring管理にしますかね~。

トラックバック(0)

トラックバックURL: http://happy-camper.st/mt/mt-tb.cgi/219

コメントする

2012年1月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

月別 アーカイブ

CLOCK

あわせて読みたい

あわせて読みたい

ブログ通信簿

Yahoo!天気情報

AdSense

フィードメーター

RSS feed meter for http://ueshin.happy-camper.st/

トラックフィード

Creative Commons License
このブログはクリエイティブ・コモンズでライセンスされています。
Powered by Movable Type 4.2-ja