次の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
誰でもこれを修正するのを手伝ってくれますか?
このため、APIが提供するメソッドはなく、カスタマイズする必要があります。
String serverName = request.getServerName();
int portNumber = request.getServerPort();
String contextPath = request.getContextPath();
// これを試して
System.out.println(serverName + ":" +portNumber + contextPath );
あなたは正確に取得したいと言います:
http://localhost:9090/dts
あなたの場合、上記の文字列は以下で構成されています:
1) scheme :http
2)server ホスト名 (:localhost
3)server port (:9090
4) context path :dts
(リクエストパスの要素に関する詳細情報は、公式の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);
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
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());
// ...
私の理解では、ドメイン部分とコンテキストパスのみが必要です。この理解に基づいて、このメソッドを使用して必要な文字列を取得できます。
String domain = request.getRequestURL().toString();
String cpath = request.getContextPath().toString();
String tString = domain.subString(0, domain.indexOf(cpath));
tString = tString + cpath;