JSP request 기본 객체
JSP 기본 내장 객체 중 request 객체는 JSP 페이지에서 가장 많이 사용되는 객체로서 웹 브라우저와 같은 클라이언트로부터의 요청 정보를 담아 제공하는 객체입니다. request 객체는 javax.servlet.http.HttpServletRequest 객체이며 JSP가 서블릿으로 변환되었을 때 요청을 처리하기 위해 실행되는 메서드인 _jspService() 메서드의 첫번째 파라미터로 넘어오게 됩니다. 이는 서블릿 클래스를 작성할 때 service() 메서드나 혹은 doGet(), doPost() 등의 첫번째 파라미터로 HttpServletRequest를 받는것과 똑같습니다.
때문에 jsp 페이지의 스크립트릿에서 따로 선언하지 않아도 기본적으로 사용 가능합니다.
request 내장객체(javax.servlet.http.HttpServletRequest) 의 메서드
메서드 |
리턴 타입 |
설명 |
getRemoteAddr() |
Sring |
서버에 연결한 클라이언트의 IP를 구한다. 보안이 필요한 웹 어플리케이션인 경우 IP를 검사하거나 접근 기록을 남기는데에 사용 가능하다. |
getProtocol() |
String |
클라이언트가 요청한 프로토콜을 구한다. |
getCharacterEncoding() |
String |
클라이언트가 전송한 http 요청 정보 인코딩에 사용된 캐릭터 set을 구한다. |
getContentType() |
String |
클라이언트가 전송한 http 요청 정보 콘텐츠 타입을 구한다.
이는 클라이언트가 전송한 http 요청 메세지의 Content-Type 헤더 값이다. |
getContentLength() |
long |
클라이언트가 전송한 http 요청 정보의 길이를 구한다. 정보의 길이를 구할 수 없는 경우에는 -1을 리턴한다. |
getMethod() |
String |
클라이언트가 요청한 HTTP Method를 구한다. |
getServerName() |
String |
클라이언트가 연결할 때 사용한 서버 이름을 구한다. |
getRequestURI() |
String |
클라이언트가 요청한 URL에서 경로를 구한다. |
getServerPort() |
int |
서버가 사용중인 포트 번호를 구한다. |
getContextPath() |
String |
JSP 페이지가 속한 웹 어플리케이션의 컨텍스트 경로를 구한다. |
getParameter(String paramName) |
String |
http 요청 파라미터의 값을 구한다. 요청 파라미터명을 매개변수로 넘긴다. |
getParameterValues(Stirng paramName) |
String[] |
http 요청 파라미터의 값을 배열로 구한다. 요청 파라미터명을 매개변수로 넘긴다.
getParameter() 와 다른 점은 paramName에 해당하는 파라미터 값이 여러개인 경우 사용한다는 점이다. |
getParameterMap() |
java.util.Map |
클라이언트가 전송한 http 요청 파라미터들을 Map객체에 <파라미터명, 파라미터값> 형식으로 담아 리턴한다. |
getParameterNames() |
java.util.Enumeration |
클라이언트가 전송한 http 요청 파라미터의 파라미터명들을 담은 Enumeration 객체를 구한다. |
setCharacterEncoding(String charset) |
void |
클라이언트의 요청 정보를 디코딩할 때 사용할 캐릭터셋을 설정한다.
getParameter()와 같은 파라미터 정보를 얻어오는 메서드 사용 전에 설정해야 적용된다.
주의할점은 HTTP 메세지 body 영역만 인코딩 하는 메서드이므로 GET방식의 경우 서버 설정을 통해 인코딩설정을 변경해주어야 한다.
톰캣기준으로 server.xml에서 변경할 수 있다.
|
클라이언트 정보 출력
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 |
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>request 객체</title>
</head>
<body>
클라이언트 IP = <%= request.getRemoteAddr() %> <br>
서버포트 = <%= request.getServerPort() %> <br>
컨텍스트 경로 = <%= request.getContextPath() %> <br>
요청 URI = <%= request.getRequestURI() %> <br>
요청 HTTP 메서드 = <%= request.getMethod() %> <br>
HTTP 요청 정보 길이 = <%= request.getContentLength() %> <br>
요청정보 인코딩 = <%= request.getCharacterEncoding() %> <br>
요청정보 콘텐츠타입 = <%= request.getContentType() %> <br>
요청정보 프로토콜 = <%= request.getProtocol() %> <br>
서버이름 = <%= request.getServerName() %> <br>
</body>
</html>
|
cs |
설명
브라우저에서 GET 방식으로 http://localhost:8080/myApp/requestTest.jsp 를 요청하였습니다.
IP의 경우 IPv6 주소를 리턴했는데 이는 IPv4에서 127.0.0.1(localhost)와 같은 의미입니다.
서버포트로는 8080이 사용되었습니다.
컨텍스트 경로는 웹어플리케이션의 루트 경로로 requestTest.jsp 페이지는 /myApp 어플리케이션에 속해 있으므로 /myApp 을 리턴했습니다.
요청 URI는 URL주소에서 포트 뒤의 /myApp/requestTest.jsp입니다.
요청 메서드는 GET입니다.
HTTP 요청 정보에서 GET방식의 경우 데이터를 URL에 포함시켜 보내므로 -1입니다.
요청정보 인코딩은 따로 하지 않았으므로 null입니다. 콘텐츠 타입도 마찬가지입니다.
요청 프로토콜은 http를 사용하였고 http 1.1버전을 사용하였습니다.
서버 이름 또한 현재 컴퓨터에서 띄운 서버이므로 localhost입니다.
요청 파라미터 정보 출력
요청 파라미터 정보를 출력하기 위해 다음과 같이 정보를 입력하여 서버로 전송하는 페이지와 요청 정보를 출력하는 페이지 두 개를 만들겠습니다.
정보 입력 페이지(formTest.jsp)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 |
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>정보 입력 폼</title>
</head>
<body>
<form action="paramTest.jsp">
이름 : <input type="text" name="userName"><br>
나이 : <input type="text" name="age"><br><br>
취미 선택 <br>
<input type="checkbox" name="hobby" value="운동">운동
<input type="checkbox" name="hobby" value="독서">독서
<input type="checkbox" name="hobby" value="요리">요리 <br><br>
<input type="submit" value="프로필전송">
</form>
</body>
</html>
|
cs |
정보 출력 페이지(formTest.jsp)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 |
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//요청 파라미터에 한글이 넘어오는 경우 필수
request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>요청 정보 출력 폼</title>
</head>
<body>
입력한 이름 : <%= request.getParameter("userName") %><br>
입력한 나이 : <%= request.getParameter("age") %><br>
<%
String[] hobbies = request.getParameterValues("hobby");
for(int i=0; i < hobbies.length; i++){
%>
취미<%= i + 1 %> = <%= hobbies[i] %><br>
<%
}
%>
</body>
</html> |
cs |
요청 테스트
formTest.jsp에서 폼에 다음과 같이 입력 후 프로필 전송을 누르면 <form> 태그의 action 속성값인 paramTest.jsp 경로에 데이터를 전송하게 됩니다.
action 속성값에는 폼에 입력한 데이터를 전송할 경로를 넣는데 /로 시작하는 절대경로로 적지 않고 이와같이 paramTest.jsp 를 넣게 되면 상대경로로 판단하여 전송합니다. 여기서는 formTest.jsp와 paramTest.jsp가 웹어플리케이션 경로상 같은 디렉터리 경로에 있기 때문에 전송이 가능합니다.
<form>태그에 method 속성을 통해 GET, POST 등의 행동을 정해줄 수 있는데 특별히 명시해주지 않는 경우 GET방식을 사용하게 됩니다.
GET방식 요청의 경우 아래와 같이 URL 뒤에 ? 이 붙고 그 뒤로 파라미터명=파라미터값&파라미터명=파라미터값... 형식으로 데이터가 전송됩니다.
hobby라는 파라미터명은 두 개가 있는것을 볼 수 있는데 <input type="checkbox"> 태그들이 hobby라는 name값을 공통으로 사용하였고 두 개의 취미를 체크했기 때문입니다. 또한 파라미터값으로 %EC %9A 와 같이 %가 붙어 인코딩 된 것을 볼 수 있습니다.
이것은 RFC 2396이라는 URL 작성 규칙 때문인데 이 규칙은 URL에는 알파벳과 숫자 그리고 몇가지의 특수문자만을 사용할 수 있습니다.
때문에 한글의 경우 규칙에 따라 UTF-8로 인코딩 된 것입니다. 이러한 인코딩 방법을 URL Encoding 이라고 합니다.
참고 - [HTTP] URL Encoding
결과 출력 화면(paramTest.jsp)
[서블릿/JSP] JSP request 기본객체[2] http 요청 헤더 처리 방법
'Servlet&Jsp' 카테고리의 다른 글
[서블릿/JSP] 웹 환경에서 데이터 인코딩 규칙 및 톰캣 한글 처리 (0) | 2018.02.11 |
---|---|
[서블릿/JSP] JSP request 기본객체[2] http 요청 헤더 처리 방법 (0) | 2018.02.10 |
[서블릿/JSP] JSP 스크립트 요소 스크립트릿, 표현식, 선언문 (0) | 2018.02.07 |
[서블릿/JSP] JSP가 Servlet으로 변환되는 과정 및 규칙 (0) | 2018.02.07 |
[서블릿/JSP] page 디렉티브 사용법 및 속성 설명 (0) | 2018.02.06 |