본문 바로가기

Backend/JSP

JSP 내장 객체

JSP 내장 객체

  • 클라이언트에서 웹 서버에 JSP 페이지를 요청하면 자동으로 생성
  • 객체 생성하지 않고 바로 사용 가능

내장 객체 종류

  • 입출력 : request / response / out
  • 서블릿 : page /config
  • 컨텍스트 : session / application / pageContext
  • 예외 처리 : exception
용도 내장 객체 타입 (상속되는 클래스 또는 인터페이스)
입출력 관련 request javax.servlet.http.HttpServletRequest
클라이언트의 요청 정보 전달
response javax.servlet.http.HttpServletResponse
요청에 대한 처리 결과 응답
out javax.servlet.jsp.JspWriter
클라이언트에 출력 스트림으로 출력
서블릿 관련 page javax.servlet.jsp.JspWriter
현재 JSP 페이지에 대한 클래스 정보
config javax.servlet.ServletConfig
JSPL 페이지에 대한 서블릿 초기화 환경 처리
컨텍스트 관련 session javax.servlet.http.HttpSession
HTTP 세션 정보를 관리하는 객체
application javax.servlet.ServletContext
애플리케이션에 관한 환경 정보 지원
pageContext javax.servlet.jsp.PageContext
JSP 페이지에 대한 정보를 저장하고 있는 객체
예외처리 exception java.lang.Throwable
예외 처리

 

request 객체

  • 클라이언트(웹 브라우저)의 요청 정보를 전달하기 위한 객체
  • 주로 클라이언트에서 전송된 쿼리 문자열, 쿠키 정보, 다른 페이지에서 전송된 값에 대한 정보 등을 추출할 수 있는 메소드 제공

request 메소드

  • 클라이언트 요청 관련 메소드
  • 파라미터 관련 메소드
  • HTTP 헤더 관련 메소드

request 객체 예제 : request.jsp

<%@ 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>
		<%
			out.println("서버 : " + request.getServerName() + "<br>");
			out.println("포트 번호 : " + request.getServerPort() + "<br>");
			out.println("요청 방식 : " + request.getMethod() + "<br>");
			out.println("프로토콜 : " + request.getProtocol() + "<br>");
			out.println("URL : " + request.getRequestURL() + "<br>");
			out.println("URI : " + request.getRequestURI() + "<br>");
			out.println("ContextPath : " + request.getContextPath() + "<br>");
			out.println("ServletPath : " + request.getServletPath() + "<br>");
		%>
	</body>
</html>


request 객체 파라미터 관련 메소드

  • 가장 많이 사용되는 중요한 메소드
  • HTML 태그의 name 속성 값을 받음
메소드 설명
getParameter(String name) name에 해당하는 파라미터 값 반환
getParameterValues(String name) name에 해당하는 모든 값을 배열로 반환
getParameterNames() 모든 파라미터 이름 반환

 

request 객체 파라미터 관련 메소드 예제

requestForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>회원가입 폼</title>
		<style>			
			#id, #pwd { width: 100px;}
			table { margin:0 auto; width:600px; }
		</style>
			
	</head>
	<body>
		<div id="wrap">
	        <h3 align="center">회원 가입</h3>
	        <hr>
	        <form id="newMemberForm" name="newMemberForm" method="post" action="requestFormOk.jsp">
	          <table>
	          	<tr><td> 성명</td><td><input type="text" id="name" name="name"></td></tr>
	            <tr><td> ID</td><td><input type="text" id="id" name="id"></td></tr>
	            <tr><td>비밀번호</td><td><input type="password" id="pwd" name="pwd"></td></tr>
	            <tr><td>휴대폰 번호</td><td><input type="text" id="hp1" name="hp1" size="3"> 
	                    - <input type="text" id="hp2" name="hp2" size="4">
	                    - <input type="text" id="hp3" name="hp3" size="4"></td></tr>   
	            <tr><td>학년</td><td><input type="radio" id="year1" name="year" value="1" >1학년
	                                     <input type="radio" id="year2" name="year" value="2">2학년
	                                     <input type="radio" id="year3" name="year" value="3">3학년
	                                     <input type="radio" id="year4" name="year" value="4">4학년</td></tr>
	            <tr><td>관심분야</td>
	                  <td><input type="checkbox"  id="web" name="interest" value="웹 프로그래밍">웹 프로그래밍
	                         <input type="checkbox"  id="design" name="interest" value="파이썬">파이썬
	                         <input type="checkbox"  id="bigdata" name="interest" value="빅데이터">빅데이터
	                         <input type="checkbox"  id="java" name="interest" value="자바">자바 프로그래밍</td></tr>
	            <tr><td>학과</td>
	                  <td><select id="department" name="department">
	                               <option value="">선택하세요</option>
								   <option value="경영학과">경영학과</option>
								   <option value="산업공학과">산업공학과</option>
								   <option value="경제학과">경제학과</option>
								   <option value="전자공학과">전자공학과</option>
								   <option value="컴퓨터학과">컴퓨터학과</option>
	                          </select></td></tr>
	             <tr>
	                <td colspan="2" align="center">
	                    <br><input type="submit" value="완료">
	                    <input type="reset" value="취소">
	                </td>
	            </tr>             
	          </table>
      		</form>	
      	 </div>            
    </body>
</html>

 

requestFormOk.jsp

<%@ 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>
		<%!
			// 선언부에 변수 선언 (스크립트릿에 선언해도 됨 (메소드 제외))
			String name, id, pwd, hp, year, department;
			String[] interest; // 체크박스
		%>
		
		<%
			// 스크립트릿 영역
			// 폼에서 전송된 데이터 받아서 변수에 저장
			request.setCharacterEncoding("utf-8");
		
			name = request.getParameter("name");
			id = request.getParameter("id");
			pwd = request.getParameter("pwd");
			hp = request.getParameter("hp1") + "-" + request.getParameter("hp2") + "-" +request.getParameter("hp3");
			year = request.getParameter("year");
			interest = request.getParameterValues("interest");
			department = request.getParameter("department");
		%>
		
		<!-- 변수에 저장된 값 출력 -->
		이름 : <%= name %><br>
		아이디 : <%= id %><br>
		비밀번호 : <%= pwd %><br>
		핸드폰 번호 : <%= hp %><br>
		학년 : <%= year %>학년<br>
		
		<!-- 배열은 for문 사용해서 각 요소 반복하여 출력 -->
		관심분야 :
		<% 
			for(int i=0; i<interest.length; i++) {
		%>
			<%= interest[i] + " " %>
		<% } %>
		
		학과 : <%= department %><br>
	</body>
</html>

 

(+) 주의

데이터가 전송되지 않으면 String 변수는 오류 없이  null 값이 출력되지만

배열에서  index 참조할 때 NullPointer 오류 발생

response 객체

  • JSP 페이지에서 처리한 결과를 웹 브라우저에게 응답할 때 사용
  • 헤더 설정,  코드 상태, 쿠키 등의 정보 포함
  • 응답 컨텐츠 설정, 응답 헤더 설정, 상태 코드 설정 등과 관련된 메소드 제공
메소드 설명
addCookie(Cookie) 쿠키 지정
setContentType(type) 웹 브라우저의 요청 결과로 보일 페이지의 contentType을 설정
sendRedirect(url) 페이지 이동

 

[response 객체 예제]

response.jsp : 데이터 입력 폼

<%@ 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>
		<form method="post" action="responseOk.jsp">
			대한민국의 수도는?
			<input type="text" name="answer" size="10">
			<input type="submit" value="전송">
		</form>
	</body>
</html>

 

responseOk.jsp 주의 : 자바 문자열 비교는 ==이 아닌 equals 사용

데이터 전달 받아서 작업 수행 후 결과를 sendRedirect() 

맞으면 : pass.jsp로 sendRedirect() 

틀리면 : fail.jsp로 sendRedirect()

<%@ 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");
			String answer = request.getParameter("answer");
			
			// 받은 값이 '서울'이면 response.sendRedirect("pass.jsp")
			// 아니면 response.sendRedirect("fail.jsp")
			
			if(answer.equals("서울")) {
				response.sendRedirect("pass.jsp");
			} else {
				response.sendRedirect("fail.jsp");
			}
		%>
	</body>
</html>

 

pass.jsp

<%@ 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>
		정답입니다!
	</body>
</html>

 

fail.jsp

<%@ 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>
		오답입니다!
	</body>
</html>

out 객체

  • 웹 서버에서 웹 브라우저에게 출력 스트림으로 응답하기 위해 사용
  • out.println(“출력 문자열”);
  • 표현식(<%=  출력 문자열 %>)과 동일

(+) 주의 : 전송되는 데이터의 타입

  • 모두 문자열 : String answer = request.getParameter("answer");
  • 숫자 연산을 할 경우 숫자형으로 형변환 필요
  • 방법 1 : Integer.parseInt(문자열 변수)
  • 방법 2 : Integer.parseInt(answer)
  • 방법 3 : int a = Integer.parseInt(request.getParameter("answer"))

데이터 형변환 예제

typeConversion.jsp : 사각형의 가로 길이, 세로 길이 숫자 입력

<%@ 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>
		<form method="post" action="typeConversionOk.jsp">
			사각형의 가로 길이 : <input type="text" name="width"><br>
			사각형의 세로 길이 : <input type="text" name="height"><br>
			<input type="submit" value="전송">
		</form>
	</body>
</html>

 

typeConversionOk.jsp : 문자열로 전달 받은 데이터를 숫자형으로 형변환하고 사각형의 넓이 계산하여 출력

<%@ 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");
			int width = Integer.parseInt(request.getParameter("width"));
			int height = Integer.parseInt(request.getParameter("height"));
			
			int area = width*height;
		%>
		
		사각형의 넓이 : <%= area %>
	</body>
</html>