web-dev-qa-db-ja.com

Glassfish V3でURLを書き換え/リダイレクトするにはどうすればよいですか?

ファイル拡張子を削除するか、URLを短縮することで、GlassfishV3アプリケーションにアクセスするためのURLを簡略化したいと思います。

アプリケーションをデフォルトのアプリケーションとして設定しているので、URLにコンテキストルートを含める必要はありません。

そうしたいです:
*ファイル拡張子を削除します
*フォルダ構造の奥深くにあるファイルへのURLを短くします

ファイルごとではなく、パターンマッチングを使用してこれを実行したいと思います(サイトは現時点では小さいですが、頻繁に変更され、拡大します)。

私がやりたいことのいくつかの例:
* foo.com/bar.html-> foo.com/bar
* foo.com/folder1/folder2/bar2.html-> foo.com/bar2

どんな助けでも大歓迎です。ありがとう。

乾杯、

ジン

2
Jin Liew

http://www.Sun.com/bigadmin/sundocs/articles/urlrdn.jsp から取得これはあなたが探しているもののようです。

ドメイン内のURLリダイレクト

Redirect_プロパティのurl-prefix要素を使用して、同じドメイン内の別のURLにURLを転送できます。

次の手順は、Webサイトへの訪問者が http://www.mywebsite.com/myproduct1 と入力し、 http://www.mywebsite)にリダイレクトまたは転送できるようにする方法を示しています。 .com/mywarname/products/myproduct1.jsp

  1. Sunの管理コンソールにログインしますJava System ApplicationServerまたはGlassFish。
  2. 管理コンソールで、[構成]ノードを展開します。
  3. Server-configノードを展開します。

    開発者ドメイン(クラスタリング機能を持たないドメイン)を実行している場合は、この手順を無視してください。

  4. HTTPサービスを展開します。

  5. 仮想サーバーを展開します。
  6. サーバーをクリックします。
  7. [仮想サーバーの編集]ページで、[プロパティの追加]ボタンをクリックします。
  8. [名前]列に「redirect_1」と入力します。
  9. Application Server 9.0を使用している場合は、[値]列にfrom=/<context-root>/myproduct1 url-prefix=/mywarname/mypages/products/myproduct1.jspと入力します。

    -ここで指定する<context-root>の値は、web.xmlまたはアプリケーションで指定されたコンテキストルートの値と一致する必要があります。 xmlファイル。

    Application Server 9.1を使用している場合は、[値]列にfrom=/myproduct1 url-prefix=/mywarname/mypages/products/myproduct1.jspと入力します。

2
Prix

この場合、短縮URLを認識し、リクエストを実際のターゲットに転送するjavax.servlet.Filter実装を作成する必要があります。

/**
 *
 * @author vrg
 */
@WebFilter(filterName = "SimplifiedUrlRequestDispatcher", urlPatterns = {"/*"})
public class ShortenedUrlRequestDispatcher implements javax.servlet.Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //reading configuration from filterConfig
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain)
            throws IOException, ServletException {

        HttpServletRequest httpRequest = (HttpServletRequest) request;
        String shortURI = httpRequest.getRequestURI();
        String realURI = getRealURI(shortURI);
        if (realURI == null) {
            //in this case the filter should be transparent
            chain.doFilter(request, response);
        } else {
            //forwarding request to the real URI:
            RequestDispatcher rd = request.getRequestDispatcher(realURI);
            rd.forward(request, response);
        }
    }
    /**
     * Calculates the real URI from the given URI if this is a shortened one,
     * otherwise returns null.
     * @param shortURI
     * @return 
     */
    private String getRealURI(String shortURI) {
        //TODO implement your own logic using regexp, or anything you like
        return null;
    }

    @Override
    public void destroy() {
    }

}
1
user2728152

привет!優れた入門書ですが、もう1つ-RequestDispatcher rd = request.getRequestDispatcher(realURI);はサーブレットパスで動作し、アプリケーション名でURIを取得すると、エラーが発生します。したがって、-req.getServletPath()はコンテキストなしで正しいパスを提供し、ディスパッチャは正常に機能します。

0
rustem.russia