※ JSP 내장 객체 : JSP 페이지에서 프로그래머가 객체를 생성하는 과정 없이 바로 사용 할 수 있는 객체

 

JSP에서 내장 객체를 바로 사용할 수 있는 이유는 JSP가 서블릿 파일로 변환될 때 JSP(서블릿) 컨테이너가 객체를 자동으로 생성해 주기 때문이다.

 

예시로 간단한 메시지를 출력하는 Hello JSP를 출력하는 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>
<%
	out.print("Hello JSP");
%>
</body>
</html>

JSP 문서의 스크립트릿 내부에서 out 객체를 선언 없이 사용했다.

 

서블릿에서는 out 객체를 사용하기 위해서는 response 객체의 getWriter()를 호출하여 얻어온 후에 사용하였다.

PrintWriter out = response.getWeiter();

서블릿과 달리 JSP에서는 out객체를 선언하지 않고 바로 사용하였는데 이는 바로 out 객체가 JSP 내장 객체이기 때문이다. JSP 내장 객체가 서블릿 파일로 변환될때 JSP 컨테이너가 내장 객체를 자동으로 생성해 주는데, 내장 객체는 서블릿 파일에서 _jspService() 메소드 안에서 객체가 된다.

 

• JSP 내장 객체 정리표

  내장 객체의 분류   내장객체   _jsp.java파일
  입출력 관련 객체   request
  response
  out
  HttpServletRequest로 선언됨
  HttpServletRequest로 선언됨
  JspWriter로 선언됨
  서블릿 관련 객체   page
  config
  Object로 선언됨
  ServletConfig로 선언됨
  외부 환경 정보를 제공하는 객체   session
  application
  pageContext
  HttpSesstion으로 선언됨
  ServletContext로 선언됨
  PageContext로 선언됨
  예외 관련 객체   exception   JSP 페이지가 에러 페이지로 지정되면 만들어지고 파일에서는 발견되지 않음

 


※ out 내장 객체

 

out은 서버에서 클라이언트로 열려있는 출력 스트림을 의미한다. out 객체는 JSP의 실행결과를 클라이언트의 브라우저로 출력할 때 가장 효율적으로 사용할 수 있는 객체이다.

 

out은 출력을 전담하는 내장 객체로서, JSP 프로그램을 작성시 HTML 태그가 서블릿 파일로 변환된 후에는 out 객체의 출력 메소드를 통해서 브라우저에 출력된다.

 


※ request 내장 객체

 

웹 서비스를 위한 클라이언트와 웹 서버 사이의 요청과 관련된 정보는 request 객체에 저장되어 관리된다. 그러므로 request 객체를 파악하면 클라이언트에서 서버로 전송되는 데이터를 알 수 있다.

 

• request 관련 정보를 알려주는 메소드

 메소드   설명
  getContextPath()   JSP 페이지가 속한 웹 애플리케이션의 컨텍스트 패스를 구한다.
  getMethod()   요청 방식이 GET 방식인지 POST 방식인지 알려준다.
  getRequestURL()   요청 URL을 구한다.
  getRequestURI()   요청 URL에서 쿼리 스트링을 제외한 부분을 구한다.
  getQueryString()   요청 URL 다음에 오는 쿼리 스트링을 구한다.
  getSession(flag)   요청 관련된 세션 객체를 구한다.
  getRequestDispacher(path)   지정 로컬 URL에 대한 RequestDispacher 객체를 구한다.
  getRemoteHost()   요청한 호스트의 완전한 이름을 구한다.
  getRemoteAddr()   요청한 호스트의 네트워크 주소를 구한다.
  getRemoteUser()   요청한 사용자의 이름을 구한다.
  getSession()   세션 객체를 구한다.
  getServerName()   서버의 이름을 구한다.
  getProtocol()   사용 중인 프로토콜을 알려준다.

 

• 브라우저와 웹 서버의 정보를 알아내는 예제

<%@ 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.getContextPath() %> <br>
	요청방식 :		<%= request.getMethod() %> <br>
	요청한 URL :	<%= request.getRequestURL() %> <br>
	요청한 URI :	<%= request.getRequestURI() %> <br>
	서버의 이름 :	<%= request.getServerName() %> <br>
	프로토콜 :		<%= request.getProtocol() %> <br>
</body>
</html>

 

• request 객체의 요청 파라미터 관련 메소드

  메소드   설명
  getParameter(String name)   지정한 이름의 파라미터를 구한다. 지정한 이름의 파라미터가 여러 개 있을 경우에는 첫 번째 파라미터의 값을 구한다.
  getParameterNames()   모든 파라미터의 이름을 구한다.
  getParameterValues(String name)   지정한 이름의 파라미터가 여러 개 있을 경우 사용하며 지정한 이름을 가진 파라미터의 모든 값을 String[]으로 구한다.

 

• 파라미터 : 클라이언트가 폼에 데이터를 입력한 후 서버에 요청할 때 전송되는 폼에 입려된 정보형태.

 

서버에 있는 JSP에서는 request 객체로 값들을 얻어올 수 있는데 사용자가 입력한 값을 서버에서 얻기 위해서는 HTML에서 <form>태그 내 입력 양식의 name 속성 값을 메소드의 전달인자로 기술한다.

 

• 설문 조사 폼 양식 만들기 예제(02_researchForm.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>
	<h2>설문 조사</h2>
	<form action="02_research.jsp" method="post">
		<table>
			<tr>
				<td>이름 :</td>
				<td>
					<input type="text" name="name" size="20">
				</td>
			</tr>
			<tr>
				<td>성별 :</td>
				<td>
					<input type="radio" name="gender" value="male" checked="checked"> 남자 
					<input type="radio" name="gender" value="female"> 여자 
				</td>
			</tr>
			<tr>
				<td>좋아하는 계절:</td>
				<td>
					<input type="checkbox" name="season" value="1"> 봄 
					<input type="checkbox" name="season" value="2" checked="checked"> 여름 
					<input type="checkbox" name="season" value="3"> 가을 
					<input type="checkbox" name="season" value="4"> 겨울
				</td>
			</tr>
			<tr align="center">
				<td><input type="submit" value="전송"></td>
				<td><input type="reset" value="취소"></td>
			</tr>
		</table>
	</form>
</body>
</html>

 

• 설문 조사 내용을 읽어와 처리하는 예제(02_research.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>
<style type="text/css">
b {
	font-size: 16pt;
}
</style>
</head>
<body>
	<h2>설문 조사 결과</h2>
	<%
		request.setCharacterEncoding("UTF-8");
		
		String name = request.getParameter("name");
		out.println("이름 : <b>" + name +"</b><br>");
		
		String gender = request.getParameter("gender");
		out.println("성별 : ");
		if (gender.equals("male")) {
			out.println("<b>남자</b><br>");
		} else {
			out.println("<b>여자</b><br>");
		}
		
		String seasonArr[] = request.getParameterValues("season");
		out.println("당신이 좋아하는 계절은 ");
		for (String season : seasonArr) {
			int n = Integer.parseInt(season);
			switch (n) {
			case 1: out.println("<b> 봄 </b>");
			break;
			case 2: out.println("<b> 여름 </b>");
			break;
			case 3: out.println("<b> 가을 </b>");
			break;
			case 4: out.println("<b> 겨울 </b>");
			break;
			}
		} out.println("입니다.");
	%>
	
	<br>
	<b><a href='javascript:history.go(-1)'>다시</a></b>
</body>
</html>

 


※ response 내장 객체

 

클라이언트에 대한 응답 처리를 하는 객체인 response는 실행결과를 브라우저로 되돌려 줄 때 사용하는 내장 객체이다. JSP에서는 response 객체의 기능리다이렉트 기능을 많이 사용한다.

 

리다이렉트 : response 객체의 sendRedirect() 메소드를 사용하여 웹 서버가 브라우저에게 지정한 페이지로 이동하도록 지시한다.

 

예를들어, 사용자가 회원 전용 카페에 접속하려면 로그인에 성공해야하고, 만약 로그인에 실패했다면 로그인 실패 페이지로 이동해야한다. 즉 로그인 처리를 하기 위해서는 로그인 성공 실패에 따라 서로 다른 페이지로 이동해야 하기 때문에 리다이렉트 기능을 사용해야 한다.

 

• 클라이언트가 ID와 암호를 입력할 수 있는 화면을 제공하기 위한 페이지 예제(04_loginForm.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="04_testLogin.jsp">
		<label for="userid"> 아이디 : </label>
		<input type="text" name="id" id="userid"><br>
		
		<label for="userpwd"> 암 &nbsp; 호 : </label>
		<input type="password" name="pwd" id="userpwd"><br>
		
		<input type="submit" value="로그인">
	</form>
</body>
</html>

 

• 로그인 화면에서 제공한 정보를 가져와 회원 인증 절차를 거치는 페이지 예제(04_testLogin.jsp)

<%@ page import="java.net.URLEncoder" %>
<%@ 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>
<%
	String id = "benedicto";
	String pwd = "1234";
	String name = "베네딕토";
	request.setCharacterEncoding("UTF-8");
	
	if(id.equals(request.getParameter("id")) && pwd.equals(request.getParameter("pwd")))
	{
		response.sendRedirect("04_main.jsp?name=" + URLEncoder.encode(name, "UTF-8"));
	}
	else
	{
		response.sendRedirect("04_loginForm.jsp");
	}
%>
</body>
</html>

URLEncoder란 클래스를 사용하기 위해 java.net.URLEncoder를 import했다.

메인 페이지로 회원 이름을 쿼리 스트링으로 넘겨주어 메인 페이지에서 로그인한 회원의 이름이 출력되도록 하는데, 이때 개발자가 직접 한글을 쿼리 스트링으로 만들어 페이지로 전송할 경우 URLEncoder.encode() 메소드로 인코딩 과정을 거쳐야 한다.

 

• 로그인 인증을 받은 회원이 다양한 정보를 제공받을 수 있는 페이지 예제(04_main.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.getParameter("name") %>님 안녕하세요!
	<br>
	저희 홈페이지에 방문해 주셔서 감사합니다.<br>
	즐거운 시간 되세요....<br>
</body>
</html>

 

이 예제에서 아이디를 benedicto, 암호를 1234 라고 입력하면 메인 페이지가 나타난다.

사용자는 04_loginForm.jsp에서 곧바로 다양한 정보를 제공받을 수 있느 메인 페이지인 04_main.jsp 파일로 넘어가는 것처럼 보이지만, 04_main.jsp로 바로 넘어가지 않고 중간에 04_testLogin.jsp 파일을 거쳐서 회원인지를 검사한다.

사용자에게는 04_testLogin.jsp 파일이 보이지는 않고 회원이라는 것이 판명되면 04_testLogin.jsp 파일은 리다이렉트 기능을 사용하여 04_main.jsp 파일로 넘어가고 만약 아이디나 암호를 잘못 입력하였다면 다시 04_loginForm.jsp로 되돌아가게 한다.

 


※ application 내장 객체

 

하나의 웹 애플리케이션을 관리하고 웹 애플리케이션 안에서의 자원을 공유한다.

application 객체에 저장된 내용은 하나의 프로젝트 내의 모든 JSP 페이지에서 공통적으로 사용할 수 있게 된다.

 

application은 서블릿에서 변환된 모습을 보면 javax.servlet.ServletContext 인터페이스를 구현한 객체이다. application 내장 객체는 서버 기동시 웹 애플리케이션 당 하나만 생성되며 서블릿 컨테이너의 정보를 제공하는 일, 컨테이너에게 로그 처리를 요청하는 일 등을 구현할 수 있는 다양한 메소드를 지원한다.

 

• application 객체 관련 메소드

  메소드   설명
  getServerInfo()   컨테이너의 이름과 버전을 반환한다.
  getContextPath()   웹 애플리케이션의 URL 경로 중 커텍스트 패스명을 반환한다.
  getRealPath()   JSP의 실제 경로를 반환한다.
  getMimeType(filename)   지정된 파일의 MIME 타입을 반환한다.
  log(message)   지정된 message의 로그를 저장한다.

 

• application의 실제 경로 알아보기 예제

<%@ 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>

<%
	String appPath = application.getContextPath();
	String filePath = application.getRealPath("06_application.jsp");
	String serverInfo = application.getServerInfo();
%>

웹 애플리케이션의 컨텍스트 패스명<br>
<b><%=appPath%></b><hr>
웹 애플리케이션의 파일 경로명<br>
<b><%=filePath%></b><br>
컨테이너의 이름과 버전 번환<br>
<b><%=serverInfo%></b><br>

</body>
</html>

+ Recent posts