나는 오랫동안 JSP와 ASP로 프로그래밍을 해왔습니다. 이 두 가지 서버 측 프로그래밍 솔루션 중에서 JSP가 ASP보다 훨씬 강력하다는 느낌이 점점 더 많이 듭니다. 선호하는 서버측 웹 애플리케이션 개발 도구로 JSP를 선택해야 하는 이유는 무엇입니까? 물론 JSP에는 매력적인 특징과 기능이 많이 있지만 JSP의 태그 라이브러리는 제가 이러한 결정을 내리게 된 가장 중요한 이유 중 하나였습니다.
왜 이런 말을 하는가? 그 이유는 유지 관리와 개발 속도라는 두 가지입니다. 서버 측 스크립팅 언어는 실제로 인터넷 개발의 용광로입니다. 서버 페이지에서는 다양한 스크립트 메소드와 개체를 쉽게 혼합할 수 있습니다. 이런 종류의 페이지는 단순히 웹 구축을 위한 구체적인 것입니다. 서버 측 스크립트에 강력한 정보 처리 기능을 제공하는 것은 이러한 "물건"의 혼합입니다. 이를 통해 서버 측 프로그래머는 동적이고 유연한 웹 페이지를 개발할 수 있습니다. 그러나 반면에 스크립트를 자유롭게 믹싱하는 것에는 단점도 있습니다. 특히 프로젝트 규모가 계속 커짐에 따라 유지 관리가 매우 번거롭다는 점입니다. 설상가상으로 코드가 복잡해지면 개발 속도가 느려지므로 중대형 웹 애플리케이션의 개발에 도움이 되지 않습니다. 매우 늦게 출시되고 비용이 통제할 수 없습니다. 또한 사이트가 일단 개발되면 이러한 다소 복잡한 코드를 유지 관리하기 위해 자격을 갖춘 프로그래머를 찾아야 하며 결과적으로 이러한 프로그래머는 일반 웹 디자이너가 되며 서버 측 응용 프로그램은 최종 그래픽 디자인과 구현 모두에서 핵심 역할을 합니다. .약해졌어요.
이 문제를 극복하기 위해 ASP는 COM 객체 기술을 도입했고, JSP는 이에 대한 대책으로 J2EE를 제공했습니다. 이러한 솔루션은 재사용 가능한 중앙 집중식 코드 기반 메커니즘을 기반으로 구축되었습니다. 그러나 사용하기가 너무 어렵고 배우는 데 많은 시간이 걸립니다. 더욱이 이러한 솔루션은 지저분한 코드를 생성하려는 유혹을 줄여주지 못하므로 결과적으로 이러한 기술을 사용하려면 대규모의 잘 구성된 개발 팀을 구성해야 합니다. 중간 규모 프로젝트의 경우 이러한 방법은 일반적으로 덜 사용되지만 실제로는 중간 규모의 웹 응용 프로그램 프로젝트가 가장 일반적입니다. 결과적으로 많은 프로젝트에서는 요구 사항을 충족하지 못하는 개발 및 유지 관리 환경을 사용할 수밖에 없습니다.
다행스럽게도 JSP는 이 문제를 해결하는 더 나은 방법을 제공합니다. 태그 라이브러리는 재사용 가능한 코드 블록을 생성하는 쉬운 방법을 제공합니다. 태그 라이브러리가 디자인되면 여러 프로젝트에서 다시 사용할 수 있습니다. 더욱 편리한 점은 COM 및 J2EE와 달리 JSP 작성 방법만 알면 태그 라이브러리를 생성하기 위해 다른 기술을 배울 필요가 없다는 것입니다! 마지막으로 태그 라이브러리는 웹 애플리케이션의 유지 관리 가능성도 향상시킵니다. 이러한 유지 관리 용이성 향상은 JSP 페이지에서 XML 기반 사용자 정의 가능한 인터페이스를 쉽게 구현하는 데 반영됩니다. 결과적으로 웹 디자이너는 JSP가 무엇인지 모르더라도 JSP 웹 애플리케이션을 구축할 수 있습니다. 이런 방식으로 웹 개발은 매우 효율적인 팀 개발 작업이 됩니다. JSP 프로그래머는 사용자 정의 태그와 백엔드 코드 모듈을 만들 수 있고, 웹 디자이너는 사용자 정의 태그를 사용하고 전적으로 웹 디자인 자체에 집중할 수 있습니다. 태그 라이브러리는 코드 혼란 문제를 해결하고 이를 깔끔하고 아름답게 수행합니다(사실 이러한 문제 해결의 핵심은 XML이지만 여전히 태그 라이브러리가 핵심 역할을 합니다).
태그 라이브러리란 무엇입니까?
JSP 태그 라이브러리(사용자 정의 태그 라이브러리라고도 함)는 JavaBeans를 통해 XML 기반 스크립트를 생성하는 방법으로 볼 수 있습니다. 개념적으로 태그는 간단하고 재사용 가능한 코드 구조입니다. 예를 들어, 최신 JSPKit 릴리스(JSP Insider 내)에서는 XML 태그를 사용하여 XML 문서에 쉽게 액세스할 수 있습니다. 아래 목록 A를 참조하세요.
목록 A: XML/XSL 변환을 수행하는 예제 태그와 여기에 포함된 HTML 페이지
<%@ taglib uri=" http://www.jspinsider.com/jspkit/JAXP " prefix="JAXP"%>
<JAXP:Transformer태그>
<JAXP:XMLFile>c:/xml/example.xml</JAXP:XMLFile>
<JAXP:XSLFile>c:/xml/example.xsl</JAXP:XSLFile>
</JAXP:TransformerTag>
위의 예에서는 간단한 태그를 사용하여 이면의 보다 강력한 코드에 액세스합니다. 먼저 명령문의 태그 부분은 XML 파일을 로드한 다음 XSL 파일을 적용하여 XML 파일의 내용을 특정 형식으로 변환합니다. 표현 형식을 지정하여 클라이언트에게 전송하는 것은 매우 간단한 태그를 사용하는 것뿐입니다. 사용자 정의 태그를 사용하면 JSP 프로젝트에서 재사용 가능한 오픈 소스 모듈을 쉽게 만들 수 있으며 필요한 것은 태그 라이브러리와 해당 문서뿐입니다.
태그 라이브러리의 주요 기능
1. 여러 프로젝트에 쉽게 설치 가능 태그를 하나의 JSP 프로젝트에서 다른 프로젝트로 쉽게 마이그레이션할 수 있습니다. 태그 라이브러리를 생성한 후에는 JSP 프로젝트에서 재사용할 수 있는 모든 것을 JAR 파일로 패키징하기만 하면 됩니다. 태그 라이브러리는 태그를 재사용할 수 있고 자신의 프로젝트에서 쉽게 사용할 수 있기 때문에 점점 인기를 얻고 있습니다. 현재 최고의 태그 리소스는 JSPTags.com에서 찾을 수 있습니다.
2. 확장 JSP 태그 라이브러리는 JSP 사양(JSP 1.2)의 모든 기능을 가질 수 있습니다. JSP의 다음 버전이 나타날 때까지 기다리지 않고도 JSP의 기능을 제한 없이 확장하고 늘릴 수 있습니다. 예를 들어, JSP 포함 호출이 만족스럽지 않습니다. 자신만의 사양을 적용하는 자체 포함 태그를 만들 수 있습니다.
3. 유지 관리 용이
태그 라이브러리를 사용하면 다음과 같은 이유로 JSP 웹 애플리케이션을 매우 쉽게 유지 관리할 수 있습니다.
(1) 라벨 적용은 간단하고 누구나 쉽게 이해하고 사용할 수 있습니다.
(2) 모든 프로그램 로직 코드는 태그 프로세서와 JavaBeans에 집중되어 있습니다. 즉, 코드를 업그레이드할 때 코드를 사용하는 모든 페이지를 수정할 필요는 없으며 중앙 집중식 코드 파일만 수정하면 됩니다.
(3) 새로운 기능을 추가해야 하는 경우 기존 페이지를 수정할 필요가 없습니다. 태그에 추가 속성을 추가하여 새로운 동작을 도입할 수 있으며, 다른 이전 속성은 변경되지 않은 상태로 유지되므로 모든 이전 페이지를 계속 사용할 수 있습니다. .정상적으로 작동합니다. 예를 들어 모든 텍스트를 파란색으로 만드는 라벨이 있습니다.
<BlueText>내 텍스트</BlueText>
하지만 프로젝트 후반부에서는 파란색을 더 어둡게 만들고 싶습니다. 원래 라벨을 유지하고 아래와 같이 새로운 속성인 음영을 추가하면 됩니다.
<BlueText 그늘="teal">내 텍스트</BlueText>
모든 기존 태그는 여전히 파란색 텍스트를 생성할 수 있지만 이제 동일한 태그를 사용하여 어두운 파란색 텍스트를 생성할 수 있습니다.
(4) 레이블은 코드 재사용성을 향상시킵니다. 여러 번 테스트되고 사용된 코드에는 확실히 버그가 적습니다. 따라서 사용자 정의 태그를 사용하는 JSP 페이지도 결함이 적고 유지 관리가 훨씬 편리합니다.
4. 신속한 개발 시간 태그 라이브러리는 코드를 재사용하는 쉬운 방법을 제공합니다. 서버측 언어에서 코드를 재사용하는 표준 방법 중 하나는 템플릿을 사용하는 것입니다. 템플릿 라이브러리를 사용하는 것에 비해 태그 라이브러리가 더 나은 솔루션입니다. 템플릿 라이브러리를 사용하면 각 프로젝트에 대해 템플릿을 수정하거나 엄격한 인터페이스를 구축해야 하는 반면, 태그 라이브러리는 이러한 제한이 없고 객체 지향의 모든 이점을 갖고 있으며 유연성과 확장성이 뛰어나며 재사용을 통해 코드를 사용하면 개발 시간을 줄이고 웹 애플리케이션 설계에 더 많은 시간을 할애할 수 있습니다. 태그 라이브러리의 인터페이스도 매우 간단하여 삽입, 사용 및 디버깅이 매우 쉽습니다.
태그 구조
태그 라이브러리는 사용하기가 매우 쉽지만 태그 라이브러리를 설정하는 내부 구현 메커니즘은 여전히 상당히 복잡합니다. 적어도 간단한 JavaBean을 설정하는 것보다 더 복잡합니다. 복잡성은 태그 라이브러리가 여러 부분으로 구성되어 있다는 사실에서 비롯됩니다. 그러나 Java 및 JSP에 대한 지식만 마스터하면 됩니다.
단순 태그는 다음 요소로 구성됩니다.
1. JavaBean: Java와 Java 고유의 객체 지향 특성을 활용하려면 재사용 가능한 코드를 JavaBean이라는 별도의 코드 컨테이너에 배치해야 합니다. 이러한 JavaBeans는 태그 라이브러리의 필수 부분은 아니지만 태그 라이브러리에서 할당된 작업을 수행하는 데 사용되는 기본 코드 모듈입니다.
2. 태그 프로세서: 태그 프로세서는 태그 라이브러리의 핵심입니다. 태그 핸들러는 필요한 외부 리소스(JavaBeans)를 참조하고 JSP 페이지 정보(PageContext 객체)에 액세스하는 일을 담당합니다. JSP 페이지는 페이지에 설정된 태그 속성과 태그 본문의 콘텐츠를 태그 프로세서에 전달합니다. 태그 프로세서가 처리를 완료하면 추가 처리를 위해 처리된 출력 결과를 다시 JSP 페이지로 보냅니다.
3. 태그 라이브러리 디스크립터(TLD 파일): 태그 프로세서의 속성, 정보, 위치를 기록하는 간단한 XML 파일입니다. JSP 컨테이너는 이 파일을 사용하여 태그 라이브러리를 호출하는 위치와 방법을 파악합니다.
4. 웹사이트의 web.xml 파일: 웹사이트의 초기화 파일입니다. 이 파일에는 웹사이트에 사용되는 사용자 정의 태그와 각 사용자 정의 태그를 설명하는 데 사용되는 tld 파일이 정의되어야 합니다.
5. 릴리스 파일(WAR 또는 JAR 파일): 사용자 정의 태그를 재사용하려면 해당 태그를 한 프로젝트에서 다른 프로젝트로 이동하는 방법이 필요합니다. 태그 라이브러리를 JAR 파일로 패키징하는 것은 간단하고 효과적인 방법입니다.
6. JSP 페이지의 태그 라이브러리 선언: JSP 페이지에서 사용자 정의 태그를 사용하려면 태그 라이브러리 식별자를 사용하여 페이지에서 선언해야 합니다.
해야 할 일이 많은 것 같고, 물론 처음 사용을 시작할 때는 조금 까다롭겠지만, 그리 어렵지는 않습니다. 요점은 코딩이 아니라 조각을 올바르게 구성하는 것입니다. 이 계층 구조는 태그 사용을 유연하게 하고 전송을 쉽게 만들어주기 때문에 중요합니다. 더 중요한 것은 이러한 레벨을 사용하면 JSP IDE(JSP 통합 개발 환경)를 통해 태그 라이브러리를 생성하는 전체 프로세스를 자동화할 수 있다는 것입니다. JSP IDE는 사용자 정의 태그 생성 작업의 대부분을 자동으로 완료할 수 있으며, 코드 및 태그 프로세서 설정만 담당하면 됩니다.
(참고: 태그 프로세서는 하나의 사용자 정의 태그만 정의합니다. 태그 라이브러리는 동일한 작업을 처리하는 여러 태그 프로세서의 모음입니다.)
첫 번째 태그 생성
다음은 사용자 정의 태그를 생성하는 방법, 구체적인 예를 단계별로 설명합니다. 자체 HTML 인코딩 기능을 갖도록 JSP를 확장하고 있습니다. 이 기능은 모든 < 및 > 문자를 HTML 코드로 대체합니다. 다른 인코딩 처리를 수행하도록 쉽게 확장할 수 있습니다. 단순화하기 위해 이 예에서는 사용자 정의 태그를 생성하는 기본 요소만 설명합니다.
JavaBean을 생성하는
코드의 재사용 가능한 부분은
JavaBean에 배치되어야 합니다.이것은 매우 중요합니다. 이렇게 하면 다른 프로젝트에서 코드를 재사용할 수 있습니다. 태그 핸들러 내부에 배치된 코드는 태그 외부에서 재사용할 수 없으므로 재사용 가능한 코드 부분을 분리하는 것이 중요합니다. 이 예에서 HTML용으로 코딩된 로직은 공통이므로 JavaBean에 배치됩니다. 목록 B를 참조하세요.
목록 B: HTML로 인코딩된 JavaBeans
/* HTML_Format.java */
공용 클래스 HTML_Format 확장 객체 구현 java.io.Serialized {
/** 새 HTML_Format 생성 */
public HTML_Format() {}
/** 문자열의 모든 < 및 > 문자를 응답 HTML 인코딩으로 바꿉니다 */
공개 문자열 HTML_Encode(문자열 as_data)
{
int li_len = as_data.length();
/*문자열 버퍼의 길이가 원래 문자열보다 깁니다*/
StringBuffer lsb_encode = new StringBuffer(li_len + (li_len/10))
/* 모든 < 및 > 문자를 바꾸는 루프*/
for(int li_count = 0; li_count < li_len; li_count++)
{ String ls_next = String.valueOf(as_data.charAt(li_count));
if (ls_next.equals("<")) ls_next = "<";
if (ls_next.equals(">")) ls_next = ">";
lsb_encode.append( ls_next );
}
return( lsb_encode.toString() );
}
}
태그 프로세서를 생성하는 코드는 목록 C에 나와 있습니다.
목록 C: HTML 인코딩 태그 프로세서
import java.io.IOException;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*
공개 클래스 HTML_FormatTag는 BodyTagSupport를 확장합니다.
{
/* 1) 이 함수는 태그 끝에서 호출됩니다*/
public int doEndTag()에서 JspTagException이 발생합니다.
{
노력하다
{ /* 2) 라벨의 텍스트 가져오기 */
BodyContent l_tagbody = getBodyContent();
String ls_output = "";
/* 3) 태그 본문에 텍스트가 있으면 처리합니다 */
if(l_tagbody != null)
{ HTML_Format l_format = 새로운 HTML_Format();
/* 3a) 태그 본문의 내용을 문자열로 변환 */
문자열 ls_html_text = l_tagbody.getString();
ls_output = l_format.HTML_Encode(ls_html_text);
}
/* 4) 결과를 다시 데이터 스트림에 씁니다 */
pageContext.getOut().write(ls_output.trim());
}
잡기(IOException e)
{ throw new JspTagException("태그 오류:" + e.toString());
}
/* JSP가 다음 페이지의 콘텐츠를 계속 처리하도록 합니다*/
EVAL_PAGE를 반환합니다.
}
}
이 처리는 매우 간단하며 다음이 포함됩니다.
1. 여는 태그와 닫는 태그 사이의 텍스트를 읽습니다.
2. HTML 인코딩 기능 호출
3. 결과를 JSP 페이지로 반환합니다.
태그 설명자 만들기
시스템이 태그로 무엇을 해야 할지 알 수 있도록 사용자 정의 태그를 설명해야 합니다. 이 설명 파일의 접미사는 .tld입니다. TLD 파일은 일반적으로 태그 프로세서의 이름을 따서 명명되며 "/WEB-INF/" 디렉터리에 저장됩니다. 목록 D를 참조하세요.
목록 D: HTML 인코딩 태그 설명자 <?xml version="1.0" 인코딩="UTF-8" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP 태그 라이브러리 1.1//EN"
" http://java.sun.com/j2ee/dtds/web-jsptalibrary_1_1.dtd ">
<TAGLIB>
<TLIBVERSION>1.0</TLIBVERSION>
<JSPVERSION>1.1</JSPVERSION>
<SHORTNAME>HTML_FormatTag</SHORTNAME>
<URI></URI>
<INFO> HTML 인코딩 태그 <//INFO>
<TAG>
<이름>HTML인코드<//NAME>
<TAGCLASS>HTML_FormatTag<//TAGCLASS>
<INFO>HTML 인코딩</INFO>
</TAG>
<//TAGLIB>
웹 XML 파일을 업데이트하여
이제 JSP 컨테이너에 태그 라이브러리 사용 방법을 알려주세요. 이를 위해서는 web.xml 파일을 수정해야 하며, 특히 태그 라이브러리를 등록하고 태그에 URI를 할당하기 위한 taglib 프로젝트를 추가해야 합니다. URI는 이 특정 태그에 적용되는 웹 사이트의 유일한 색인입니다. 태그는 나중에 다른 웹 사이트에서 사용될 수 있으므로 고유성을 보장하기 위해 전체 URL 및/또는 패키지 이름을 사용하는 것이 가장 좋습니다. 이 예제는 단순화되었습니다. 샘플 코드는 목록 E를 참조하세요.
목록 E: web.xml 파일 수정 <?xml version="1.0" 인코딩="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD 웹 애플리케이션 2.2//EN"
" http://java.sun.com/j2ee/dtds/web-app_2.2.dtd ">
<WEB-APP>
<TAGLIB>
<TAGLIB-URI>
HTML인코드
</TAGLIB-URI>
<TAGLIB-위치>
/WEB-INF/HTML_FormatTag.tld
</TAGLIB-위치>
</TAGLIB>
</WEB-APP>
새 태그를 사용하세요.
맞춤 태그를 설정한 후 JSP 페이지에서 사용할 수 있습니다. 이렇게 하려면 taglib 지시어 명령을 사용하여 페이지에서 사용하려는 태그를 선언하면 됩니다. 태그는 고유한 URI로 인덱싱된 다음 네임스페이스 접두사가 할당됩니다. 이 접두사는 다른 네임스페이스와 충돌하지 않는 한 특별한 의미가 없으며 임의적일 수 있습니다. 아래 목록 F와 G를 참조하세요.
목록 F:JSP 페이지에서
HTML 인코딩 태그<%@ taglib uri="HTMLEncode" prefix="Examples" %>
사용
<프리>
<?XML:NAMESPACE PREFIX = 예 /><예:HTMLEncode>
<안녕하세요, 간단한 샘플>
</예:HTML인코드>
</PRE>
목록 G: 샘플 코드 출력<Hello, Simple 샘플>
다음과 같이 표시됩니다.
<안녕하세요, 간단한 샘플>
이 태그로 페이지의 모든 코드를 인코딩했습니다. 모든 사용자 정의 태그는 서버에서 처리됩니다. 이는 출력 페이지에 사용자 정의 태그가 표시되지 않음을 의미합니다.
보시다시피 태그를 만드는 것은 어렵지 않습니다. 가장 어려운 부분은 태그 프로세서의 모든 것을 배우는 것입니다. 이는 강력한 기능이며 우리는 단지 표면적인 부분만 살펴보았습니다. 이 프로세스에 관련된 많은 단계로 인해 새로운 JSP 프로그래머는 태그를 생성할 때 혼란을 느낄 수 있습니다.
결론
태그 라이브러리는 JSP의 가장 중요한 기능 중 하나이며 여전히 지속적으로 개발되고 있습니다. 확실히 새로운 것이기 때문에 아직 널리 채택되지는 않았지만 사용자 정의 태그 라이브러리는 그 신비함을 벗겨냈고 점점 더 많은 개발자들이 관심을 갖고 사용하기 시작했습니다. 2001년 말에는 태그 라이브러리가 많은 JSP 프로젝트에서 매우 일반적인 기능이 될 것으로 예상됩니다.
이 문서에서는 태그 라이브러리의 이점에 대해서만 간략하게 설명합니다. 태그 라이브러리에는 실제로 다른 많은 강력한 기능이 있습니다. 태그 라이브러리는 JSP 개발을 전례 없는 새로운 세계로 이끌어줍니다. 이는 JSP 개발자에게 JSP를 다양한 애플리케이션으로 변환하고 모든 유형의 웹 애플리케이션을 구축할 수 있는 도구를 제공하므로 실제로 흥미로운 신기술입니다. 태그 라이브러리는 JSP를 가장 풍부하고 동적인 개발 기능과 강력한 웹 프로그래밍 환경으로 바꿔줍니다. 그 능력은 우리의 상상력과 창의성에 의해서만 제한됩니다.