サーブレットでリクエスト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
(参考書籍)
- 作者: 井上誠一郎,永井雅人
- 出版社/メーカー: 技術評論社
- 発売日: 2014/11/01
- メディア: 大型本
- この商品を含むブログ (3件) を見る
何度も何度も読み返している本です。