JSP | Request 내장 객체
Request 내장 객체
JSP 웹 프로그래밍 기본 구조
한 파일에서 모든 작업을 할 수 없기 때문에
요청을 하는 페이지와 요청을 처리해서 응답하는 페이지로 분리함
- 요청 페이지: 요청을 입력받는 페이지로 로그인이나 회원가입 페이지가 포함됨
html 또는 jsp 파일 - 응답 페이지: 해당 요청을 처리한 뒤 요청 페이지로 응답을 보내는 페이지, jsp 파일
- 이클립스에서 작업시, 파일 우클릭 → Open with → Web Page Editor
를 사용하면 작업 내용을 실시간으로 확인할 수 있음
request
웹 브라우저에서 JSP 페이지로 전달되는 정보의 모임
- HTTP 헤더와 HTTP 바디로 구성
- 웹 컨테이너가 요청된 HTTP 메세지를 통해 HttpServletRequest 객체를 얻어냄
- JSP 페이지에서는 HttpServletRequest 객체를 request 객체명으로 사용
request Method
사용자가 form에 입력한 요구 사항을 얻어낼 수 있도록하는 메소드 제공
| 메소드 | 설명 |
|---|---|
| String getParameter(name) | 파라미터 변수 name에 저장된 값을 얻어내는 메소드 해당 변수명이 없으면 null 리턴 단독값을 입력하는 text, select, radio 등에 사용 |
| String[] getParameterValues(name) | 파라미터 변수 name에 저장된 모든 값을 얻어내는 메소드 변수값은 String 배열로 리턴 다중값을 입력하는 checkbox 등에 사용 |
| Enumeration getPrameterNames() | 요청에 의해 넘어오는 모든 파라미터 변수를 java.util.Enumeration 타입으로 리턴 변수가 가진 객체들을 저장하기 위해 Enumeration 컬렉션 사용 |
< % request.setCharacterEncoding("utf-8"); % >
ServletRequest 클래스 메소드
- void setCharacterEncoding(String env)
- 해당 request에 사용된 인코딩 방식을 env 인코딩으로 재정의함
- request 객체를 얻어오기 전에 작성해야 함
requset Method
request 객체는 요청된 파라미터 값 외에도
웹 브라우저와 웹 서버의 정보도 가져올 수 있음
| 메소드 | 설명 |
|---|---|
| String getProtocol() | 웹 서버로 요청 시 사용 중인 프로토콜 리턴 |
| String getServerName() | 서버의 도메인 이름 리턴 |
| String getMethod() | 요청에 사용된 요청 방식(GET, POST 등) 리턴 |
| String getQueryString() | 요청에 사용된 QueryString 리턴 |
| String getRequestURL() | 요청에 사용된 URL 주소 리턴 |
| String getRequestURI() | 요청에 사용된 URL로부터 URI값 리턴 |
| String getRemoteHost() | 웹 서버로 정보를 요청한 웹 브라우저의 host 이름 리턴 |
| 메소드 | 설명 |
|---|---|
| String getRemoteAddr() : String | 웹 서버로 정보를 요청한 웹 브라우저의 ip 주소 리턴 |
| String getServerPort() | 웹 서버로 요청시 서버의 port 번호 리턴 |
| String getContextPath() : String | 해당 JSP페이지가 속한 웹 애플리케이션의 콘텍스트 경로 리턴 콘텍스트 경로는 웹 애플리케이션의 루트 경로 |
| String getHeader(name) | 웹 서버로 요청 시 HTTP 요청 header 이름인 name에 해당하는 속성값 리턴 |
| Enumeration getHeaderNames() | HTTP 요청 header에 있는 모든 헤더 이름 리턴 |
URL & URI
- URL(Uniform Resource Locator)
웹상에서 서비스를 제공하는 각 서버들이 응답 시 전송하는 파일들의 위치를 명시하기 위한 것
접속해야 할 서비스의 종류, 도메인명, 파일 위치 포함 - URI(Uniform Resource Identifier)
URL로부터 존재하는 자원을 식별하기 위한 일반적인 식별자를 규정하는 것
URL에서 HTTP 프로토콜, 호스트명, port 번호를 제외한 부분이 URI - ex) URL: http://127.0.0.1:8080/study/ch04/requestTest1.jsp
URI: study/ch04/requestTest1.jsp
예제 ①
html 파일에서 문자열과 숫자 데이터를 jsp파일로 넘겨 받아서
숫자만큼 문자열을 반복 출력하는 프로그램 작성
WebContent/control/input.html
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>요청 페이지2</title>
</head>
<body>
<!-- post 형식으로 while.jsp에 데이터 전달 -->
<form method="post" action="../sub/while.jsp">
반복할 문자열: <input type="text" name="msg" size="20"><br />
반복할 숫자: <input type="text" name="number" size="20" /> <br />
<input type="submit" value="보내기" />
</form>
</body>
</html>
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
WebContent/sub/while.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
28
29
30
31
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
// 한글이 깨지지 않도록 처리
request.setCharacterEncoding("utf-8");
%>
<%
// name 값이 msg인 매개변수 데이터를 가져옴
String msg = request.getParameter("msg");
// name 값이 number인 매개변수 데이터를 가져옴
int num = Integer.parseInt(request.getParameter("number"));
// number 만큼 반복 출력
int i = 0;
while (i < num) {
%>
<b><%=msg%></b><br/>
<%
i++;
}
%>
</body>
</html>
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
예제 ②
input.jsp 페이지에서 체크박스로 데이터를 전송하고
arrayPrint.jsp 페이지에서 데이터를 배열로 처리하는 예제
input.jsp
입력 form에 사용자가 값을 입력하는 페이지
|
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
28
29
|
<%@ 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의 데이터를 post 방식으로 arrayPrint.jsp로 전송 -->
<form action="arrayPrint.jsp" method="post">
이름: <input type="text" name="name" /> <br />
주소: <input type="text" name="addr" />
<fieldset>
<legend>좋아하는 동물</legend>
<!-- 배열로 값을 전달하기 위해서 name 속성의 값을 동일하게 지정 -->
<input type="checkbox" name="pet" value="dog" /> 강아지
<input type="checkbox" name="pet" value="cat" /> 고양이
<input type="checkbox" name="pet" value="cow" /> 송아지
<input type="checkbox" name="pet" value="horse" /> 망아지
</fieldset>
<input type="submit" value="전송"/>
</form>
</body>
</html>
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
arrayPrint.jsp
입력 form에 사용자가 값을 입력하는 페이지
|
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
28
29
30
31
32
33
34
35
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<%
request.setCharacterEncoding("utf-8");
%>
</head>
<body>
<%
String name = request.getParameter("name");
String addr = request.getParameter("addr");
// name 속성의 값이 pet인 value들을 반환해서 pet[]에 저장
String[] pet = request.getParameterValues("pet");
%>
<h3>이름: <%=name %></h3>
<h3>주소: <%=addr %></h3>
<h3>좋아하는 동물</h3>
<!-- pet[]이 빈 배열이 아닌 경우 출력-->
<%if(pet != null){ %>
<%for(int i=0; i<pet.length; i++){%>
<h4><%out.println((i+1)+". ");%><%=pet[i] %></h4>
<% }
// pet[]이 빈 배열인 경우 출력
} else { %>
<h3>좋아하는 동물이 없으시네요.</h3>
<% } %>
</body>
</html>
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
결과


예제 ③
request 내장 객체의 메소드를 사용해서 웹 브라우저와 웹 서버의 정보를 얻어오는 예제
|
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
28
29
30
31
32
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>
1. 서버 도메인 이름:
<%=request.getServerName()%></h2>
<h2>
2. 서버 포트 번호:
<%=request.getServerPort()%></h2>
<h2>
★★3. 요청 URL 주소:
<%=request.getRequestURL()%></h2>
<h2>
★★4. 요청 URI 주소:
<%=request.getRequestURI()%></h2>
<h2>
★★5. 접속 ip 주소:
<%=request.getRemoteAddr()%></h2>
<h2>
6. 클라이언트가 요청한 프로토콜:
<%=request.getProtocol()%></h2>
<h2>
★★7. 요청 방식(GET or POST):
<%=request.getMethod()%></h2>
</body>
</html>
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
결과

요청 페이지로부터 전송된 데이터를 응답 페이지에서 사용할 수 있도록 하는 Request 객체에 대해 알아보았습니다.
getParameter(name) 메소드는 정말 많이 사용된다고 하기 때문에 기억해 두면 좋을 것 같습니다.
또한 Request 객체를 이용하면 요청 페이지의 파라미터 값 외에 웹 브라우저나 웹 서버의 데이터도
얻어낼 수 있기 때문에 알아두면 나중에 필요하게 되었을 때 찾아서 사용할 수 있을 것입니다.
또한 한글 데이터를 처리해야 하는 경우에는 데이터를 처리하기 전에
반드시 request 객체의 인코딩을 utf-8로 지정해 주어야 하겠습니다.