2009-07-09 5 views
8

私は異なるサーバーと構成で作業します。 scheme:// host:[ポート80でない場合のポート]を取得するための最良のJavaコードアプローチは何ですか?Java:サーブレットリクエストからのホスト、スキーム、おそらくはポートの文字列表現

これは私が使ったコードですが、これが最善のアプローチかどうかはわかりません。

http(s)://server.com/ 

または

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

を基本的に、私は、クエリ以外のすべてを必要とする:valが返すよう (これは擬似コードです)

のHttpServletRequest ==要求

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

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

文字列と 'コンテキスト'。

私はまた、URLを使用することを検討した

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

url.get???? 
+0

http://stackoverflow.com/questions/883136/is-there-a-good-url-builder-for-javaは非常によく似た質問に見えます。 – aem

+0

これはかなり一般的な質問であり、私はApacheのlibsを使用することはできません。 –

答えて

16

この試してみてください。あなたの場合

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, ""); 
+0

ポートがポート80の場合、URL文字列repには次のものが含まれますか?80 text? –

+0

はい、デフォルトスキームのポートを使用するために-1を渡すことができます – dfa

2
URI u=new URI("http://www.google.com/"); 
String s=u.getScheme()+"://"+u.getHost()+":"+u.getPort(); 

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

+0

右の音。 これらの関数をサーブレットの「要求」オブジェクトとともに使用できます。 –

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; 
} 
0

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

EDIT HTTPHTTPS

隠れデフォルトのポートをリクエストに表示されている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); 
+0

私はここには正規表現 – msangel

関連する問題