ServletContextがメソッドを提供するかもしれないと思った。 ServletContextのgetAttribute()メソッドはヘルプを提供しますか?つまり、ヘルプになる属性名(「ホスト」、「ポート」など)がありますか?.
その理由は、デプロイされた場所でアプリケーションを実行し、ある時点でユーザーがファイルサーバー上の場所を指すリンクをクリックできるようにする必要があるからです。したがって、ホストとポートで参照する必要があり、内部参照を使用できません。
ServletRequest.getServerName(...)
ServletRequest.getServerPort(...)
DoGetまたはdoPostメソッドに渡されたServletRequestオブジェクトには、この情報を提供するgetServerName
およびgetServerPort
メソッドがあります。
例えば
public void doGet(ServletRequest request, ServletResponse response) {
System.out.println("Host = " + request.getServerName());
System.out.println("Port = " + request.getServerPort());
}
@Everyoneには良い答えがあります。しかし、スキーム、サーバー名、ポートを取得してからマージします。もっと簡単な方法があります:
HttpServletRequest.getRequestURL および HttpServletRequest.getRequestURI を使用できます。
StringBuffer url = request.getRequestURL();
String uri = request.getRequestURI();
String Host = url.substring(0, url.indexOf(uri)); //result
私は私の古いプロジェクトで文字列を見つけました:
request.getHeader("Host").contains("xxx")
多分それは解決策ですか?
上記で説明したように、ホストとポートはリクエストを通じて取得できます。一方、Javaアプリケーションはホスト環境を認識していないため、ServletContextが情報を提供することはできません。つまり、コンテキストパス「foo」(ServletContextによって取得できるアプリケーション) #getContextPath())は、httpポート8080とhttpsポート8043の両方からリクエストを受信できます。参照: https://web.archive.org/web/20120401225136/http://www.Java.net: 80/node/701934