1

新しいHRDストアに移行した後、古いアプリケーションへのリクエストを新しいHRDアプリケーションにリダイレクトしたいと思います。Google移行ツールにエイリアスを作成させる必要があることはわかっていますが、アプリの中間コピーを移行するため(データベースの移行による悪夢のため)、これはオプションではありません。

私の計画は、HTTP 301(HttpServletResponse.SC_MOVED_PERMANENTLY)リダイレクトを行うサーブレットを使用し、web.xmlで/*を使用してサーブレットマッピングを使用することでした。これはローカルで機能しますが、実際のアプリエンジンでは機能しません。app-engineが正しく認識するURLパターンがないようです。これまでのところ:

  <servlet-mapping>
    <servlet-name>RedirectToHRD</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>RedirectToHRD</servlet-name>
    <url-pattern>/*</url-pattern>
    <url-pattern>/*/*</url-pattern>
    <url-pattern>/*/*/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>RedirectToHRD</servlet-name>
    <url-pattern>*.jsp</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>RedirectToHRD</servlet-name>
    <url-pattern>index.jsp</url-pattern>
  </servlet-mapping>

クレイジーに見えることは知っていますが、私は必死でした。RedirectToHRDサーブレットを介してリダイレクトされるのは「/」と「index.jsp」のみです。他のページ(JSPまたはその他)の場合、これは機能しません。ログファイルは、ページが提供されることを喜んで示しています。

誰かが何が起こっているのか教えてもらえますか?


編集:私はPeter Knegoが以下に親切に提案したことを行い、フィルターを作成しました。今私のweb.xmlは持っています:

  <filter-mapping>
    <filter-name>RedirectToHRDFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

これは「実際の」アプリエンジンではまだ機能せず、以前の試みと同様にローカルで機能します。私のフィルターには次の方法があります。

  public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain)
  throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest)req;
    HttpServletResponse response = (HttpServletResponse)resp;
    response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
    String redirectURL = "http://fit20app-hrd.appspot.com"+request.getRequestURI();
    if (request.getQueryString() != null) {
      redirectURL += "?"+request.getQueryString();
    }
    response.setHeader("Location", redirectURL);
  }

ローカルで動作していても、このフィルターが壊れているのではないかと考えています。Googleのサーバーでは、/と/index.jspで機能しますが、それ以外では機能しません。


これは解決されました。以下のコメントを参照してください。

4

1 に答える 1

2

<url-pattern>内に複数を持つことはできません<servlet-mapping>。代わりに、それぞれが 1 つの要素<servlet-mapping>を持つ複数を作成します。<url-pattern>

また、すべてをリダイレクトしようとしているので、代わりにサーブレット フィルターを使用する必要があります。

于 2012-11-26T11:21:06.843 に答える