web-dev-qa-db-ja.com

サーブレットのルートURl

サーブレットの1つからWebアプリケーションのルートURLを取得したい。

「www.mydomain.com」にアプリケーションをデプロイする場合、「 http://www.mydomain.com 」のようなルートURLを取得します。

8080ポートのローカルTomcatサーバーにデプロイすると、http://localhost:8080/myapp

サーブレットからWebアプリケーションのルートURLを取得する方法を教えてもらえますか?

public class MyServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String rootURL="";
        //Code to get the URL where this servlet is deployed

    }
}
32
DonX

URLクライアントが表示(および/またはブラウザに入力)し、サーブレットがデプロイされているコンテナによって提供されるURLが非常に異なる場合があることを理解していますか?

ただし、後者を取得するには、 HttpServletRequest で使用できるメソッドがいくつかあります。

  • getScheme()getServerName()getServerPort()、およびgetContextPath()を呼び出し、適切なセパレーターを使用してそれらを組み合わせることができます。
  • または、getRequestURL()を呼び出して、getServletPath()getPathInfo()を削除できます。
38
ChssPly76

この関数は、HttpServletRequestからベースURLを取得するのに役立ちます。

  public static String getBaseUrl(HttpServletRequest request) {
    String scheme = request.getScheme() + "://";
    String serverName = request.getServerName();
    String serverPort = (request.getServerPort() == 80) ? "" : ":" + request.getServerPort();
    String contextPath = request.getContextPath();
    return scheme + serverName + serverPort + contextPath;
  }
12

通常、URLを取得することはできません。ただし、特定の場合には回避策があります。参照: ServletContextのみでアプリケーションのURLを見つける

5
janko
public static String getBaseUrl(HttpServletRequest request) {
    String scheme = request.getScheme();
    String Host = request.getServerName();
    int port = request.getServerPort();
    String contextPath = request.getContextPath();

    String baseUrl = scheme + "://" + Host + ((("http".equals(scheme) && port == 80) || ("https".equals(scheme) && port == 443)) ? "" : ":" + port) + contextPath;
    return baseUrl;
}
2
Mohsen Zamani
  1. ウェルカムファイルにスクリプトレットを記述して、ルートパスをキャプチャします。 index.jspがデフォルトのファイルであると想定しています。そのため、次のコードをその中に入れます

    <% RootContextUtil rootCtx = RootContextUtil.getInstance(); if( rootCtx.getRootURL()==null ){ String url = request.getRequestURL().toString(); String uri = request.getRequestURI(); String root = url.substring( 0, url.indexOf(uri) ); rootCtx.setRootURL( root ); } %>

  2. 値を次のように呼び出して、アプリケーション内で必要な場所でこの変数を直接使用します。

String rootUrl = RootContextUtil.getInstance().getRootURL();

注:プロトコル/ポート/などについて心配する必要はありません。これがすべてに役立つことを願っています

2
jagan