[Java] JSP란


JSP(Java Server Pages)는 1999년 Sun Microsystems에서 개발한 언어로, 동적으로 HTML, XML 등의 페이지를 만들 때 사용됩니다. 비슷한 서버사이드 스크립트 언어로는 PHP, ASP가 있습니다.

jsp로 작성된 페이지는 서블릿으로 변환되어 실행됩니다. 따라서 라이프사이클도 서블릿과 동일합니다.

.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\프로젝트명\org\apache\jsp\페이지명.java

이클립스의 경우 서블릿으로 변환된 jsp 페이지의 경로를 보면 위와 같습니다. 자바파일 열어보면 jsp 페이지가 어떤 식으로 서블릿으로 변환되는지 감이 오실 겁니다.

 

JSP model 2 architecture from wikipedia

JSP 모델1과 모델2가 있는데 모델2가 MVC(model-view-controller) 패턴을 사용하는 버전입니다. 서블릿이 컨트롤러 역할을 하고, JSP 페이지는 뷰, 자바빈은 모델을 담당하는 구조입니다.

 

문법

tutorialspoint의 jsp syntax 게시물을 참고했습니다. (링크)

 

<% 자바코드 %>

스크립틀릿(Scriptlet)이라고 부르는 문법은 위와 같습니다. 자바코드를 삽입할 수 있습니다.

<html>
   <head><title>Hello World</title></head>
   
   <body>
      Hello World!<br/>
      <%
         out.println("Your IP address is " + request.getRemoteAddr());
      %>
   </body>
</html>

스크립틀릿의 예제입니다. 코드를 보면 out, request 객체를 사용하고 있는데, jsp 페이지가 서블릿으로 변환될 때 해당 서블릿에 미리 선언되어 있어 사용할 수 있는 객체들이 존재합니다. 이 객체들에 대해서는 아래 JSP Implicit Object 부분에서 설명하겠습니다

 

<%@ 지시자 attribute="value" %>

jsp 지시자는 스크립틀릿에 @가 붙은 형태입니다. 전체 서블릿의 구조에 영향을 미칩니다. page, include, taglib 세 종류의 지시자가 있습니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

jsp 페이지에 기본적으로 들어가는 페이지 지시자와 jstl core를 사용할 때 넣는 taglib 지시자를 작성한 예시입니다.

 

<%= 표현식 %>

표현식은 스크립틀릿에 = 등호를 붙인 형태입니다. out.print(표현식)의 형태로 출력된다고 생각하면 됩니다. 세미콜론을 사용하면 안됩니다.

<html> 
   <head><title>A Comment Test</title></head> 
   
   <body>
      <p>Today's date: <%= (new java.util.Date()).toLocaleString()%></p>
   </body> 
</html> 

오늘 날짜를 출력하는 jsp 표현식 예제입니다.

 

<%! 선언문; [ 선언문; ]+ ... %>

선언문은 변수와 메소드를 선언할 때 사용됩니다.

<%! int i = 0; %> 
<%! int a, b, c; %> 
<%! Circle a = new Circle(2.0); %> 

예제입니다. 스크립틀릿과 다른 점은 스크립틀릿에서 선언한 변수는 지역변수로 선언되지만, 선언문을 사용하면 전역으로 해당 jsp 페이지 어느 곳에서나 참조가 가능합니다.

 

JSP Implicit Objects

jsp가 서블릿으로 변환될 때 해당 서블릿에 미리 선언된 객체들이 있습니다. 내장객체라고도 하는데 이 객체들의 종류와 타입은 다음과 같습니다.

  • HttpServletRequest request
  • HttpServletResponse response
  • PrintWriter out
  • HttpSession session
  • ServletContext application
  • ServletConfig config
  • PageContext pageContext
  • page (=this)
  • Exception exception (<%@ page isErrorPage="true" %>인 경우만) 

 

스코프

JSP에서 페이지, 요청, 세션, 어플리케이션 단위 스코프가 존재합니다. 각 스코프와 해당 스코프를 나타내는 객체는 다음과 같습니다

  • page: pageContext
  • request: request
  • session: session
  • application: application
public void setAttribute(String name, Object value);
public Object getAttribute(String name);
public void removeAttribute(String name);
public Enumeration<String> getAttributeNames();

각 스코프 객체에 변수를 추가/삭제할 때 위 메소드를 사용할 수 있습니다. getAttributeNames() 메소드로는 해당 객체의 모든 attribute 이름을 가져올 수 있습니다.

Object 타입의 데이터를 attribute로 설정할 수 있기 때문에 기본 데이터형(int 등)은 wrapper 클래스(Integer 등)로 변환해줘야 합니다.

반응형