HttpServletRequestオブジェクトのURL解析機能
サーブレット側で受け取ったリクエストをHttpServletRequestオブジェクトから簡単に解析することができる。この例を示す。
import java.util.stream.*;
import javax.servlet.http.*;
/**
* httpリクエストを要素に分解して表示する。
*
* <h2>URLパターンが"/user/*"の場合</h2>
*
* <h3>コンテキストパス無し(ルートコンテキスト)の場合</h3>
* <p>
* つまり、サーブレットコンテナ側で"/"が指定されている場合。
* </p>
* <pre>
* http://localhost:8080/user/1/2?query=1
* </pre>
* 以下になる。
* <pre>
* scheme:http, serverName:localhost, serverPort:8080,
* contextPath:, servletPath:/user, pathInfo:/1/2, params:query=1
* </pre>
*
* <h3>コンテキストパスが設定されている場合</h3>
* <p>
* コンテキストパスが"/test"だとすると。
* </p>
* <pre>
* http://localhost:8080/test/user/1/2?query=1
* </pre>
* これは以下になる
* <pre>
* scheme:http, serverName:localhost, serverPort:8080,
* contextPath:/test, servletPath:/user, pathInfo:/1/2, params:query=1
* </pre>
*
* <h2>URLパターンに"/user"も含めた場合</h2>
* <pre>
* http://localhost:8080/test/user?query=1
* </pre>
* 上の結果は
* <pre>
* scheme:http, serverName:localhost, serverPort:8080,
* contextPath:/test, servletPath:/user, pathInfo:null, params:query=1
* </pre>
*
* @author ysugimura
*/
public class RequestElements {
public static void show(HttpServletRequest r) {
System.out.println(
"scheme:" + r.getScheme() +
", serverName:" + r.getServerName() +
", serverPort:" + r.getServerPort() +
", contextPath:" + r.getContextPath() +
", servletPath:" + r.getServletPath() +
", pathInfo:" + r.getPathInfo() +
", params:" + r.getParameterMap().entrySet().stream()
.map(e->e.getKey() + "=" + e.getValue()[0]).collect(Collectors.joining(","))
);
}
}