0

Servlet 3.0 を使用して Jetty でフォワード プロキシを作成しようとしています。

私は簡単なコードを持っています-

public class testServlet extends HttpServlet {

   @Override
    protected  void service (HttpServletRequest req, HttpServletResponse resp) throws   ServletException, IOException {
       System.out.println(req.toString());        

  }

}

クライアントが HTTP サイトを要求した場合、上記のサービス メソッドが呼び出されますが、HTTPS サイトが (HTTP Connect メソッドを使用して) 要求された場合、上記のメソッドは呼び出されません。なんで?

もちろん、Jetty のハンドラーを使用することもできますが、コードの移植性を維持するために、むしろサーブレットを使用したいと考えています (Glassfish、Tomat、Jetty などで実行できます)。

何が間違っているのでしょうか?

4

4 に答える 4

3

サーブレット サービス メソッドに CONNECT 要求を送信することは可能ですが、サーブレット内で CONNECT を処理することは不可能であるため、最終的には無駄です。生の IO ストリームには実際にはアクセスできず、リクエスト/レスポンスの HTTP コンテンツのみにアクセスできます。あなたはほとんど彼の仕事をすることができますが、決して効率的ではありません(非同期IOなどはありません).

また、Jetty によって既に提供されているサポートを基に構築してみませんか。

http://download.eclipse.org/jetty/stable-9/xref/org/eclipse/jetty/proxy/ConnectHandler.html http://download.eclipse.org/jetty/stable-9/xref/org/eclipse /jetty/proxy/ProxyServlet.html

于 2013-04-25T03:21:49.280 に答える
1

これが可能になるかどうかはわかりません。

一般的に言えば、サーブレットは、どのサーブレットを実行するかを知るためにリクエストからのコンテキストを必要とします。これは、サーブレット記述子に存在するサーブレットへの pathSpec のマッピングです。

CONNECT リクエストでは、このマッピングを検索するために使用するコンテキストは実際にはありません。(別の言い方をすれば、サーブレット コンテナは、CONNECT 要求の情報に基づいて、どのサーブレットを実行するかを判断するのに苦労します)

いくつかのアイデア:

  • 代わりに、pathSpec を使用してフィルターを設定してみてください"/*"(すべてのパススペックに対して)。
  • サーブレットを pathSpec に設定します"/"(デフォルトのサーブレット用)。注:${jetty.home}/etc/webdefault.xml最初に標準の DefaultServlet を無効にする必要がある場合があります。
于 2013-04-25T00:25:10.067 に答える
-1
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
        throws ServletException, IOException {
    // TODO Auto-generated method stub
    super.service(arg0, arg1);
}

@Override
public void service(ServletRequest arg0, ServletResponse arg1)
        throws ServletException, IOException {
    // TODO Auto-generated method stub
    super.service(arg0, arg1);
}

これら 2 つの方法の類似点と相違点を比較できます。しかし、これら 2 つのメソッドはすべてメソッド パラメータのサブクラスであり、異なるものです。

または、doPOST、doGET メソッドを使用することもできます。

英語が話せなくて本当につらかった...へへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへも私はあなたの質問に答えるために翻訳ツールを使う必要がある

于 2013-04-25T01:47:20.417 に答える