web-dev-qa-db-ja.com

サーブレットのホスト名(ポート付き)を取得するにはどうすればよいですか

ServletContextがメソッドを提供するかもしれないと思った。 ServletContextのgetAttribute()メソッドはヘルプを提供しますか?つまり、ヘルプになる属性名(「ホスト」、「ポート」など)がありますか?.

その理由は、デプロイされた場所でアプリケーションを実行し、ある時点でユーザーがファイルサーバー上の場所を指すリンクをクリックできるようにする必要があるからです。したがって、ホストとポートで参照する必要があり、内部参照を使用できません。

41
Ankur
ServletRequest.getServerName(...)
ServletRequest.getServerPort(...)
57
Everyone

DoGetまたはdoPostメソッドに渡されたServletRequestオブジェクトには、この情報を提供するgetServerNameおよびgetServerPortメソッドがあります。

例えば

public void doGet(ServletRequest request, ServletResponse response) {
    System.out.println("Host = " + request.getServerName());
    System.out.println("Port = " + request.getServerPort());
}
14
Tom Jefferys

@Everyoneには良い答えがあります。しかし、スキーム、サーバー名、ポートを取得してからマージします。もっと簡単な方法があります:

HttpServletRequest.getRequestURL および HttpServletRequest.getRequestURI を使用できます。

StringBuffer url = request.getRequestURL();
String uri = request.getRequestURI();
String Host = url.substring(0, url.indexOf(uri)); //result
5
Amit G

私は私の古いプロジェクトで文字列を見つけました:

request.getHeader("Host").contains("xxx")

多分それは解決策ですか?

3
user310791

上記で説明したように、ホストとポートはリクエストを通じて取得できます。一方、Javaアプリケーションはホスト環境を認識していないため、ServletContextが情報を提供することはできません。つまり、コンテキストパス「foo」(ServletContextによって取得できるアプリケーション) #getContextPath())は、httpポート8080とhttpsポート8043の両方からリクエストを受信できます。参照: https://web.archive.org/web/20120401225136/http://www.Java.net: 80/node/701934

3
Fang Zhen