본문 바로가기

Language/Java

[JSP] 기본 문법 / 내장 객체 / 태그

템플릿 데이터, JSP 전용 태그, 내장 객체
  • 템플릿 데이터 : 클라이언트로 출력되는 콘텐츠
    Ex) HTML, Javascript, stylesheet, JSON, XML, 일반 텍스트
  • JSP 전용 태그 : 서블릿 생성 시 특정 자바 코드로 바뀌는 태그
    • Directives : <%@ %>
    • Scriptlet Elements : <% %>
    • Declartions : <%! %>
    • Expressions : <%= %>
    • JSP Action : <jsp:...>
  • JSP 내장 객체 : JSP 기술 사양서에 정의된 필수적인 9개 객체, 별도 선언 없이 사용 가능
    Ex) request, response, pageContext, session, application, config, out, page, exception

템플릿 데이터

  • 클라이언트로 출력되는 콘텐츠
  • 서블릿 코드를 생성할 때 출력문(톰캣의 경우 out.println)으로 변경
  • jsp로부터 생성된 자바 서블릿 파일의 소스


 

JSP 전용 태그
Directives(지시자)
  • JSP 지시자는 지시자, 속성에 따라 자바 코드를 생성
  • JSP 지시자에는 page, taglib, include가 존재
<%@ 지시자 속성="값" 속성="값" ... %>

page

  • JSP 페이지와 관련된 속성을 정의할 때 사용하는 태그
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
속성 설명
language - 스크립틀릿, 표현식, 선언부를 작성할때 사용할 프로그래밍 언어를 지정
- 즉, JSP 페이지에 삽입되는 코드의 스크립팅 언어를 지정
- JSP 2.2에서는 'java'만 허용 (모두 소문자로 작성)
- language 속성을 생략하면 기본값은 'java'
contentType - 출력할 데이터의 MIME 타입과 문자 집합을 지정
- MIME 타입이 'text/html'이면 출력할 데이터가 HTML이라는 의미
- 문자 집합이 'charset=UTF-8'이면 출력할 데이터를 UTF-8로 인코딩
- 문자 집합을 생략하면 기본값 'ISO-8859-1'을 사용
- 자바는 문자열을 다룰때 유니코드(UTF-16 BE)를 사용하는데 클라이언트로 문자열을 출력할때 유니코드를 contentType 혹은 pageEncoding에 설정된 문자 집합으로 인코딩하여 출력
pageEncoding - 출력할 데이터의 문자 집합을 지정 (기본값 : ISO-8859-1)
- contentType 설정값보다 우선시
- 이 속성을 생략하면 contentType에 설정된 값을 사용
  • page 지시자의 자바 코드
    • contentType과 pageEncoding 속성에 지정된 값으로 setContentType() 호출 코드 생성
    • language 속성은 JSP 엔진에 정보를 제공하는 역할이며 따로 코드를 생성하진 않음


taglib

  • 태그 라이브러리를 선언 할 때 사용
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
속성 설명
uri 사용할 태그 라이브러리 네임스페이스 식별자(URI)
prefix 태그 접두사

 

  • JSTL Core
    • JSP 표준 태그 라이브러리의 핵심 기능 제공
    • 조건문, 반복문, URL 조작 등 일반적인 로직 처리를 쉽게 할 수 있게 해줌
기능 사용 예
URI http://java.sun.com/jsp/jstl/core
조건문 <c:if>
다중 조건문 <c:choose>
반복문 <c:forEach>
변수 설정 <c:set>
출력 <c:out>

 

  • JSTL Fomatting
    • 날짜, 시간, 숫자 등의 형식과 지역화 기능을 제공
기능 사용 예
URI http://java.sun.com/jsp/jstl/fmt
숫자 형식 지정 <fmt:formatNumber>
날짜 형식 지정 <fmt:formatDate>
다국어 번들 사용 <fmt:bundle>
메세지 출력 <fmt:message>

 

  • JSTL SQL
    • SQL 관련 작업을 JSP에서 수행할 수 있도록 도움
    • DB Query 실행 또는 결과 처리하는 데 사용
       보안 문제로 인해 실무에서 권장되지 않으며 주로 학습 목적

 

  • JSTL XML
    • XML 데이터 처리 및 XPath를 활용한 데이터 접근을 지원
    • XML 데이터를 파싱하고 원하는 데이터를 쉽게 추출 가능
기능 사용 예
URI http://java.sun.com/jsp/jstl/xml
XML 데이터 파싱 <x:parse>
XML 데이터 출력 <x:out>
XML 데이터 반복 처리 <x:forEach>

 

  • Custom Tag Library
    • URI : 사용자 정의
      Ex) http://example.com/custom
    • 개발자가 특정 기능을 재사용하기 위해 만든 태그 라이브러리
    • taglib URI는 보통 WEB-INF/tld 디렉토리에 위치한 TLD 파일에 정의

include

  • 특정 JSP 파일 또는 HTML 파일을 다른 JSP 파일에 컴파일 시점에 포함시키는 기능을 제공
  • 정적인 내용을 포함시키는 데 적합하며, 페이지가 컴파일될 때 포함된 파일의 내용이 현재 JSP에 통합
<%@ include file="filePath" %>
  • file : 포함할 파일의 경로 지정
    • 상대 경로나 절대 경로를 사용 가능
    • 파일의 확장자는 .jsp, .html, .txt 등이 될 수 있음
<!-- header.jsp -->
<!DOCTYPE html>
<html>
<head>
    <title>My Website</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <header>
        <h1>Welcome to My Website</h1>
    </header>

<!-- footer.jsp -->
    <footer>
        <p>&copy; 2024 My Website</p>
    </footer>
</body>
</html>

<!-- main.jsp -->
<%@ include file="header.jsp" %>

<section>
    <h2>About Us</h2>
    <p>This is the main content of the page.</p>
</section>

<%@ include file="footer.jsp" %>

 

 


Scriptlet Elements(스크립트릿)
  • JSP에 자바 코드를 작성할 때 스크립트릿 태그 <% %> 안에 작성
  • 스크립트릿 태그 안에 작성한 코드는 서블릿 파일을 만들 때 그대로 복사
    → JSP에서 생성된 자바 서블릿 소스에서 _jspService() 안에 그대로 복사
<% 자바 코드 %>
  • JSP 스크립트 코드 예시

  • 생성된 Java 코드


Declarations (선언문)
  • 서블릿 클래스의 멤버(변수, 메소드)를 선언할 때 사용
  • JSP에서 작성 위치는 상관 없음
    → 선언문은 _jspService() 메소드 안에 복사되는 것이 아니라 _jspService() 밖의 클래스 블록 안에 복사되기 때문
<%! %>
  • JSP 선언문 예시

  • 자바 서블릿 코드의 출력문으로 변환된 선언문의 예


Expressions(표현식)
  • 문자열을 출력할 때 사용
  • 따라서 표현식 <%= %> 안에는 결과를 반환하는 자바 코드가 와야 함
  • 표현식은 출력문으로 만들어지며 스크립트릿과 같이 _jspService() 안에 순서대로 복사
<%= %>
  • JSP 표현식의 예

  • 자바 서블릿 코드의 출력문으로 변환된 표현식의 예
    • JSP 표현식 안의 자바 코드가 out.print() 출력문의 인자값으로 복사
    • 따라서 JSP 표현식 안에는 out.println()의 안자값으로 넣을 수 있는 결과를 반환하는 자바 코드가 와야 함


JSP Action
  • JSP에서 기본으로 제공하는 태그들의 집합
  • JSP 2.2에서 제공하는 Standard Action들
액션 설명
<jsp:useBean> - 자바 인스턴스를 준비
- 보관소에서 자바 인스턴스를
 꺼내거나 자바 인스턴스를 새로 만들어 보관소에 저장하는 코드를 생성
- 자바 인스턴스를 자바 빈(Java Bean)이라고 부름
<jsp:setProperty> - 자바 빈의 프로퍼티 값을 설정
- 자바 객체의 setter()를 호출하는 코드를 생성
<jsp:getProperty> - 자바 빈의 프로퍼티 값을 꺼냄
- 자바 객체의 getter()를 호출하는 코두를 생성
<jsp:include> - 정적(HTML, 텍스트 파일 등) 또는 동적(서블릿/JSP) 자원을 including하는 자바 코드를 생성
<jsp:forward> - 현재 페이지의 실행을 멈추고 다른 정적, 동적 자원으로 forwarding하는 자바 코드를 생성
<jsp:param> - jsp:include, jsp:forard, jsp:params의 자식 태그로 사용
- ServletRequest 객체에 매개변수를 추가하는 코드를 생성
<jsp:plugin> - OBJECT 또는 EMBED HTML 태그를 생성
<jsp:element> - 임의의 XML 태그나 HTML 태그를 생성

JSP 내장 객체
  • JSP에서 자바 코드를 작성 할 때 별도의 선언 없이 사용할 수 있는 자바 객체
    Ex) JSP에서 선언 없이 사용할 수 있는 request 객체가 이에 해당
  • JSP로부터 생성된 자바 서블릿 소스의 _jspService()를 보면 해당 객체들의 변수가 선언되어 있는 것을 확인 가능
  • _jspService()는 javax.servlet.jsp.HttpJspPage 인터페이스에 선언된 메소드
  • JSP 기술 사양서에는 JSP로 서블릿을 만들 때 반드시 이 인터페이스를 구현하도록 정의
  • JSP 작성 시 선언 없이 즉시 사용할 수 있는 9개 객체 request, response, pageContext, session, application, config, out, page, exception 를 정의 (exception은 JSP가 예외 처리 페이지로 선언된 경우에만 존재)
  • JSP 페이지 내장 객체 사용

  • 자바 서블릿 소스에 선언된 내장 객체


Directives의 include와 JSP 액션 태그의 include 차이
특성 include directive ( <%@ include %> ) jsp:include ( <jsp:include />
타입 정적 포함 (컴파일 시 포함) 동적 포함 (실행 시 포함)
파일 변경 반영 서버를 재시작 해야 반영 즉시 반영
사용 예 헤더, 푸터, CSS 등 정적인 파일 동적으로 생성된 콘텐츠

 

참고 자료

https://atoz-develop.tistory.com/entry/JSP-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-%EC%B4%9D-%EC%A0%95%EB%A6%AC-%ED%85%9C%ED%94%8C%EB%A6%BF-%EB%8D%B0%EC%9D%B4%ED%84%B0-JSP-%EC%A0%84%EC%9A%A9-%ED%83%9C%EA%B7%B8-%EB%82%B4%EC%9E%A5-%EA%B0%9D%EC%B2%B4

 

JSP 기본 문법 총 정리 - 템플릿 데이터, JSP 전용 태그, 내장 객체

JSP 기본 문법 총 정리 - 템플릿 데이터, JSP 전용 태그, 내장 객체 JSP 구성 요소는 크게 템플릿 데이터와 JSP 전용 태그, JSP 내장 객체 세 가지로 나눌 수 있다. 템플릿 데이터 클라이언트로 출력되

atoz-develop.tistory.com