JSTL(JSP 표준 태그 라이브러리)

⚡ 스마트 요약

JSP 표준 태그 라이브러리(JSTL)는 반복, 조건 논리, 예외 처리, 가져오기 및 리디렉션과 같은 일반적인 웹 개발 기능을 제공하는 사용자 지정 JSP 태그 라이브러리 모음으로, JSP 코드를 스크립틀릿보다 더 깔끔하고 이식성이 뛰어나며 읽기 쉽게 만들어 줍니다.

  • 🏷️ JSTL 정의: 일반적인 웹 작업에 사용할 수 있는 표준적인 사용자 지정 JSP 태그 라이브러리 모음입니다.
  • 장점: 스크립틀릿보다 사람과 도구가 읽기 쉬운 깔끔하고 이식성이 뛰어난 코드를 생성합니다.
  • 🔧 핵심 태그: out, catch, import, forEach, if, redirect는 출력, 오류, 포함, 반복문 및 조건을 처리합니다.
  • 🔁 반복 및 논리: forEach는 범위를 순회하는 반면, if와 catch는 조건부 및 예외 처리를 추가합니다.
  • 🛠️ 사용자 정의 태그: SimpleTagSupport를 확장하고 doTag()를 재정의하고 매핑하여 사용자 정의 태그를 생성합니다.ping 최상위 도메인(TLD)에서.
  • 📄 태그 인터페이스: 태그 라이브러리 Descript또는 (TLD)는 JSP 컨테이너에 대한 태그 이름을 해당 핸들러 클래스에 매핑합니다.

JSTL - JSP 표준 태그 라이브러리

JSTL이란 무엇입니까? Java?

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

JSTL의 장점

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

  1. 표준 태그: JSP 페이지의 이식 가능한 기능에 대한 풍부한 계층을 제공합니다. 개발자가 코드를 이해하는 것은 쉽습니다.
  2. Code 청초한: 스크립릿은 개발자를 혼란스럽게 하기 때문에 JSTL을 사용하면 코드가 깔끔하고 깔끔해집니다.
  3. Automatic JavabeansInterospection 지원: JSP 스크립틀릿에 비해 JSTL의 장점이 있습니다. JSTL 표현식 언어 핸들 Java빈 코드는 매우 쉽습니다. 범위가 지정된 속성으로 검색된 객체를 다운캐스트할 필요가 없습니다. 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>

코드 설명:

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

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

위 코드를 실행하면 다음과 같은 출력이 나옵니다.

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>

코드 설명:

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

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

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

코드를 실행하면 다음과 같은 출력이 표시됩니다.

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

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

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

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

위 코드를 실행하면 다음과 같은 출력이 나옵니다.

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>

코드 설명:

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

Code 11-13행: 여기서 우리는 변수 이름이 "gurucount"인 "forEach" 루프를 사용하는데, 이 루프의 시작은 5이고 끝은 10입니다. 우리는 5에서 10까지 시작하는 숫자를 갖는 변수 gurucount를 출력하고 있습니다.

코드를 실행하면 다음과 같은 출력이 나옵니다.

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>

코드 설명:

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

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

Code 12-14행: 여기서 우리는 카운트가 100과 같은지 확인하는 "if 조건"을 사용합니다. 카운트가 100과 같으면 "카운트는 100입니다."라는 출력을 얻습니다.

위 코드를 실행하면 다음과 같은 출력이 나옵니다.

JSTL 핵심 태그 - If

출력:

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

6. 리디렉션

  • 현재 페이지를 다른 페이지로 리디렉션하는 데 사용됩니다. URL 상대적인 것을 제공함으로써 URL 이 태그의 일부입니다.
  • 문맥 상대적 지원을 제공합니다. URLs

구문 :

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

코드 설명:

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

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

위 코드를 실행하면 다음과 같은 출력이 나옵니다.

JSTL 핵심 태그 - 리디렉션

출력:

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

JSTL 사용자 정의 태그

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

JSP 사용자 정의 태그의 장점

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

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

구문 :

우리가 테스트를 만들고 있다고 가정해 봅시다.Guru 태그를 사용하려면 doTag() 메서드를 재정의하는 taghandlertestTag 클래스를 사용할 수 있습니다.

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

또한 이 testTag 클래스를 TLD(태그 라이브러리)에 매핑해야 합니다. Descript또는) JSP 컨테이너가 자동으로 맵을 생성합니다.ping 클래스 파일과 TLD 파일에 언급된 URI 사이의 관계입니다.

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(태그 핸들러)

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

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

Code 9-10행: 이 방법에서는 코드가 호출될 사용자 정의 태그에 삽입됩니다. 우리는 JSP 객체를 사용합니다.Writer그러면 "가 출력됩니다.Guru 낮."

Custom.tld

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

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

Customtag_jsp1.jsp

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

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

위 코드를 실행하면 다음과 같은 출력이 나옵니다.

JSP 태그 인터페이스

출력:

  • 출력 결과는 다음과 같습니다.GuruguruTag.java의 TagHandler는 doTag() 메서드를 오버라이드하고 "를 출력합니다.Guru 출력으로 "태그"를 사용합니다.

자주 묻는 질문

JSTL은 core, formatting(I18N), SQL, XML, functions의 다섯 가지 태그 그룹으로 구성됩니다. core 태그는 반복 및 논리 연산을 처리하고, formatting, SQL, XML, function 태그는 각각 지역화, 데이터베이스, XML, 문자열 유틸리티를 다룹니다.

JSTL은 논리를 위해 읽기 쉬운 XML과 유사한 태그를 사용하는 반면, 스크립틀릿은 원시 데이터를 임베드합니다. Java JSP에서 JSTL은 더 깔끔하고 유지보수하기 쉬운 페이지를 생성하며, JSP와 JSP 코드의 혼합을 방지합니다. Java HTML 마크업을 사용한 코드.

TLD는 사용자 정의 태그 이름을 해당 핸들러 클래스에 매핑하는 XML 파일입니다. JSP 컨테이너는 TLD를 읽어 어떤 태그가 어떤 핸들러 클래스에 해당하는지 파악합니다. Java 각 사용자 지정 태그에 대해 실행할 클래스입니다.

AI 어시스턴트는 JSTL 태그를 생성하고, 사용자 지정 태그 핸들러를 작성하고, 스크립틀릿을 JSTL로 변환하고, 표현 언어를 설명할 수 있습니다. 개발자가 생성된 코드를 검토하는 동안 JSP 개발 속도를 높여줍니다.

예. AI 도구는 스크립틀릿 코드를 분석하고 해당 JSTL 코어 태그 및 표현 언어를 사용하여 다시 작성할 수 있습니다.ping 기존 JSP 페이지의 기능을 유지하면서 현대화합니다.

이 게시물을 요약하면 다음과 같습니다.