++ 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 웹 프로그래밍과 스프링 프레임워크(황희정))
'JSP 웹프로그래밍' 카테고리의 다른 글
JSP #9 : database와 연동 (230106) (0) | 2023.01.06 |
---|---|
JSP : EL 자료형, 연산자, 실습(230105)Expression Language (0) | 2023.01.05 |
JSP #7 : 액션 태그 (230105)2 (0) | 2023.01.05 |
JSP #6 : JSP 파일 업로드 (230104)2 (0) | 2023.01.05 |
JSP #5 : JSP 지시어, 템플릿 데이터, 스크립트 요소 (230104)2 (0) | 2023.01.04 |
댓글