読者です 読者をやめる 読者になる 読者になる

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

Java サーブレットで受け取ったリクエストURLをsplitを使って分解して、解析するサンプル

JavaEE
<スポンサーリンク>

URLを取得するメソッド

HttpServletRequestのgetRequestURL()メソッドを使うことで、リクエストされたURLを取得することができる。

StringBuffer orgUrl = req.getRequestURL();

たとえば、リクエストされたURLが、こんな感じに設定されているとしよう。

http://documentroot/team_member/regist.json

こんな感じで、リクエストされたURLによって処理を変更したいとき。
こういうときはURLを分解して解析する。

実装例はこんな感じ。

public void doPost(HttpServletRequest req, HttpServletResponse res)
				throws ServletException, IOException {
	String response = null;
	String method = null;
	String suffix = null;
	method = getMethod(req);
	suffix = getSuffix(req);
}

private String getMethod(HttpServletRequest req) {
	String method = null;
	StringBuffer orgUrl = req.getRequestURL();
	String endPoint = getEndPoint(orgUrl);

	String[] methodAndSuffix = endPoint.split("\\.");
	method = methodAndSuffix[methodAndSuffix.length - 2];
	return method;
}

private String getSuffix(HttpServletRequest req) {
	String suffix = null;
	StringBuffer orgUrl = req.getRequestURL();
	String endPoint = getEndPoint(orgUrl);
	String[] methodAndSuffix = endPoint.split("\\.");
	suffix = methodAndSuffix[methodAndSuffix.length - 1];
	return suffix;
}
private String getEndPoint(StringBuffer url) {
	String urlStr = url.toString();
	String[] urlParts = urlStr.split("/");
	String endPoint = urlParts[urlParts.length - 1];
	return endPoint;
}

簡単に解説すると、リクエストされたURLを「/(スラッシュ)」で区切るのが、

String urlStr = url.toString();
String[] urlParts = urlStr.split("/");
String endPoint = urlParts[urlParts.length - 1];

の部分。
これでスラッシュで区切ることができるので、最後の「regist.json」を取り出した。

で、次は「regist.json」という文字列を「.(カンマ)」で区切ってみる。

String endPoint = getEndPoint(orgUrl);
String[] methodAndSuffix = endPoint.split("\\.");
method = methodAndSuffix[methodAndSuffix.length - 2];

.(カンマ)をsplitするためには、エスケープを使う必要がある。
正規表現で「.」は「ある一文字」の意味があるので、「\\」を使ってエスケープする。

これでリクエストされたURLを解析することができた。