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

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

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

サーブレットでリクエストされたURLを取得して、「/」で区切って末尾の文字列を取得する

JavaEE
<スポンサーリンク>

RESTっぽい実装をしたいとき、サーバ側でURLに応じた処理をしたいことがある。
そういうときは、サーバ側でURLを文字列として解析して、URLによって処理を振り分ける必要があると考える。

URLによって処理を振り分けるには、URLを[/]などで区切って文字列比較しなければならない。
どうやるかというと、こんな感じ。

public void doGet(HttpServletRequest req, HttpServletResponse res)
				throws ServletException, IOException {
	//サーブレットにリクエストされたURLを取得する
	StringBuffer requestUrl = req.getRequestURL();
	//StringBufferをString型にする
	String requestUrlStr = requestUrl.toString();
	//「/」で区切る
	String[] urlParts = requestUrlStr.split("/");
	String method = urlParts[urlParts.length -1];

	PrintWriter out = res.getWriter();

	if ("select".equals(method)) {
		selectMethod(out);
	} else if("update".equals(method)) {
		updateMethod(out);
	} else {
		out.println("リクエストしたURLは見つかりません!");
	}
}

public void selectMethod(PrintWriter out) {
	out.println("select!");
}
public void updateMethod(PrintWriter out) {
	out.println("update!");
}


web.xmlのurl-patternは

<url-pattern>/controller/*</url-pattern>

のようにして、controller以下の全てのリクエストを同じサーブレットで受けるようにする。
全体を書くとこんな感じ。

<servlet>
        <servlet-name>controller</servlet-name>
        <servlet-class>controller.ControllerServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>controller</servlet-name>
    <url-pattern>/controller/*</url-pattern>
</servlet-mapping>

さて、実際に試してみよう。

http://localhost:8180/test_project/controller/select

にリクエストを飛ばすと、画面には

select!

と表示される。

http://localhost:8180/test_project/controller/update
||<	
にリクエストを飛ばすと、画面には
>||
update!

と表示される。