헬린코린이
[Servlet & JSP] JSP 내장객체 본문
내장객체란
JSP가 서블릿 형태로 자동 변환된 코드 내에 자동으로 포함되어 있는 멤버변수,
메서드 매개변수 등의 각종 참조 변수들을 말한다.
쉽게 말하면 JSP 내에서 선언하지 않고 사용할 수 있는 객체이다.
내장객체들은 특정 클래스에 대한 인스턴스 형태로서, 컨테이너를 통해서 초기화되고
다양한 기능과 정보들을 제공한다.
그렇다면 어떻게 선언하지 않고 사용할 수 있는 것인지 궁금할 것이다.
이유는 작성된 JSP 코드는 서블릿으로 변환된 후 모두 _jspService() 메서드
안으로 들어가기 때문에 메서드 매개변수인 request, response와 지역변수로 선언된
pageContext, application, page, config, out 등은 모두 내장객체가 된다.
해당 내장객체들은 _jspService 메서드 부분에서 사용자가 작성된 코드 위에
자동으로 선언되고 초기화되기 때문에 JSP 파일에서 프로그램을 작성할 때
내장객체를 별도의 선언 없이 사용할 수 있는 것이다.
내장 객체의 종류와 기능을 알아보겠다.
자주 사용하는 것 몇 개만 소개하겠습니다.
request
사용자 요청과 관련된 기능을 제공하는 내장객체로
주로 클라이언트에서 서버로 전달되는 정보를 처리하려고 사용한다.
가장 대표적인 유형은 HTML 폼을 통해 입력된 값을 JSP에서 가져올 때 사용하는 것입니다.
- getParameterName: 현재 요청에 포함된 매개변수의 이름을 열거 형태로 리턴합니다.
- getParameter: 문자열 name에 매칭된 value를 리턴합니다.
- getParameterValues: 문자열 name에 매칭된 value를 배열 형태로 가져온다.
- getCookies: 모든 쿠키 값을 배열 형태로 리턴합니다.
- getRemoteAddr: 클라이언트의 IP 주소를 리턴합니다.
- setCharacterEncoding: 현재 JSP로 전달되는 내용을 지정한 캐릭터 셋으로 변환해 준다.
HTML 폼에서 한글 입력을 정상적으로 처리하기 위해 필수
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>request 내장객체</title>
</head>
<body>
<form action="C_request_result.jsp" method="post">
<table border="1">
<tr>
<td>이름</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>선택언어</td>
<td><select name="lang">
<option selected>JAVA</option>
<option>C언어</option>
<option>파이썬</option>
</select></td>
</tr>
<tr>
<td>관심분야</td>
<td><input type="checkbox" name="fav" value="웹">웹
<input type="checkbox" name="fav" value="앱">앱
<input type="checkbox" name="fav" value="빅데이터">빅데이터</td>
</tr>
<tr>
<td colspan="2" align="right"><input type="submit" value="결과 확인하기"></td>
</tr>
</table>
</form>
</body>
</html>
간단한 예제이다
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%request.setCharacterEncoding("UTF-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border="1">
<tr>
<td>이름</td>
<td><%=request.getParameter("name") %></td>
</tr>
<tr>
<td>선택언어</td>
<td><%=request.getParameter("long") %>
</td>
</tr>
<tr>
<td>관심분야</td>
<td><%
String[] favs= request.getParameterValues("fav");
for(String v:favs){
out.println(v+" ");
}
%></td>
</tr>
</table>
</body>
</html>
response
사용자 요청을 처리하고 응답을 다른 페이지로 전달하는 기능을 제공합니다.
- sendRedirect: 클라이언트 요청을 다른 페이지로 보낸다.
out
out은 출력 스트림으로써, 사용자 웹 브라우저로 출력하기 위한 것입니다.
- flush: 버퍼를 지우고 output stream도 비운다.
- close: output stream을 닫고 버퍼를 비운다.
- println: System.out.println과 같은 느낌입니다.
- print: System.out.print과 같은 느낌입니다.
session
HTTP 프로토콜이 비연결형 프로토콜이라는 문제를 해결하기 위해 등장한 session
브라우저의 종류가 다르 나면, session도 다릅니다.
- getAttribute("name"): 문자열 name으로 설정된 세션 값을 Object 형태로 가져옵니다.
- setAttribute("name", name): 문자열 name으로 Object name을 저장
<%@page import="org.apache.catalina.ant.SessionsTask"%>
<%@ 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>
<%
if(session.isNew()){
out.println("<SCRIPT>alert('새로운 세션생성.');</SCRIPT>");
session.setAttribute("name", "홍길동");
}
%>
<%= session.getAttribute("name") %
</body>
</html>
application
웹 애플리케이션 전체를 관리하는 객체이다
브라우저가 종료되더라도, 서버가 동작중이라면 application도 종료됩니다.
- getAttribute(name) : 문자열 name에 해당하는 속성 값이 있다면 Object형태로 변환, 형변환 필요합니다.
- setAttribute("name", name): 문자열 name의 이름으로 Object형 데이터를 저장한다.
- removeAttribute("name"): 문자열 name에 해당하는 속성을 삭제합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>application 내장객체.</title>
</head>
<body>
<%
application.setAttribute("name", "홍길동");
application.setAttribute("count", 0);
%>
<a href="e_application_result.jsp">방문하기.</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>내 미니호미.</title>
</head>
<body>
<%= application.getAttribute("name") %>님의 미니홈피입니다. <br>
<%
if(application.getAttribute("count")==null){
application.setAttribute("count", 0);
}
int count=(Integer)application.getAttribute("count");
count++;
application.setAttribute("count", count);
%>
현재 방문자수: <%=count %>
</body>
</html>