본문 바로가기
JSP 웹프로그래밍

JSP #8 : 커스텀 태그 & EL & JSTL (230105)2

by haheehee 2023. 1. 5.

++ Custom Tag(커스텀 태그) ++

- 사용자 정의 태그

- 태그와 같은 형태로 프로그램 코드를 대체하거나 재활용 가능한 구조를 통해 태그 라이브러리로 활용하고자 개발된 규격

- (스크립트릿 사용을 줄이고자)

- 외형적인 형태는 XML(HTML) 태그 구조

- 서블릿 형태로 변환될 때 자바 코드로 변경되어 통합되는 방식

- 커스텀 태그를 사용하기 위해서는 taglib 지시어를 사용 -> 커스텀 태그가 어디에 정의되어 있는지를 먼저 선언, 태그에 사용할 접두어를 지정해야 한다.

- 커스텀 태그 자체가 서버에서 해석되는 구조

- 프로젝트가 특정 커스텀 태그에 종속될 수 있다

- 따라서, 커스텀 태그를 직접 만드는 방식은 점차 줄어들고 있음

- 대신 커스텀 태그 기술로 만들어진 JSTL(JSP Standard Tag Library)이 자바 웹 개발에 꼭 필요한 요소

 

<%@ taglib tagdir="/WEB-INF/tags" prefix="m" %>
<m:printData pid="87459989" />

- 특정 코드를 전달하면 해당 데이터를 출력하는 예시.

- 태그 파일로 정의된 커스텀 태그를 사용, 'WEB-INF/tags/printData.tag'파일로부터 태그 정의를 가지고 온다.

- m은 태그 앞에 붙일 접두어. (태그 파일명 = 태그 이름)

 


++ EL (Expression Language : 표현 언어) ++

- 현재 페이지의 자바 객체, 또는 scope object에 저장된 자바 빈 객체를 손쉽게 접근, 사용

 꼭!!!! isELIgnored="false"넣기 : 표현언어 기능 활성화

          <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" isELIgnored="false" %>

- 데이터를 표현하기 위한 용도.

- 제한된 객체 참조가 가능, 해당 객체의 메서드 호출 가능

- 단순한 출력뿐만아니라, 사칙연산, 비교연산, 논리연산, 3항연산 등이 지원된다.

- 상황에 따라 출력값을 변경하는 정도로 사용하는 것이 좋다.

${1 + 2}	// 사칙연산
${true && false} 	// 논리연산
${user.name == "하히"?"학생":"블로거"}	// 3항연산

${myList[0]}	// 참조하는 객체가 배열 
${myMap["name"]}	 // 맵

 

- 간단한 구문으로 쉽게 변수와 객체를 참조할 수 있다.

- 데이터가 없거나 null객체를 참조할 때 에러가 발생하지 않아 좋다.

 

- 자바 빈 접근

${저장이름.변수명}

EL을 통해 scope object에 저장된 자바 빈 객체를 참조하는 방법

 

- EL을 사용안하는 경우

이름 : <%=m.name %> 	// 표현식 사용

이름 : <jsp:getProperty name="m" property="name" />	//액션 사용

 

- Scope Object 접근

  • EL은 기본적으로 모든 scope에서 자바 빈 객체를 찾는다.
  • 특정 scope만 대상으로 참조하려면 `내장객체명Scope.속성이름`으로 사용하기.
  • 이름 : ${requestScope.m.name}   ==> session과 request 모두에 ‘m’이라는 이름으로 저장된 객체가 있다고 할 때, request scope에 있는 객체를 참조하려면 다음과 같이 사용할 수 있음               

** 표현언어 ${ ... } 안은 자바!! 하지만, 문자열이 인수로 있어도 +연산자는 "연결연산자"가 아닌 "산술연산자"로 실행이 된다. 따라서 ${"10"+1}의 결과는 11이 된다.

 


Expression Language 실습

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" isELIgnored="false" %>
<jsp:useBean id="user" class="expressionl.User"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Expression Language</title>
</head>
<body>
	<h2> 사칙연산 </h2>
	1. 10 + 20 = ${10+20} <br>
	2. 10 * 20 = ${10*20}
	<hr>
	<h2> 논리연산 </h2>
	3. true && false : ${true && false} <br>
	4. 10 >= 20 : ${10>=20}
	<hr>
	<h2> 3항 연산 </h2>
	5. user.name == "하히"?"학생":"블로거"      : ${user.name == "하히"?"학생":"블로거"} <br>
	<hr>
</body>
</html>

test_el.jsp

자바 빈 태그 쓴다면 꼭!!!! isELIgnored="false"넣기

package expressionl;

public class User {
	private String name = "하히";

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

User.java (클래스)


++ JSTL (JSP Standard Tag Library) ++

- JSP에서 스크립트릿(자바 코드 블록)을 사용하지 않고 HTML 형식을 유지하면서 조건문, 반복문, 간단한 연산 같은 기능을 사용할 수 있도록 지원

- 표준 커스텀 태그 라이브러리

- 서버에서만 해석할 수 있는 구조 => 협업에 불편

- 개발 과정에서 UI 확인을 위해 서버를 통해야 하므로 비효율적

- 뷰 중심의 JSP 구현에는 core 정도만 사용

 

- JSTL을 사용하기 위해서는 라이브러리가 필요하다. Apache Standard Taglib를 주로 사용한다.

            webapp-WEB-INF에 lib폴더를 생성하고, 다음 두가지 .jar파일을 복사-붙여넣기 한다.

  • Impl: taglibs-standard-impl-1.2.5.jar
  • Spec: taglibs-standard-spec-1.2.5.jar

- JSTL을 JSP에 사용하려면 taglib지시어를 추가해야 한다. 

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

core라이브러리 사용하기 위한 선언

 

- core라이브러리 :

  • 변수처리, 흐름제어, URL 관리, 출력 등 기능 구현 라이브러리
기능 태그 ex
변수관련 remove, set 변수 지정과 삭제
흐름제어 if, choose, when, otherwise, forEach, forTokens 조건처리, 반복, 토큰 피싱
URL관리 import, redirect, url, param URL핸들링
기타 catch, out 에러처리, 출력

 

- <c:if>       : 자바의 if

  • 조건 테스트를 위해 속성을 참조문과 유사하지만, else는 지원하지 않음.
  • 지원할 범위(scope)를 지정할 수 있지만 필수는 x
<c:if test="조건" [var="결과변수"] [scope="{page|request|session|application}"]>
    조건이 true인 경우 출력되는 부분
</c:if>

 

- <c:forEach>       : 자바의 for

  • 화면에 데이터를 반복 출력할 때 사용
  • 자바의 for문과 같은 개념이지만, 정밀하지 않다.
  • index, count등을 지원하는 varStatus 제공 (진행 상태 확인)
<c:forEach [var="참조객체"] [varStatus="상태정보변수"] begin="시작" end="종료" 
    [step="반복단계 증가값, 1이 기본"]>
    반복출력되는 부분
</c:forEach>

var : 배열, 리스트 등 집합형인 객체

varStatus : 반복 진행 상황을 참조하기 위한 객체

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(출처 : 짧고 굵게 배우는 JSP 웹 프로그래밍과 스프링 프레임워크(황희정))

댓글