0

Tomcat サーバーで次のサーバー側のリダイレクトまたは転送が必要です。URL http ://portal.customer_name をhttp://portal.customer_name/customer_nameに名前変更/リダイレクトする必要があります。つまり、コンテキスト パスのない URL は、コンテキスト パスのある同じ URL にリダイレクトされます。request.getRequestDispatcher().forward(request, response); を使用して、フィルターでこれを行うことができました。しかし、同じことがバルブでは機能しないようです。

これまでに次のことを取得しました。

public void invoke(Request request, Response response) throws IOException, ServletException {
    String context = getForwardpath(request);
    request.getRequestDispatcher(context).forward(request, response);
    this.getNext().invoke(request, response);
}

private String getForwardpath(Request rq){
    String context = rq.getServletContext().getContextPath();
    /.../
    return context;
}

元の URL は受信するがリダイレクトは受信しないように見えるいくつかのサーブレットをデプロイしました。このようなサーバーサイドのリダイレクトを作成することはまったく可能ですか? フィルターではなく、バルブが必要であることに注意してください。

4

2 に答える 2

0

リクエストを同じインスタンスの別のコンテキストに変更する場合は、./conf/context.xml (tomcat) で crossContext="true" が必要です。

https://tomcat.apache.org/tomcat-7.0-doc/config/context.html

于 2016-08-12T07:47:45.447 に答える
0

投稿する前にこれを検索しましたか?Google は、Tomcat に関するこのトピックについて説明するブログ投稿を作成し、そのような Valve の実装とJBoss 実装を含めています。だから私は、「はい、それは間違いなく可能です」と言うでしょう。これらのいずれかがニーズに合わない場合は、少なくともそのソース コードを使用して正しい方向に導き、問題が発生した場合はより具体的な質問を返すことができます.

更新:「サーバー側のリダイレクト」という用語の使用方法はありません。リダイレクトとは、3xx シリーズの応答コードをユーザー エージェントに送り返し、要求したリソースについて何かを伝えることを意味します。そうは言っても、私は自分で Valve の開発を行ったことはありませんが、Valve.invoke() の説明から、Tomcat 構成で Valve を十分に高く設定すれば、リクエスト URI を変更するだけでよいと思います。途中で、それが正常に処理されるようにします。

于 2012-12-30T17:26:56.520 に答える