生のリクエストを取得し、それらを処理するか、別のバックエンド サーバーに転送するかを決定するサーブレットを実装しようとしています。これは、受信したリクエストが宛先の 1 つ (私の場合は 2 つ) に転送されるロードバランサーに似ています。宛先の 1 つはリモート (別のホスト上) です。さらに、リクエストはルート ( http://mycompany.com/ ) に到達する可能性があります。
生のリクエストを取得したいので、独自のサーブレット (サブクラス化HttpServlet
) を実装しましたが、うまくいきました。私のサーブレットは次のようになります。
public class MyProxyServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
processOrForward(req, resp);
}
// also doGet(), doHead(), ...
}
処理したいサービスがリクエストをルートに送信する可能性があるため、サーブレットをデフォルトのサーブレットにマップして、明示的なサーブレット マッピングを持たないリクエストを受信したいと考えています。私のサーブレットの名前が「myservlet」で、別のサーブレット「foo」と一緒に実行されていると仮定すると、http://mycompany.com/foo/ ... の形式のすべてのリクエストがfooに配信され、すべてがelse (例: /、/bar/...、/myservlet/...) を「myservlet」に変更します。以前の投稿 (たとえば、こことここのルート マッピング、またはここの URL 書き換え) を見て、私はそれを理解したと思いましたが、機能しません。
ここに私のweb.xmlがあります:
<web-app>
<servlet>
<servlet-name>ProxyServlet</servlet-name>
<servlet-class>com.mycompany.MyProxyServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ProxyServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
上記のweb.xmlで、 url-pattern について試しました
"/" and "/*" and empty (i.e., <url-pattern></url-pattern>), all behave the same -->
Requests to root (/)goes to tomcat's default servlet
Requests to /myservlet/... are handled by "myservlet"
Requests to /fubar/... are always 404
サーブレットをデフォルトにする方法はありますか。つまり、サーブレットに明確にマップされていないリクエストはすべて私のものになります (このサーブレットを独自のコンテナーにデプロイできるため、すべてのリクエストを受信することもできます)。問題がある場合は、Ubuntu 12.10 で Tomcat 7.0.30 を使用しています。