각진 세상에 둥근 춤을 추자

[JSP] 내장 객체(Implicit Object) - request 본문

JSP

[JSP] 내장 객체(Implicit Object) - request

circle.j 2022. 10. 5. 23:34

 

웹 프로그래밍에 있어 기본적인 요청과 응답, 화면 출력 등 JSP의 내장 객체는 필수라고 할 수 있다. 

 

 

웹은 클라이언트가 서버로 요청을 보내면, 서버는 그에 맞는 결과를 응답한다. 

이때 JSP의 내장 객체는 요청과 응답 혹은 HTTP 헤더(header)등의 정보를 쉽게 다룰 수 있도록 한다. 

 

내장 객체의 특징은 다음과 같다.

 

- 컨테이너가 미리 선언해 놓은 참조 변수를 이용한다.

- 별도의 객체 생성 없이 각 내장 객체의 메서드를 사용한다.

- JSP 문서 안의 <%스크립틀릿%>과 <%=표현식%>에서만 사용할 수 있다.

- <%! 선언부 %>에서는 즉시 사용할 수 없으나 매개변수로 전달받아 사용할 수 있다. 

 

대표적인 내장 객체의 종류는 다음과 같다.

 

내장 객체 타입 설명
request HttpServletRequest 클라이언트의 요청 정보를 저장한다.
(HTTP 요청 메시지 정보를 제공한다.
 주로 URL에 포함된 사용자 입력 값을 추출하기 위해 사용한다.)
response HttpServletResponse 클라이언트의 요청에 대한 응답 정보를 저장한다.
(HTTP 응답 메시지의 연결 정보를 제공한다. 
 결과 페이지의 전달이나 리다이렉션 등에 사용한다.)
out JspWriter JSP 페이지에 출력할 내용을 담는 출력 스트림이다.
(HTTP 응답 메시지 Body에 추가되어 브라우저로 전송될 결과 페이지 내용을 담고  있는 스트림이다.)
application ServletContext 웹 애플리케이션 관련 컨텍스트 정보를 저장한다.
(웹 서비스 실행 시간 동안 유지되어야 하는 정보를 저장한다.)
pageContext pageContext JSP 페이지에 대한 정보를 저장한다.
(인스턴스에 대한 참조 변수로, 다른 모든 내장 객체에 대한 프로그램적인 접근 방법   을 제공한다.
 HTTP 요청을 처리하는 제어권을 다른 페이지로 넘길 때 사용한다.)
session HttpSession 웹 브라우저 정보를 유지하기 위한 세션 정보를 저장한다. 
(세션 기간 동안 유지해야 하는 정보를 저장하는 데 사용한다.)

 


  1. request 객체   

 

request 객체는 JSP에서 가장 많이 사용되는 객체로, 클라이언트가 전송한 요청 정보를 담고 있는 객체이다.

 

주요 기능은 다음과 같다.

 

- 클라이언트와 서버에 대한 정보 읽기

- 클라이언트가 전송한 요청 매개 변수에 대한 정보 읽기

- 요청 헤더 및 쿠키 정보 읽기 

 

회원가입 폼을 통해 request객체를 이해해 본다.

 

 

(1) request.jsp (사용자 입력)

    다음 그림과 같이 클라이언트의 화면에 띄울 폼의 형태을 작성한다.

 

 

 

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>request</title>
	</head>
	<body>
		<h4>사용자 입력</h4>
		<form action="userProc" method="GET">
			<input type="text" name="uid" placeholder="아이디 입력"/><br/>
			<input type="text" name="name" placeholder="이름 입력"/><br/>
			<input type="text" name="age" placeholder="나이 입력"/><br/>
			<input type="submit" value="전송하기"/>
		</form>
	</body>
</html>

 

 

(2) userProc.jsp

      클라이언트가 폼의 입력란에 데이터를 입력한다. 

      입력한 데이터를 전송할 서버 클래스를 생성한다.

     생성한 클래스는 (1)의 <form action="#" method="GET">의 #부분에 생성한 클래스의 경로를 입력한다.

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%
	// 전송 데이터 수신
	String uid = request.getParameter("uid");
	String name = request.getParameter("name");
	String age = request.getParameter("age");
%>

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>userProc</title>
	</head>
	<body>
		<h4>클라이언트가 입력한 데이터</h4>
		<p>
			아이디= <%= uid %><br/>
			이름= <%= name %><br/>
			나이= <%= age %><br/>
		</p>
		
		<a href="request.jsp">뒤로가기</a>
	</body>
</html>

 

request 클래스의 입력폼에 데이터를 입력하면 userProc로 데이터가 전송되며 해당 데이터가 출력된다. 

 

request클래스에 추가로 회원가입 폼을 생성한다. 

 

 

(3) request.jsp (사용자 입력 + 회원가입)

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>request</title>
	</head>
	<body>
		<h4>사용자 입력</h4>
		<form action="userProc.jsp" method="GET">
			<input type="text" name="uid" placeholder="아이디 입력"/><br/>
			<input type="text" name="name" placeholder="이름 입력"/><br/>
			<input type="text" name="age" placeholder="나이 입력"/><br/>
			<input type="submit" value="전송하기"/>
		</form>
		
		<h4>회원가입</h4>
		<form action="#" method="post">
			<table border="1">
				<tr>
					<td>아이디</td>
					<td><input type="text" name="id" placeholder="아이디 입력"></td>
				</tr>
				<tr>
					<td>비밀번호</td>
					<td><input type="password" name="pw" placeholder="비밀번호 입력"></td>
				</tr>
				<tr>
					<td>이름</td>
					<td><input type="text" name="name" placeholder="이름 입력"></td>
				</tr>
				<tr>
					<td>생년월일</td>
					<td><input type="date" name="birth" placeholder="생년월일 입력"></td>
				</tr>
				<tr>
					<td>성별</td>
					<td>
						<label><input type="radio" name="gender" value="1">남</label>
						<label><input type="radio" name="gender" value="2">여</label>
					</td>
				</tr>
				<tr>
					<td>주소</td>
					<td>
						<select name="adder">
							<option>서울</option>
							<option>대전</option>
							<option>대구</option>
							<option>부산</option>
							<option>광주</option>
						</select>
					</td>
				</tr>
				<tr>
					<td>취미</td>
					<td>
						<label><input type="checkbox" name="hobby" value="등산">등산하기</label>
						<label><input type="checkbox" name="hobby" value="독서">독서하기</label>
						<label><input type="checkbox" name="hobby" value="여행">여행하기</label>
						<label><input type="checkbox" name="hobby" value="운동">운동하기</label>
						<label><input type="checkbox" name="hobby" value="게임">게임하기</label>
					</td>
				</tr>
				<tr>
					<td colspan="2" align="right">
						<input type="submit" value="회원가입">
					</td>
				</tr>
				
			</table>
		</form>
	</body>
</html>

 

(4) request.jsp (사용자 입력 + 회원가입+클라이언트 사용자 정보 확인)

추가로 사용자 정보를 확인할 수 있는 request 객체도 작성해 본다.

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>request</title>
	</head>
	<body>
		<h4>사용자 입력</h4>
		<form action="userProc.jsp" method="GET">
			<input type="text" name="uid" placeholder="아이디 입력"/><br/>
			<input type="text" name="name" placeholder="이름 입력"/><br/>
			<input type="text" name="age" placeholder="나이 입력"/><br/>
			<input type="submit" value="전송하기"/>
		</form>
		
		<h4>회원가입</h4>
		<form action="#" method="post">
			<table border="1">
				<tr>
					<td>아이디</td>
					<td><input type="text" name="id" placeholder="아이디 입력"></td>
				</tr>
				<tr>
					<td>비밀번호</td>
					<td><input type="password" name="pw" placeholder="비밀번호 입력"></td>
				</tr>
				<tr>
					<td>이름</td>
					<td><input type="text" name="name" placeholder="이름 입력"></td>
				</tr>
				<tr>
					<td>생년월일</td>
					<td><input type="date" name="birth" placeholder="생년월일 입력"></td>
				</tr>
				<tr>
					<td>성별</td>
					<td>
						<label><input type="radio" name="gender" value="1">남</label>
						<label><input type="radio" name="gender" value="2">여</label>
					</td>
				</tr>
				<tr>
					<td>주소</td>
					<td>
						<select name="adder">
							<option>서울</option>
							<option>대전</option>
							<option>대구</option>
							<option>부산</option>
							<option>광주</option>
						</select>
					</td>
				</tr>
				<tr>
					<td>취미</td>
					<td>
						<label><input type="checkbox" name="hobby" value="등산">등산하기</label>
						<label><input type="checkbox" name="hobby" value="독서">독서하기</label>
						<label><input type="checkbox" name="hobby" value="여행">여행하기</label>
						<label><input type="checkbox" name="hobby" value="운동">운동하기</label>
						<label><input type="checkbox" name="hobby" value="게임">게임하기</label>
					</td>
				</tr>
				<tr>
					<td colspan="2" align="right">
						<input type="submit" value="회원가입">
					</td>
				</tr>
				
			</table>
		</form>
		
		<h4>클라이언트 사용자 정보확인</h4>
		<p>
			헤더정보: <%= request.getHeader("User-Agent") %><br/>
			프로토콜: <%= request.getProtocol() %><br/>
			서버이름: <%= request.getServerName() %><br/>
			요청주소: <%= request.getRequestURL() %><br/>
			요청경로: <%= request.getRequestURI() %><br/>
			클라이언트 IP 주소: <%= request.getRemoteAddr() %><br/>
		</p>
		
	</body>
</html>

 

 

(5) registerProc.jsp

앞서 만든 회원가입 폼에서 입력한 데이터를 전송할 클래스를 생성한다.

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%
	// 전송 데이터 인코딩
	request.setCharacterEncoding("UTF-8");

	// 전송 데이터 수신
	String id = request.getParameter("id");
	String pw = request.getParameter("pw");
	String name = request.getParameter("name");
	String birth = request.getParameter("birth");
	String gender = request.getParameter("gender");
	String addr = request.getParameter("addr");
	String[] hobbies = request.getParameterValues("hobby");
%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>registerProc</title>
	</head>
	<body>
		<h3>회원가입 처리</h3>
		<p>
			아이디: <%= id %><br/>
			비밀번호: <%= pw %><br/>
			이름: <%= name %><br/>
			생년월일: <%= birth %><br/>
			성별: 
			<% 
			if(gender.equals("1")){
				out.println("남자");
			}else {
				out.println("여자");
			}
			%><br/>
			주소: <%= addr %><br/>
			취미: 
			<%
				for(String hobby:hobbies){
					out.println(hobby+" ");
				}
			%><br/>
		</p>
		
		<a href="request.jsp">뒤로가기</a>
		
	</body>
</html>

 

'JSP' 카테고리의 다른 글

[JSP] session 객체  (0) 2022.10.09
[JSP] response 객체  (0) 2022.10.06
[JSP] 지시어(Directive)  (0) 2022.10.05
[JSP] JSP 파일 기본 구조  (0) 2022.10.05
[JSP] Eclipse JSP File 템플릿 변경하기  (0) 2022.10.05