각진 세상에 둥근 춤을 추자
[JSP] 내장 객체(Implicit Object) - request 본문
웹 프로그래밍에 있어 기본적인 요청과 응답, 화면 출력 등 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 |