2011-02-09 4 views
3

もしそうなら、どうすればいいですか?WebFilterをライブラリにパッケージ化できますか?

はい、私の最後の質問のようです。そしてそれは本質的に同じ問題です。私は@javax.servlet.annotation.WebFilterを持っています。これは戦争に直接パッケージングされたときにうまく動作します。今度はフィルタをライブラリに移動したいと思います。しかし、私がそうするなら、それはもはや呼び出されません。

私が見なければならない落とし穴はありますか、それとも不可能なのでしょうか?

+0

私はフィルタの注釈をまだ使用していないので、ここではオフになっている可能性があります。おそらく、WebFilterでアノテートされたクラスをjarファイルにパッケージングし、そのjarファイルをwar/WEB-INF/libディレクトリに入れてみてください。 – Upgradingdave

+0

EARを使用すると、そこにlibもパッケージ化できます。 – Martin

答えて

3

セット<web-app metadata-complete="false">

これは、このWebアプリケーションのメタデータがこの特定のxml(およびwebappのクラス)に限定されず、サードパーティのライブラリによってメタデータを使用できることを意味します。

「ウェブの断片」もご覧ください。あなたのjarのMETA-INFweb-fragment.xmlを定義し、そこですべてのサーブレットとフィルタをマップすることができます。

Take a look at this demo

+0

'web-fragment.xml'と' metadata-complete'の両方をうまく使いました。この質問を見つけるかもしれない人のために: - 1)ライブラリを標準のjarファイルとしてビルドします。2)アプリケーションライブラリの '/ lib'ディレクトリの標準ライブラリとしてmavenライブラリを用意しました。 – Martin

1

JARプロジェクトの/META-INFフォルダに空のServlet 3.0互換のweb.xmlファイルをドロップするだけです。

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    id="yourProjectId" version="3.0"> 
</web-app> 

サーブレット3.0コンテナが/META-INF/web.xmlファイルの存在及び存在する場合のデフォルトのスキャンのJARファイルによって、その後、サーブレット3.0注釈のためのJAR内のすべてのクラスをスキャンします。他の設定は必要ありません。

JSF 2.0には同様の手法が/META-INF/faces-config.xmlとなっています。

+0

これを試しても機能しませんでした。ファイルは確かにjarファイルに含まれています。 Tomcat 7.53 Java 60.奇妙なことに、EclipseではEclipse *が動作します。 warとjarの両方に同じweb.xmlがあり、唯一の違いは 'id'値です。 –

関連する問題