サーブレットでリクエストURLやクエリパラメータを受け取る


スポンサーリンク

以下のようなURLでリクエストを投げたときに、リクエストURLの情報をサーブレットで処理するサンプルを書いてみます。

package sample;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ExampleServlet extends HttpServlet {
	public void doGet(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {

		StringBuffer requestUrl = req.getRequestURL();
		String requestUrlStr = requestUrl.toString();
		String requestParameter = req.getParameter("sample");
		String requestHeader = req.getHeader("host");

		System.out.println("REQUEST URL:" + requestUrlStr);
		System.out.println("REQUEST PARAMETER:" + requestParameter);
		System.out.println("REQUEST HEADER:" + requestHeader);

		Enumeration en = req.getHeaderNames();

		while (en.hasMoreElements()) {
			String head = (String)en.nextElement();
			System.out.println(head + ":" + req.getHeader(head));
		}
	}
}

情報をサーバ上のコンソールに出力しています。

このURLにリクエストを投げると・・・

http://localhost:8080/love-report/example?sample=test

以下のように表示されます。

REQUEST URL:http://localhost:8080/love-report/example
REQUEST PARAMETER:test
REQUEST HEADER:localhost:8080
host:localhost:8080
connection:keep-alive
accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
user-agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36
accept-encoding:gzip, deflate, sdch
accept-language:ja,en-US;q=0.8,en;q=0.6

ちなみに、URLの「?」以降に表示されるのはクエリパラメータといって、URLに付属した情報をサーバに送るためのものです。

最後に、リクエストURLの情報を取得するメソッドを細かくみていきます。

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
  version="2.4">

  <servlet>
    <servlet-name>example</servlet-name>
    <servlet-class>sample.ExampleServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>example</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

</web-app>

ソースコード

package sample;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ExampleServlet extends HttpServlet {
	public void doGet(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {

		String contextPath = req.getContextPath();
		String serverPath = req.getServletPath();
		String pathInfo = req.getPathInfo();
		String queryString = req.getQueryString();
		String requestUri = req.getRequestURI();

		System.out.println("コンテキストパス:" + contextPath);
		System.out.println("サーバパス:" + serverPath);
		System.out.println("拡張パス:" + pathInfo);
		System.out.println("クエリパラメータ:" + queryString);
		System.out.println("URLのパス部分:" + requestUri);

	}
}

以下のようなURLにリクエストを投げます。

http://localhost:8080/love-report/example/hoge?sample=test

結果は以下のようになります。

コンテキストパス:/love-report
サーバパス:
拡張パス:/example/hoge
クエリパラメータ:sample=test
URLのパス部分:/love-report/example/hoge


(参考書籍)

改訂2版 パーフェクトJava

改訂2版 パーフェクトJava

パーフェクトJavaは最高の教科書だと思います。
何度も何度も読み返している本です。