JSP란?

Java Server Pages의 약자로, HTML 내에 JAVA code를 삽입하여 web-server에서 동적으로 web-page를 생성하여 web-browser에 돌려 주는 server side script 언어이다. Java EE 스펙 중 일부로 web application server에서 동작한다. // 출처: 위키백과

즉, HTML code에 java를 넣어 동적인 web page를 생성하는 web application tool이다.

 

JSP의 동작 원리

Client에서 service가 요청되면 JSP의 실행을 요구하고, JSP는 web application server의 servlet container에서 Java servlet(.java)로 변환된다. 그 후에 Java servlet은 바로 compile된 후 실행되어 결과를 HTML 형태로 client에 돌려 준다.

 

 

JSP의 개요

JSP는 응답(response)을 만들기 위해 요청(request)을 어떻게 처리할지를 기술하는 text 기반의 문서이다.

 

HTML page에서 server에 저장된 data를 다룰 방법이 없다. data에 접근할 수 없기 때문이다. 이를 위해서 그 작업을 실행할 수 있는 다른 page에게 원하는 작업을 요청해야 하고 요청 받은 page는 server data에 접근하여 요청에 맞는 처리를 수행한 후에 결과를 HTML에 넘겨 주게 된다. 이를 보다 간소화하기 위해서 만든 page이다.

 

항상 변하는 정보를 담는 page로, 동적 web-page라고 표현한다. 변화하는 여러 정보를 저장하고 처리하고 표시하기 위해 개발된 언어가 CGI, ASP, PHP, JSP 등이 있다.

 

JSP의 특징

  • Tomcat(WAS)이 미리 만든 객체(Predefined Values)를 사용한다.
    • Predefined Values(implicit Object): WAS가 제공하는 객체를 의미한다.
    • 예로 request, response, session, out 등
  • 사용자 정의 태그를 사용하여 효율적인 web site 구성이 가능하다(JSTL 사용).
  • HTML 작성이 용이하다.
  • Servlet과 달리 JSP는 수정 후 재배포를 Tomcat(WAS)이 처리한다.

 

JSP의 구성 요소

크게 3가지로 분류할 수 있다.

분류 개념 예시
Template Data Client로 출력되는 Contents HTML, Javascript, Style sheet, Json......
JSP 전용 Tag Servlet 생성 시 특정 java code로 바뀌는 tag Directives(<%@ %>)
Scriptlet Elements(<% %>)
Declarations(<%! %>)
Expressions(<%= %>)
JSP Action(<jsp:...>)
JSP 내장 객체 JSP 기술 사양서에 정의된 필수적인 9개 객체 request, response, pageContext, session, application, config, out, page, exception.
JSP에서 별도 선언 없이 사용 가능

 

JSP 전용 tag

Directives(지시자)

JSP 지시자는 지시자, 속성에 따라 Java code를 생성한다. page, taglib, include가 있다.

<%@ 지시자 속성="값" 속성="값" ...%>

//page 예시
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>

//taglib 예시
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

//include 예시
<% include file="header.jsp" %>

 

Page 지시자의 속성

속성 설명
language JSP page에 삽입되는 code의 scription 언어 지정.
JSP 2.2에서는 'java'만 허용.
해당 속성을 생략하면 'java'가 기본 값.
contentType  출력 data의 MIME type과 문자 집합을 지정.
text/html이면 출력 data가 HTML이라는 의미.
문자 집합이 charset=UTF-8이면 출력 data를 UTF-8로 encoding.
해당 속성을 생략하면 'ISO-8859-1'이 기본 값.
java 문자열을 해당 속성으로 encoding함.
pageEncoding 출력 data의 문자 집합을 지정.
'ISO-8859-1'이 기본 값이며, contentType보다 우선 적용.
해당 속성을 생략하면 contentType 설정 값 적용.

 

taglib 지시자의 속성

속성 설명
uri 사용할 tag Library namespace 식별자(URI)
prefix tag 접두사

 

Scriptlet Elements(스크립틀릿)

JSP에 java code를 넣기 위한 tag. 해당 tag 안에 작성된 code는 servlet file을 만들 때 그대로 복사된다.

<% java code %> // 예시

<% if(i>0){ %> // java code
	<p> num>0 </p> // html code
<% }else{%> // java code
	<p> num<= 0</p> // html code
<% } %> // java code

 

Declarations(선언문)

servlet class의 member(변수, method)를 선언할 때 이용.

<%! java code 선언문 %> // 예시

<%! private String sum(int a, int b){
    int a = 10;
    int b = 50;
    
    ab = a + b;
    
    return ab;
%>

 

 

Expressions(표현식)

문자열을 출력할 때 사용하며, 결과를 반환하는 java code가 와야 함.

<%= java code %> // 예시

<option value="+"> <%= selected[0] %> </option>
<option value="-"> <%= selected[1] %> </option>

 

 

JSP Action tag & JSP EL(Expression Language)

JSP Action tag

JSP에서 기본 제공하는 tag들의 집합을 의미한다.

Action 설명
<jsp:userBean> Java instance 준비. 보관소에서 Java instance를 꺼내거나 Java instance를 새로 만들어 보관소에 저장하는 code 생성. = Java Bean
<jsp:setProperty> Java Bean의 property 값 설정.
java 객체의 setter()를 호출하는 code 생성.
<jsp:getProperty> Java Bean의 property 값 호출.
java 객체의 getter()를 호출하는 code 생성.
<jsp:include> 정적(HTML, text file 등) 또는 동적(Servlet/JSP) 자원을 including하는 java code 생성.
<jsp:forward> 현재 page의 실행을 멈추고 다른 정적, 동적 자원으로 forwarding하는 java code 생성.
<jsp:param> jsp:include, jsp:forard, jsp:params의 자식 tag로 사용.
ServletRequest 객체에 매개 변수를 추가하는 java code 생성.
<jsp:plugin> OBJECT 또는 EMBED HTML tag 생성.
<jsp:element> 임의의 XML 태그나 HTML tag 생성

 

JSP EL

<jsp:useBean id="customer" type="beans.Customer" scope="request">
</jsp:useBean>

<ul>
	<li>Name: <jsp:getProperty name="customer" property="name" /></li>
    <li>Email: <jsp:getProperty name="customer" property="email" /></li>
</ul>

// JSP Action

<ul>
	<li>Name: ${customer.name}</li>
    <li>Email: ${customer.Email}</li>
</ul>

// JSP EL

JSP 2.0부터 지원하는 JSP EL을 사용하면 Java Beans 구성 요소에 저장된 Application data에 쉽게 접근할 수 있다.

  • 객체 접근: ${objectName}
  • Property에 접근: ${ObjectName.property}

 

 

JSP Implicit Objects(내장 객체)

request, response, pageContext, session, application, config, out, page, exception

 

JSP 기술 사양서에는 JSP로 servlet을 만들 때 반드시 javax.servlet.jsp.HttpJspPage interface를 구현하도록 정의하고 있다. 또한 JSP 작성 시 선언 없이 즉시 사용할 수 있는 9개 객체 request, response, pageContext, session, application, config, out, page, exception 를 정의하고 있다. (exception은 JSP가 예외 처리 page로 선언된 경우에만 존재)

 

Scriptlet <% %>과 표현식 <%= %>에 작성한 java code는 복사될 때 JSP 내장 객체를 선언한 문장 뒤에 복사된다.

이런 이유로 별도 선언 없이 JSP 내장 객체를 사용할 수 있는 것이다.

 

 

JSP Scriptlet과 JSTL(JSP Standard Tag Library)

많은 JSP Application의 공통적인 핵심 기능을 capsule화하는 유용한 JSP tag의 모음이다.

JSP 표준 tag library의 약자이며, 가장 많이 사용하는 tag 확장 Library이다.

자신만의 Custom tag를 추가할 수 있는 기능을 제공한다.

JSP Scriptlet 대신에 tag를 사용하여 programming할 수 있도록 하기 위해 도입되었다.

 

 

[JSTL] JSP standard tag library란?

JSTL (JSP standard tag library) JSP의 taglib으로 custom하여 사용하는 편리한 외부 공식 Library. JSTL Homepage에서 해당 Library를 설치하고 추가해 준 뒤 <%@ taglib prefix="c" uri="http://java.sun.co..

seheec.tistory.com

'Web > JSP' 카테고리의 다른 글

[JSTL] JSP standard tag library란? 설치, 사용 방법, 문법 정리  (0) 2022.03.23
복사했습니다!