0

プレフィックスと拡張子に応じて、サーブレットがファイルへのリクエストを処理するようにしたい。

prefix_*。xml

リクエストパスの開始と終了にマッピングすることはできないため、すべての*.xmlリクエストをサーブレットにマッピングしました。ここでの問題は、「prefix_」で始まらないXMLファイルのサーブレットをドロップアウトして、要求がxmlファイルへの「通常の」要求のように処理されるようにするにはどうすればよいかということです。

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

よろしくお願いします

4

3 に答える 3

2

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

お役に立てれば。デビッド。

于 2009-07-07T08:41:51.333 に答える
0

Shureではありませんが、すべての* .xmlリクエストをキャッチしたら、HttpServletRequest.getRequestURI()を介してコードでリクエストを再度検査できます。

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
        }
    }

(コードはテストされていません。アイデアのみです...)

于 2009-07-07T08:10:31.647 に答える
0

これには適切な MVC フレームワークを使用することを強くお勧めします。お気づきのとおり、標準のサーブレット API の柔軟性は、リクエストのディスパッチに関して非常に限られています。

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

したがって、web.xml には次のようなものがあります。

<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/spring-servlet.xml ファイルがあります。

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

そして、それはほとんどそれです。/prefix*.xml に対するすべての要求は myServlet に送信され、その他のすべての要求はコンテナーに送信されます。

于 2009-07-07T08:33:24.953 に答える