2010-09-16 52 views
4

我寫了一個定製的Tomcat閥門。 (我使用Tomcat 6.0.24和Java 1.6)這裏就是我宣佈我的閥的XML元素:定製Tomcat閥門配置

<Valve className="mypkg.MyValve" foo="bar"/> 

當我把server.xml中的Host元素裏面這個聲明。 Tomcat使用值「bar」在我的閥上調用setFoo()方法。這就是我想要發生的事情。

但是,當我在web應用程序的META-INF/context.xml中放置相同的聲明時,在Context元素中,Tomcat加載閥門,閥門運行良好。但Tomcat從未調用setFoo()方法來提供閥所需的「bar」值。

我不明白爲什麼Tomcat正確地配置了server.xml中聲明的閥,但沒有在context.xml中聲明。

是否有人知道我的Tomcat在我的webapp的META-INF/context.xml中聲明時如何正確配置閥門?

感謝, 丹

這導致我的閥來加載和正確的Tomcat的配置:

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" 
    xmlValidation="false" xmlNamespaceAware="false"> 

    <Valve className="mypkg.MyValve" foo="bar"/> 
</Host> 

這導致我的閥加載,但Tomcat將不給它的配置參數「 bar「:

<Context privileged="true" > 
    <Valve className="mypkg.MyValve" foo="bar"/> 
</Context> 

回答

3

這是我研究的猜測。這可能是您的Valve綁定到Host容器?

是您的自定義閥門直接子類org.apache.catalina.valves.ValveBase ?如果是這樣,它應該工作。

您可以嘗試打印出閥門上的getContainer()這兩個設置,以查看它是否能正確識別它在每次設置的哪一個Catalina containers (Engine, Host, Context)

某些閥門如SingleSignOn被綁定到像Host這樣的容器,這意味着它不會在其他人上工作。這也適用於小型閥門。

0

SetPropertiesRule作爲啓動的一部分,將嘗試爲您的自定義屬性查找getter。