10

私はさまざまなサーバーと構成で作業しています。スキームを取得するための最良のJavaコードアプローチは何ですか://ホスト:[ポート80でない場合のポート]。

ここに私が使用したコードがありますが、これが最善のアプローチであるかどうかはわかりません。(これは疑似コードです)

HttpServletRequest == リクエスト

String serverName = request.getServerName().toLowerCase();
String scheme = request.getScheme();
int port = request.getServerPort();

String val = scheme + "://" + serverName + ":" port;

val が返すようなもの:

http(s)://server.com/

また

http(s)://server.com:7770

基本的に、クエリ文字列と「コンテキスト」以外はすべて必要です。

URLの使用も検討しました:

String absURL = request.getRequestURL();
URL url = new URL(absURL);

url.get????
4

6 に答える 6

19

これを試して:

URL serverURL = new URL(request.getScheme(),      // http
                        request.getServerName(),  // host
                        request.getServerPort(),  // port
                        "");                      // file

編集

httpおよびhttpsのデフォルト ポートを非表示にします。

int port = request.getServerPort();

if (request.getScheme().equals("http") && port == 80) {
    port = -1;
} else if (request.getScheme().equals("https") && port == 443) {
    port = -1;
}

URL serverURL = new URL(request.getScheme(), request.getServerName(), port, "");
于 2009-07-09T15:34:45.593 に答える
2
URI u=new URI("http://www.google.com/");
String s=u.getScheme()+"://"+u.getHost()+":"+u.getPort();

Cookie が言ったように、java.net.URI ( docs ) から。

于 2009-07-09T15:32:28.343 に答える
1
public String getServer(HttpServletRequest request) {
  int port = request.getServerPort();
  StringBuilder result = new StringBuilder();
  result.append(request.getScheme())
        .append("://")
        .append(request.getServerName());

  if (port != 80) {
    result.append(':')
          .append(port);
  }

  return result;
}
于 2009-07-09T15:35:30.320 に答える
0

java.net.URIはあなたが望むことをすると思います。

于 2009-07-09T15:28:40.833 に答える
0

URL をリクエストに表示されたとおりに保持したい場合 (たとえば、ポートが明示的に指定されていない場合はポートを除外したい場合)、次のようなものを使用できます。正規表現は、HTTP および HTTPS URL に一致します。キャプチャ グループ 1 には、スキームからオプション ポートまでのサーバー ルートが含まれます。グループ 2 には、ホスト名のみが含まれます。

String regex = "(^http[s]?://([\\w\\-_]+(?:\\.[\\w\\-_]+)*)(?:\\:[\\d]+)?).*$";
Matcher urlMatcher = Pattern.compile(regex).matcher(request.getRequestURL());
String serverRoot = urlMatcher.group(1);
于 2009-07-09T15:44:07.837 に答える