4

申し訳ありませんが、私は実際のコードを持っていませんが、説明しようとします:

以下にマップされたサーブレットがあります。

/admin/* 

したがって、これはサーブレットに行きます:

public class AdminController extends MainController {
    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        // Do stuf here
    }
}

MainController は次のとおりです。

public class MainController extends HttpServlet {
@Override
public void service(ServletRequest request, ServletResponse response) {
    String requesturi = ((HttpServletRequest)request).getRequestURI();
    reqlist = Arrays.asList(requesturi.substring(requesturi.indexOf(Util.rootPath) + Util.rootPath.length()).split("/"));
    reqlist = reqlist.subList(1, reqlist.size());

    doPost((HttpServletRequest)request, (HttpServletResponse)response);
}

したがって、リクエストは AdminController に渡されますが、問題はありませんが、次のことに気付きました。

サーブレットが 2 回呼び出されています。. そして、これは私に多くのエラーを引き起こしています..

誰もこれについて手がかりを持っていますか? ある種の遺産を使ったからですか?すべてをありがとう!

4

5 に答える 5

11

古いスレッドですが、私の答えは誰かを助けるかもしれません。今日、私は同じ問題に直面しました。私の特定のサーブレットは以前は正常に動作していましたが、突然 doGet メソッドを 2 回呼び出し始めました。調査の結果、Chrome ブラウザーに html バリデーター拡張機能があり、同じ要求で html 検証を行うためにサーブレットを再度呼び出していることがわかりました。拡張機能を無効にしたら、問題は解決しました。

于 2014-10-02T09:14:32.373 に答える
9

HttpServlet.serviceメソッドはすべてのリクエスト タイプに対して呼び出され、表示されているのは HEAD リクエストであり、次に GET または POST リクエストです。サービスを実装する代わりに、doGet または doPost を実装するだけです。一般的に行われているのは、doPost または doGet のいずれかを実装し、実装していないものからもう一方を呼び出すことです。

于 2008-11-27T01:46:40.773 に答える
2

私は簡単な方法で同じ問題を解決しました。

ループバック ネットワークであるアドレスhttp://127.0.0.1を使用してローカルでアプリにアクセスする場合は、アドレスを直接のhttp://localhostに変更します。

実際に Web ホスティングやサーバー上で実行し、外部ネットワークからアクセスする場合、この問題は発生しません。

于 2012-03-09T06:07:38.920 に答える