45

ServletContext がメソッドを提供するかもしれないと思いました。ServletContext の getAttribute() メソッドは何らかのヘルプを提供しますか。つまり、役立つ属性名 (おそらく「ホスト」、「ポート」) がありますか。

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

4

5 に答える 5

61
ServletRequest.getServerName(...)
ServletRequest.getServerPort(...)
于 2010-04-07T09:12:49.737 に答える
16

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

例えば

public void doGet(ServletRequest request, ServletResponse response) {
    System.out.println("Host = " + request.getServerName());
    System.out.println("Port = " + request.getServerPort());
}
于 2010-04-07T09:16:48.943 に答える
8

@誰もが良い答えを持っています。ただし、スキーム、サーバー名、およびポートを取得してから、それらをマージします。もっと簡単な方法があります:

HttpServletRequest.getRequestURLHttpServletRequest.getRequestURIを使用できます。

StringBuffer url = request.getRequestURL();
String uri = request.getRequestURI();
String host = url.substring(0, url.indexOf(uri)); //result
于 2016-02-23T08:21:29.987 に答える
4

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

于 2014-06-27T11:31:35.927 に答える
3

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

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

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

于 2010-04-07T09:17:11.603 に答える