web-dev-qa-db-ja.com

HttpServletRequestからURLの一部のみを取得する方法は?

次のURLから(http://localhost:9090/dts)単独。
それは、(documents/savedoc)(または)
取得のみが必要-(http://localhost:9090/dts)

http://localhost:9090/dts/documents/savedoc  

上記を取得するためにリクエストで利用可能な方法はありますか?

私は以下を試して結果を得ました。しかし、まだ試みています。

System.out.println("URL****************"+request.getRequestURL().toString());  
System.out.println("URI****************"+request.getRequestURI().toString());
System.out.println("ContextPath****************"+request.getContextPath().toString());

URL****************http://localhost:9090/dts/documents/savedoc  
URI****************/dts/documents/savedoc  
ContextPath****************/dts

誰でもこれを修正するのを手伝ってくれますか?

17
user1732653

このため、APIが提供するメソッドはなく、カスタマイズする必要があります。

String serverName = request.getServerName();
int portNumber = request.getServerPort();
String contextPath = request.getContextPath();

// これを試して

System.out.println(serverName + ":" +portNumber + contextPath );
13
NPKR

あなたは正確に取得したいと言います:

http://localhost:9090/dts

あなたの場合、上記の文字列は以下で構成されています:
1) schemehttp
2)server ホスト名localhost
3)server port9090
4) context pathdts

(リクエストパスの要素に関する詳細情報は、公式のOracleJava EEチュートリアルにあります: Getting Information from Requests

最初のバリアント:

String scheme = request.getScheme();
String serverName = request.getServerName();
int serverPort = request.getServerPort();
String contextPath = request.getContextPath();  // includes leading forward slash

String resultPath = scheme + "://" + serverName + ":" + serverPort + contextPath;
System.out.println("Result path: " + resultPath);


2番目のバリアント:

String scheme = request.getScheme();
String Host = request.getHeader("Host");        // includes server name and server port
String contextPath = request.getContextPath();  // includes leading forward slash

String resultPath = scheme + "://" + Host + contextPath;
System.out.println("Result path: " + resultPath);

どちらのバリアントも、必要なものを提供します:http://localhost:9090/dts

もちろん、他の人がすでに書いたように、他の亜種があります...

それは、あなたがhttp://localhost:9090/dts、つまり、includeスキームへのパスが必要です。

スキームがまだ必要ない場合、簡単な方法は次のとおりです。

String resultPath = request.getHeader("Host") + request.getContextPath();

そして(あなたの場合)を取得します:localhost:9090/dts

35
informatik01

URLからURIを削除し、それにコンテキストパスを追加するだけです。緩いスキームやポートをいじる必要はありません。デフォルトのポート80はURLにまったく表示する必要はありません。

StringBuffer url = request.getRequestURL();
String uri = request.getRequestURI();
String ctx = request.getContextPath();
String base = url.substring(0, url.length() - uri.length() + ctx.length());
// ...

こちらもご覧ください:

12
BalusC

私の理解では、ドメイン部分とコンテキストパスのみが必要です。この理解に基づいて、このメソッドを使用して必要な文字列を取得できます。

String domain = request.getRequestURL().toString();
String cpath = request.getContextPath().toString();

String tString = domain.subString(0, domain.indexOf(cpath));

tString = tString + cpath;
1
pratikch