헬린코린이

[Servlet & JSP] JSP 내장객체 본문

Programming/Servlet & JSP

[Servlet & JSP] JSP 내장객체

HCD 2022. 12. 30. 20:58

내장객체란

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>
Comments