2009-07-07 5 views
0

接頭辞と拡張子に応じてファイルへのリクエストを処理するサーブレットが必要です。Java Servlet:リクエストをデフォルトの処理に戻す

プレフィックス_ *。xmlの

始めと要求パスの末尾にマッピング以来、私は私のサーブレットへのすべての* .xmlの要求をマッピングしている、ことはできません。 質問は次のようになります: "prefix_"で始まらないXMLファイルをサーブレットから削除して、リクエストがXMLファイルに対する "通常の"リクエストのように処理されるようにするにはどうすればいいですか?

これはおそらく非常に簡単ですが、私はこれを見つける...することはできていないようです: - 事前に/

おかげでたくさん

答えて

0

私は強く使用することをお勧めしますHttpServletRequest.getRequestURI()を介して、あなたのコード内で要求を再検査することができ要請しますこのための適切なMVCフレームワークです。発見したように、標準サーブレットAPIの柔軟性は、ディスパッチを要求する際に非常に制限されています。

理想的には、既存のサーブレットコードをMVCフレームワークと組み合わせて使用​​することができます。フレームワークはパスパターンに基づいてディバックを行い、サーブレットはビジネスロジックを実行します。幸いにも、Spring MVCでは、ServletForwardingControllerを使って、これを行うことができます。それは非常に軽量のスプリング設定です。

<beans> 
    <bean name="/prefix*.xml" class="org.springframework.web.servlet.mvc.ServletForwardingController"> 
     <property name="servletName" value="myServlet"/> 
    </bean> 
</beans> 

<servlet> 
    <servlet-name>myServlet</servlet-name> 
    <servlet-class>foo.MyServlet</servlet-class> 
</servlet> 

<servlet> 
    <servlet-name>spring</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
</servlet> 

<url-mapping> 
    <servlet-name>spring</servlet-name> 
    <url-pattern>*</url-pattern> 
</url-mapping> 

あなたは、このようなWEB-INF /春-servlet.xmlファイルを持っているでしょう:

つまり、あなたのweb.xmlにこのような何かを持っていると思いますそしてそれはかなりそれになります。 /prefix*.xmlに対するすべてのリクエストはmyServletに行き、他のすべてのリクエストはコンテナに渡されます。

+0

ねえ、ありがとう...これはかなり簡単に見えます。私は既にMVCフレームワークとしてswingを使用しています - これをチェックします。 – PeterP

+0

Springで少しの設定を取り除くことができるのは驚くべきことですが、あなたが利用できるコンベンションオーバーの設定がたくさんあります。 – skaffman

0

SHUREないが、あなたはすべての*キャッチしたら。 XMLは、あなたが

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
     String uri =req.getRequestURI(); 
     int i = uri.lastIndexOf('/'); 
     int j = uri.lastIndexOf('.', i); 
     if (uri.substring(i+1, j).startsWith("prefix_")) { 
      // your code 
     } 
    } 

(コードは、唯一のアイデアをテストしていません...)

+0

この場合、デフォルト処理にどのように戻っていくのかという疑問はありません。 – Avi

+0

ありがとうございました...私はそれまでずっと行ってきました。 Aviが指摘したように、私にとって欠けているのは、それ以外の部分です。 – PeterP

2

別の解決策(おそらくあなたに合っています)は、ApacheをApacheの書き換えモジュールを使用できるWebコンテナインスタンスの前で使用する場合に使用します。 Webappコンテナのために扱いやすいものへのURLの書き換え。

これが役に立ちます。デビッド。 。

+0

ありがとうございます...音が役に立ちました - しかし、私はApacheに縛られたくないです(私たちは既にSpringにMVCとして縛られているので)、私はskaffmanの提案に固執したいと思います。与えられた状況の下でもっと簡単に思える:) Thx – PeterP

関連する問題