JSP/Servlet | HTTPServletRequestメソッド
HTTPリクエストで送信された値、Cookie、ヘッダー、クライアント情報を取得するために使うものがrequestです。
このRequestオブジェクトのメソッドについて整理しました。
始める前に
戻り値の例は、次のURLを受け取ったものとして説明します。
http://www.devkuma.com:8080/app/request.jsp?name=devkuma
主な情報
| メソッド | 戻り値の例 | 説明 |
|---|---|---|
| request.getRequestURL() | http://www.devkuma.com:8080/app/request.jsp | |
| request.getRequestURI() | /app/request.jsp | URLからスキーム、サーバー名、ポート番号を除いた残りのアドレスとパラメータ |
| request.getScheme() | http | http、https、ftpなどのプロトコル |
| request.getServerName() | www.devkuma.com | サーバー名 |
| request.getServerPort() | 8080 | サーバーポート |
| request.getContextPath() | /app | コンテキストパス |
| request.getMethod() | GET | GET/POSTなどのHTTPメソッド |
| request.isSecure() | false | SSLセキュリティの有無。httpsのような安全なチャネルを使っているかをtrue/falseで返す |
| request.getLocale() | ko_KR | ロケール情報 |
| request.getProtocol() | HTTP/1.1 | 使用しているプロトコル。プロトコル/メジャーバージョン.マイナーバージョン |
Local基本情報(サーバー情報)
| メソッド | 戻り値の例 | 説明 |
|---|---|---|
| request.getLocalAddr() | 127.0.0.1 | |
| request.getLocalName() | localhost | |
| request.getLocalPort() | 8080 |
Remote情報(クライアント情報)
| メソッド | 戻り値の例 | 説明 |
|---|---|---|
| request.getRemoteAddr() | 127.0.0.1 | |
| request.getRemoteHost() | 127.0.0.1 | |
| request.getRemotePort() | 60361 |
Session ID
| メソッド | 戻り値の例 | 説明 |
|---|---|---|
| request.getRequestedSessionId() | 39AE7AC19BC174D803C2A7BD8638E382 | セッションID |
| request.getSession().getId() | 39AE7AC19BC174D803C2A7BD8638E382 | セッションID |
| request.isRequestedSessionIdFromCookie() | true | session idがCookieで提供されたかどうか |
| request.isRequestedSessionIdFromURL() | false | session idがURLの一部として提供されたかどうか |
| request.isRequestedSessionIdValid() | true | sessionがまだ有効かどうか |
Parameter情報
| メソッド | 戻り値の例 | 説明 |
|---|---|---|
| request.getParameterNames() | java.util.Enumeration | すべてのパラメータ名を返します。 |
| request.getParameter(name) | devkuma | パラメータ名でパラメータ値を返します。 |
すべてのParameter値を表示
Enumeration params = request.getParameterNames();
while (params.hasMoreElements()) {
String name = (String) params.nextElement();
String value = request.getParameter(name);
logger.debug(name + "=" + value);
}
表示される戻り値は次のとおりです。
name=devkuma
/app/request.jsp?name=devkumaとしてリクエストしたため、上記のように表示されます。
Cookie情報
| メソッド | 戻り値の例 | 説明 |
|---|---|---|
| request.getCookies() | Array | すべてのCookie値を返します。 |
すべてのCookie値を表示
Cookie cookies[] = request.getCookies();
for(int i = 0; i < cookies.length; i++) {
String name = cookies[i].getName();
String value = cookies[i].getValue();
logger.debug(name + "=" + value);
}
表示される戻り値は次のとおりです。
JSESSIONID=39AE7AC19BC174D803C2A7BD8638E382
この戻り値の例では、特に追加したCookie値がないためJSESSIONIDだけが表示されます。
Attribute
| メソッド | 戻り値の例 | 説明 |
|---|---|---|
| request.getAttributeNames() | Array | すべてのattribute名を返します。 |
| request.getAttribute(name) | … | attribute値を返します。 |
すべてのAttribute値を表示
Enumeration<String> attrs = request.getAttributeNames();
while (attrs.hasMoreElements()) {
String name = (String)attrs.nextElement();
String value = (String)request.getAttribute(name);
logger.debug(name + " : " + value);
}
Header情報
| メソッド | 戻り値の例 | 説明 |
|---|---|---|
| request.getHeaderNames() | java.util.Enumeration | すべてのヘッダー名を返します。 |
| request.getHeader(“user-agent”) | Mozilla/5.0 …. | ヘッダー名でヘッダー値を返します。 |
すべてのHeader値を表示
Enumeration<String> headers = request.getHeaderNames();
while (headers.hasMoreElements()) {
String name = (String) headers.nextElement();
String value = request.getHeader(name);
logger.debug(name + "=" + value);
}
表示される戻り値は次のとおりです。
host=www.devkuma.com:8080
connection=keep-alive
cache-control=max-age=0
upgrade-insecure-requests=1
user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
accept-encoding=gzip, deflate
accept-language=ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7,ja;q=0.6,es;q=0.5
cookie=JSESSIONID=26356CFACA2FFA1B4AA25C75D291E028
Request Body
Request Bodyで渡されるデータを取得する方法は次のとおりです。
DataInputStream dis = new DataInputStream(request.getInputStream());
String str = null
while ((str = dis.readLine()) != null) {
logger.debug(new String(str.getBytes("ISO-8859-1"), "utf-8") + "/n");
// euc-krで送信された韓国語は文字化けする。
}