JSTL(JSP 표준 태그 라이브러리) 튜토리얼: 핵심 및 사용자 정의 태그

이 JSTL 튜토리얼에서는 다양한 JSTL 태그를 사용하여 JSP 코딩을 더 쉽게 만드는 방법을 살펴보겠습니다.

JSTL이란 무엇입니까?

JSTL 용 스탠드 자바 서버 페이지 표준 태그 라이브러리이며 일반적인 웹 개발 기능을 제공하는 사용자 정의 JSP 태그 라이브러리 모음입니다. JSTL은 JSP의 표준 태그 라이브러리입니다.

JSTL의 장점

JSTL의 장점은 다음과 같습니다.

  1. 표준 태그: JSP 페이지의 이식 가능한 기능에 대한 풍부한 계층을 제공합니다. 개발자가 코드를 이해하는 것은 쉽습니다.
  2. 깔끔하고 깨끗한 코드: 스크립릿은 개발자를 혼란스럽게 하기 때문에 JSTL을 사용하면 코드가 깔끔하고 깔끔해집니다.
  3. 자동 JavabeansInterospection 지원: JSP 스크립틀릿에 비해 JSTL의 장점이 있습니다. JSTL 표현식 언어는 JavaBean 코드를 매우 쉽게 처리합니다. 범위가 지정된 속성으로 검색된 객체를 다운캐스트할 필요가 없습니다. JSP 스크립틀릿 코드를 사용하는 것은 복잡하며 JSTL은 그 목적을 단순화했습니다.
  4. 인간이 읽기 더 쉬움: JSTL은 다음을 기반으로 합니다. XML, 이는 HTML과 매우 유사합니다. 그래서 개발자가 이해하기 쉽습니다.
  5. 컴퓨터가 이해하기 더 쉬움: 다음과 같은 도구 Dreamweaver 및 첫 페이지는 점점 더 많은 HTML 코드를 생성하고 있습니다. HTML 도구는 HTML 코드 서식 지정 작업을 훌륭하게 수행합니다. HTML 코드는 스크립틀릿 코드와 혼합되어 있습니다. JSTL은 XML 호환 태그로 표현되므로 HTML 생성 시 문서 내의 JSTL 코드를 쉽게 구문 분석할 수 있습니다.

JSTL 코어 태그

핵심 태그는 JSP에서 가장 자주 사용되는 태그입니다. 그들은 다음에 대한 지원을 제공합니다.

  • 되풀이
  • 조건부 논리
  • 예외 잡기
  • URL 전달
  • 리디렉션 등

핵심 태그를 사용하려면 먼저 태그 라이브러리를 정의해야 하며, 아래는 태그 라이브러리를 포함하는 구문입니다.

구문 :

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

여기

  • 접두사는 모든 핵심 태그를 정의하는 데 사용될 수 있으며
  • uri는 가져온 taglib의 라이브러리입니다.

핵심 태그 중 일부를 자세히 살펴보겠습니다.

1. 아웃

  • 표현식 결과는 out 태그에 표시됩니다.
  • XML 태그를 직접 이스케이프할 수 있습니다. 따라서 실제 태그로 평가되지 않습니다.

구문 :

<c:out value="" default="" escapeXML="">
  • 여기서 값은 출력에 대한 정보를 나타내며 필수입니다.
  • 기본값은 정보 출력 실패이며 필수 사항은 아닙니다.
  • escapeXML – XML 문자를 이스케이프하는 경우 true입니다.

예:

Coretag_jsp1.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP1</title>
</head>
<body>

</body>
</html>

코드 설명:

코드 라인 3: 이 taglib 접두사는 모든 태그에 필요하며 추가된 접두사는 'c'입니다. 따라서 모든 코어 태그의 접두사로 사용할 수 있습니다.

코드 라인 12: 여기서는 접두사 “c”와 함께 coretag out을 사용하고 있으며 이 out은 표현식 태그의 값을 인쇄합니다. 따라서 출력은 이름이 됩니다.

위의 코드를 실행하면 다음과 같은 결과가 나옵니다.wing 출력 :

JSTL 코어 태그 - 종료

출력:

  • 출력 스트림에 인쇄될 핵심 태그 "out"에서 이름으로 값을 가져옵니다.

2. 캐치

  • 본문에서 발생하는 모든 예외를 포착하여 출력으로 표시합니다.
  • 오류를 처리하고 포착하는 데 사용됩니다.

구문 :

<c:catchvar="">

여기서 var는 발생 가능한 예외를 보유할 변수의 이름을 나타냅니다.

예:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP2</title>
</head>
<body>
<c:catch var="guruException">
   <% int num = 10/0; %>
</c:catch>
The Exception is : ${guruException} 
</body>
</html>

코드 설명:

코드 라인 3: 이 taglib 접두사는 모든 태그에 필요하며 추가된 접두사는 'c'이므로 모든 코어 태그의 접두사로 사용할 수 있습니다.

코드 라인 11-13: Coretag catch는 예외를 catch하고 예외를 인쇄하는 데 사용됩니다. 여기서는 10/0일 때 예외가 발생하고 해당 예외 이름은 "guruException"입니다.

코드 라인 14: 우리는 "guruException"을 인쇄하고 있습니다.

코드를 실행하면 다음과 같은 결과가 나타납니다.wing 출력 :

JSTL 핵심 태그 - 캐치

출력:

  • /by XNUMX으로 산술 예외가 발생하고 이는 "guruException" 변수를 사용하여 출력에 인쇄됩니다.

3. 수입

  • 앞에서 했던 것처럼 다른 파일 내용을 JSP 페이지로 가져올 수 있습니다. JSP 포함 작업.
  • 여기에 URL을 포함할 수도 있으며 해당 페이지에 내용이 표시됩니다.

구문 :

<c:importvar="" uri="">

여기서 var는 파일 이름/uri를 보유하는 식별자인 변수 이름입니다.

uri는 상대 파일 이름 또는 uriname입니다.

coretag_jsp31.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP 31</title>
</head>
<body>
<c:import var="displayfile" url="coretag_jsp32.jsp">
</c:import>
<c:out value="${displayfile}"/>
</body>
</html>

Coretag_jsp32.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<a>The file is diplayed after importing</a>
</body>
</html>

코드 설명:

Coretag_jsp31.jsp

코드 라인 3: 이 taglib 접두사는 모든 태그에 필요하며 추가된 접두사는 'c'이므로 모든 코어 태그의 접두사로 사용할 수 있습니다.

코드 라인 11-12: 여기서는 가져오기 태그를 사용하여 coretag_jsp32.jsp 파일을 이 파일로 가져옵니다.

코드 라인13: 여기서는 out 태그를 사용하여 coretag_jsp32.jsp 파일을 인쇄하고 있습니다.

위의 코드를 실행하면 다음과 같은 결과가 나옵니다.wing 출력.

JSTL 핵심 태그 - 가져오기

출력:

  • Coretag_jsp32는 이 파일을 coretag_jsp31.jsp로 가져왔으므로 출력에 인쇄됩니다.

4. 각

  • 일련의 명령문에서 요소 수를 반복하는 데 사용됩니다.
  • Java forloop와 동일합니다.

구문 :

<c:forEach var="" begin=""  end="">
  • 여기서 var는 카운터 이름을 보유할 변수 이름을 나타냅니다.
  • Begin은 카운터 시작 값을 나타냅니다.
  • End는 최종 값을 나타냅니다.

예:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP4</title>
</head>
<body>
<c:forEach var="gurucount" begin="5" end="10">
 <c:out value="${gurucount}"/>
</c:forEach>
</body>
</html>

코드 설명:

코드 라인 3: 이 taglib 접두사는 모든 태그에 필요하며 추가된 접두사는 'c'이므로 모든 코어 태그의 접두사로 사용할 수 있습니다.

코드 라인 11-13: 여기서는 변수 이름이 "gurucount"인 "forEach" 루프를 사용합니다. 이는 시작 카운트가 5이고 끝 카운트가 10입니다. 우리는 5에서 10까지 시작하는 숫자를 갖는 변수 gurucount를 인쇄합니다.

코드를 실행하면 다음과 같은 결과가 나타납니다.wing 출력

JSTL 핵심 태그 - forEach

출력:

  • 우리가 얻는 출력은 5에서 10까지입니다.

5. 만약

  • 사용됩니다 지원 조건.
  • 태그를 사용하여 이를 기반으로 조건이 참인지 아닌지 테스트하는 경우 코드 블록이 실행됩니다.

구문 :

<c:if test="${condition}></c:if>

여기서 조건이 true이면 일련의 명령문이 실행됩니다.

예:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP5</title>
</head>
<body>
<c:set var="count" value="100"/>
<c:if test="${count == 100}">
   <c:out value="The count is 100"/>
</c:if>
</body>
</html>

코드 설명:

코드 라인 3: 이 taglib 접두사는 모든 태그에 필요하며 추가된 접두사는 'c'이므로 모든 코어 태그의 접두사로 사용할 수 있습니다.

코드 라인 11: 여기서는 count라는 변수를 100으로 설정합니다.

코드 라인 12-14: 여기서는 카운트가 100인지 확인하는 "if 조건"을 사용하고 있습니다. 100과 같으면 "카운트가 100입니다."라는 출력을 얻습니다.

위의 코드를 실행하면 다음과 같은 결과가 나옵니다.wing 출력

JSTL 핵심 태그 - If

출력:

  • "if" 조건이 true이므로 "The count is 100"이 출력됩니다.

6. 리디렉션

  • 이 태그의 상대 URL을 제공하여 현재 페이지를 다른 URL로 리디렉션하는 데 사용됩니다.
  • 컨텍스트 상대 URL을 지원합니다.

구문 :

<c:redirect url="" context=""/>

여기서 url은 리디렉션되어야 하는 상대 URL과 로컬 웹 애플리케이션의 컨텍스트 이름입니다.

예:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP6</title>
</head>
<body>
<c:redirect url="/"/>
</body>
</html>

코드 설명:

코드 라인 3: 이 taglib 접두사는 모든 태그에 필요하며 추가된 접두사는 'c'이므로 모든 코어 태그의 접두사로 사용할 수 있습니다.

코드 라인 11: 여기에서는 URL 이름을 지정하는 "리디렉션 태그"를 사용하고 해당 페이지를 클릭하면 리디렉션을 위해 제공된 사이트로 리디렉션됩니다.

위의 코드를 실행하면 다음과 같은 결과가 나옵니다.wing 산출;

JSTL 핵심 태그 - 리디렉션

출력:

  • coretag_jsp99.jsp에 의해 리디렉션되는 출력 guru6.com URL을 얻습니다.

JSTL 사용자 정의 태그

  • 사용자 정의 JSP 언어 요소입니다.
  • JSP가 서블릿으로 변환되면 사용자 정의 태그는 객체에 대한 작업을 수행하는 클래스로 변환되고 태그 핸들러로 호출됩니다.
  • 서블릿이 실행될 때 해당 작업은 웹 컨테이너에 의해 호출됩니다.
  • 사용자 정의 사용자 정의 태그를 생성하려면 SimpleTagSupport를 확장할 태그 핸들러를 생성하고 doTag() 메서드를 재정의해야 합니다.
  • TLD의 클래스 파일을 매핑해야 하는 TLD를 생성해야 합니다.

JSP 사용자 정의 태그의 장점

JSP에서 사용자 정의 태그의 장점은 다음과 같습니다.

  • 휴대용 충전 케이스 – 태그 라이브러리에 설명된 작업은 모든 JSP 컨테이너에서 사용할 수 있어야 합니다.
  • 단순, 간단, 편리 – 일반 사용자도 이 메커니즘을 이해하고 사용할 수 있어야 합니다. JSP 기능 공급업체는 이를 사용자가 작업으로 쉽게 사용할 수 있도록 해야 합니다.
  • 표정이 풍부한 – 메커니즘은 중첩된 작업, 작업 본문 내부의 스크립팅 요소, 스크립팅 변수 생성, 사용 및 업데이트를 포함하여 광범위한 작업을 지원해야 합니다.
  • 다양한 스크립팅 언어에서 사용 가능 – JSP 사양은 현재 Java 프로그래밍 언어의 스크립트에 대한 의미만 정의하지만 다른 스크립트 언어의 가능성도 열어두고 싶습니다.
  • 기존 개념과 기계를 기반으로 구축– 우리는 다른 곳에 존재하는 것을 재발명하고 싶지 않습니다. 또한 우리는 미래의 갈등을 예측할 수 있을 때마다 피하고 싶습니다.

구문 :

testGuru 태그를 생성한다고 가정하고 doTag() 메서드를 재정의하는 taghandlertestTag 클래스를 사용할 수 있습니다.

<ex:testGuru/>
Class testTag extends SimpleTagSupport{ public void doTag()}

또한 JSP 컨테이너가 클래스 파일과 TLD 파일에 언급된 uri 간의 매핑을 자동으로 생성하므로 TLD(Tag Library Descriptor)에서 이 testTag 클래스를 매핑해야 합니다.

JSP 태그 인터페이스

  • 이 클래스는 SimpleTagSupport 클래스를 확장해야 합니다.
  • 이 클래스는 SimpleTagSupport 클래스의 일부인 doTag() 메서드를 재정의해야 합니다(재정의는 상위 클래스에서 상속되는 메서드입니다).
  • 이 인터페이스는 JSPTag 인터페이스의 하위 인터페이스입니다.
  • 태그의 시작과 끝에서 수행할 메소드를 제공합니다.
  • 또한 이 클래스를 TLD, 즉 태그 라이브러리 설명자에 매핑해야 합니다.

우리는 아래 예에서 고려하고 있습니다

태그 인터페이스 방식

  • doTag()는 태그에 대한 내용을 갖도록 재정의해야 하는 메서드입니다.
  • getJSPContext()를 사용하여 현재 JSP 컨텍스트를 사용합니다.

예:

Customtag_jsp1.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Custom Tag</title>
</head>
<body>
<ex:guruTag/>
</body>
</html>

Custom.tld

<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>2.0</jsp-version>
  <short-name>Test TLD</short-name>
  <tag>
    <name>guruTag</name>
    <tag-class>demotest.guruTag</tag-class>
    <body-content>empty</body-content>
  </tag>
</taglib>

guruTag.java(태그 핸들러)

package demotest;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;

public class guruTag extends SimpleTagSupport{
	public void doTag() throws JspException,IOException
	{
		JspWriter out = getJspContext().getOut();
		out.println("Guru Tag");
	}

}

코드 설명:

guruTag.java(태그 핸들러)

코드 라인 6:guruTag 클래스는 javax.servlet.JSP jar에 있는 SimpleTagSupport 클래스를 확장합니다.

코드 라인 7: 여기서는 JspException 및 IOException을 발생시키는 doTag() 메서드를 재정의합니다.

코드 라인 9-10: 이 방법에서는 코드가 호출될 사용자 정의 태그에 삽입됩니다. 우리는 JspWriter의 객체를 취하고 있으며, 이는 "Guru Tag"를 인쇄할 것입니다.

Custom.tld

코드 라인 6: 여기서 사용자 정의 태그의 이름은 "guruTag"입니다.

코드 라인 7:태그 클래스는 taghandlerclass, 즉 guruTag.java입니다. 파일 위치의 디렉터리 경로를 포함하는 처리기 파일의 전체 경로를 사용합니다.

Customtag_jsp1.jsp

코드 라인 3:이 taglib 접두사는 모든 태그에 필요하며 추가된 접두사는 'ex'이므로 모든 코어 태그의 접두사로 사용할 수 있으며 uri는 태그 핸들러를 매핑하는 custom.tld입니다.

코드 라인 11: 여기서는 핸들러 클래스 doTag() 메소드를 호출하고 그 안에 있는 코드가 실행되는 사용자 정의 태그 "guruTag"를 정의합니다.

위의 코드를 실행하면 다음과 같은 결과가 나옵니다.wing 출력

JSP 태그 인터페이스

출력:

  • guruTag.java, 즉 TagHandler에서 "GuruTag"로 출력을 얻습니다. 이는 doTag() 메서드를 재정의하고 "Guru Tag"를 출력으로 인쇄합니다.

요약

  • 이번 섹션에서는 핵심 태그와 사용자 정의 태그를 수행한 JSP 표준 태그 라이브러리에 대해 배웠습니다.
  • 핵심 태그에는 기본 목적으로 사용되는 태그인 for, if, redirect, import, catch 태그가 포함됩니다. JSP.
  • 또한 태그를 정의하고 JSP에서 사용할 수 있는 사용자 정의 태그를 만들었습니다.