23

以下の 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

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

4

6 に答える 6

38

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

http://localhost:9090/dts

あなたの場合、上記の文字列は次のもので構成されています。

  1. スキーム:http
  2. サーバーのホスト名: localhost
  3. サーバーポート: 9090
  4. コンテキスト パス:dts

(リクエスト パスの要素に関する詳細は、公式の Oracle Java EE チュートリアル:リクエストからの情報の取得 を参照してください)
##最初のバリアント:###

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です。つまり、パスにスキームを含める必要があります。

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

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

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

于 2012-12-28T22:35:32.377 に答える
19

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

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

// これを試して

System.out.println(serverName + ":" +portNumber + contextPath );
于 2012-12-28T06:50:46.867 に答える
16

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

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

以下も参照してください。

于 2012-12-29T12:08:45.653 に答える
3

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

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

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

tString = tString + cpath;
于 2012-12-28T06:13:14.067 に答える