Custom Tag : 필요에 의해 특정태그를 만들어 사용하는 것을 뜻함
- TagSupport를 상속
- doStartTag() 오버라이드
- doAfterBody() 오버라이드
- doEndTag() 오버라이드
엘리먼트의 사용순서도 중요함!!
PageContext.getOut() : 응답결과를 생성하기 위한 출력스트림을 반환하는 메소드
자주쓰이는 커스텀태그를 모아둔것이 JSTL
JSTL(JSP Standard Tag Library)
https://tomcat.apache.org/download-taglibs.cgi
Apache Tomcat® - Apache Taglibs Downloads
Welcome to the Apache Taglibs download page. This page provides download links for obtaining the latest version of the Apache Standard Taglib, as well as links to the archives of older releases. You must verify the integrity of the downloaded files. We pro
tomcat.apache.org

Core(prefix : c)
: EL 지원, 프로그램의 흐름 제어, URL 주소 관리등의 태그 제공
1. set 태그 : 스코프 객체에 속성값을 저장하거나 변경하기 위한 태그
→ setAttribute를 호출하는 것과 동일
- var : 스코프 객체의 속성명을 속성값으로 설정
- value : 스코프 객체의 속성값(인스턴스)를 속성값으로 설정
- scope : 속성값 사용범위를 속성값으로 설정(page-기본, request, session, application)
<c:set var="su" value="10" scope="page"/>
<p>su = ${su }</p>
<c:set var="su">20</c:set>
<p>su = ${su }</p>
2. remove 태그 : 스코프 객체에 저장된 속성값을 제거하는 태그
→ removeAttribute를 호출하는 것과 동일
→ 모델에서 속성값을 거의 저장하기 때문에 사용하지 않음.
3. out 태그 : 스코프 객체의 속성값을 클라이언트에게 전달하는 태그
4. if 태그 : 조건에 따라 태그내용의 출력을 선택하는 태그 - else 기능 미존재
- test 속성 : false 또는 true 중 하나를 속성값으로 설정
→ 속성값이 거짓(false)인 경우 태그내용을 출력하지 않고 참(true)인 경우 태그내용 출력
<c:set var="num" value="10"/>
<c:if test="${num%2!=0 }">${num } = 홀수</c:if>
5. choose 태그 : 조건에 따라 태그내용의 출력을 선택하는 상위태그(if - else if 의 개념)
→ 하위태그 : when 태그(1개 이상), otherwise 태그(0개 또는 1개)
→ choose 태그의 하위태그를 제외한 코드가 존재할 경우 에러 발생 - JSP 주석 제외
⇒ when 태그 : 조건에 따라 태그내용의 출력을 선택하는 하위태그
- test 속성 : false 또는 true 중 하나를 속성값으로 설정
⇒ otherwise 태그 : 모든 when 태그의 조건이 false 인 경우 태그내용을 출력하는 하위태그(else)
- test 속성 : false 또는 true 중 하나를 속성값으로 설정
<c:choose>
<c:when test="${choice==1 }">
<p>수성으로 이동합니다.</p>
</c:when>
<c:when test="${choice==2 }">
<p>금성으로 이동합니다.</p>
</c:when>
<c:otherwise>
<p>지구로 이동합니다.</p>
</c:otherwise>
</c:choose>
6. forEach 태그 : 반복적으로 태그내용을 포함하여 출력하기 위한 태그
forEach 태그는 배열 또는 콜렉션의 요소값을 반복적으로 제공받아 처리하는 기능 제공
- var 속성 : 스코프 객체의 속성명을 속성값으로 설정
- begin 속성 : 스코프 객체에 저장될 시작값(Integer)을 속성값으로 설정
- end 속성 : 스코프 객체에 저장될 종료값(Integer)을 속성값으로 설정
- step 속성 : 스코프 객체의 증가값(Integer)을 속성값으로 설정
- item 속성 : 반복 처리할 배열 또는 콜렉션을 속성값으로 설정
<c:forEach var="name" items="${nameArray }">
<li>${name }</li>
</c:forEach>
<c:forEach var="student" items="${studentList }">
<div>학번 = ${student.num }, 이름 = ${student.name }</div>
</c:forEach>
7. forTokens 태그 : 스코프 객체에 저장된 속성값을 특정 문자열로 분리하여 반복 처리하는 태그
- items 속성 : 분리하기 위한 스코프 객체의 속성값(String)을 속성값으로 설정
- delims 속성 : 분리하기 위한 구분값(String)을 속성값으로 설정
- var 속성 : 분리한 값을 구분하기 위한 속성값
<c:set var="phone" value="010-1234-5678"/>
<p>전화번호 = ${phone }</p>
<c:forTokens items="${phone }" delims="-" var="num">
<div>${num }</div>
</c:forTokens>
8. import 태그 : 다른 웹프로그램의 실행 결과를 응답받아 포함하는 기능을 제공하는 태그
⇒ JSP의 include 태그와 유사한 기능을 제공(쓰레드가 이동되지는 않음)
→ include 태그는 현재 서버의 웹프로그램만을 요청하여 실행결과를 응답받아 포함하지만
import 태그는 다른 서버의 웹프로그램을 요청하여 실행결과를 응답받아 포함할 수 있다.
→ HTML의 iframe 태그와 유사한 기능을 제공
- url 속성 : 응답 결과를 포함시킬 웹프로그램의 URL 주소를 속성값으로 설정
- 잘안씀...
<c:import url="core_import_source.jsp">
<c:param name="name" value="홍길동"/>
</c:import>
9. redirect 태그 : 클라이언트에게 URL 주소를 전달하여 재요청하도록 응답하는 태그
- url 속성 : 클라이언트가 재요청할 웹프로그램의 URL 주소를 속성값으로 사용
- 잘안씀...
<c:choose>
<c:when test="${!empty(param.name) }">
<p>${param.name }님, 안녕하세요</p>
</c:when>
<c:otherwise>
<c:redirect url="core_redirect_form.jsp"></c:redirect>
</c:otherwise>
</c:choose>
10. url 태그 : 컨텍스트 경로가 포함된 리소스 파일의 절대경로를 제공하는 태그
- value 속성 : 컨텍스트 경로를 제외한 리소스 파일의 절대경로를 속성값으로 설정

필터 클래스 :
특정 웹프로그램에 대해 요청 처리 전 실행될 명령과 응답 전 실행될 명령을 작성하기 위한 클래스
⇒ 요청 전 실행될 명령 : request 메세지(HttpServletRequest 인스턴스)의 정보를 변경 ⇒ 응답 전 실행될 명령 : response 메세지(HttpServletResponse 인스턴스)의 정보를 변경 ⇒ 필터 클래스는 반드시 Filter 인터페이스를 상속받아 작성
모든 웹프로그램의 실행되기 전에 동작함!
=> SPRING에서도 사용될 개념
public class EncodingFilter implements Filter {
private String encoding;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//encoding="utf-8";
encoding=filterConfig.getInitParameter("encoding");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
if(request.getCharacterEncoding()==null ||
!request.getCharacterEncoding().equalsIgnoreCase(encoding)) {
request.setCharacterEncoding(encoding);//전달값에 대한 캐릭터셋 변경
}
chain.doFilter(request, response);
}
}

Formatter(prefix : fmt)
: 숫자, 날짜, 시간 형식 변경 및 국제화, 다국어 지원 등의 태그 제공
- formatDate 태그 : 스코프 객체에 저장된 Date 인스턴스의 날짜와 시간을 원하는 패턴의 문자열로 변환하여 제공하는 태그 - SimpleDateFormat 클래스
- value 속성 : Date 인스턴스를 속성값으로 설정
- type 속성 : date(날짜), time(시간), both(날짜와 시간) 중 하나를 속성값으로 설정
⇒ 속성값이 [date]인 경우 기본적으로 [ yyyy.M.d. ] 패턴의 문자열로 변환되어 제공 - dateStyle 속성 : full 또는 short 중 하나를 속성값으로 설정하여 사용가능.(full : 년/월/일/요일)
<c:set var="now" value="<%=new Date() %>"/>
<p>now=${now }</p>
<p>now(날짜) = <fmt:formatDate value="${now }" type="Date"/>
<p>now(날짜) = <fmt:formatDate value="${now }" type="Date" dateStyle="full"/>
<p>now(날짜) = <fmt:formatDate value="${now }" type="Date" dateStyle="short"/>
2. formatNumber 태그 : 스코프 객체에 저장된 숫자값을 원하는 패턴의 문자열로 변환하여 값을 제공하는 태그
- DecimalFormat 클래스
- value 속성 : 숫자값이 저장된 인스턴스를 속성값으로 설정
- type 속성 : number(숫자) 또는 currency(화폐) 중 하나를 속성값으로 설정
⇒ 속성값이 [number]인 경우 숫자 3자리마다 ,가 삽입된 형식의 문자열로 변환되어 제공
⇒ 속성값이 [currency]인 경우 앞에 화폐기호가 삽입되고 숫자 3자리마다 ,가 삽입된 형식의 문자열로 변환되어 제공
Database (prefix : sql)
: 테이블의 행에 대한 삽입, 변경, 삭제, 검색 기능의 태그 제공
XML (prefix : xml)
: XML 문서에 대한 처리 기능의 태그 제공
Functions(prefix : fn)
: 문자열 처리 기능의 EL 함수 제공
- split 함수 : 문자열을 원하는 문자(정규표현식)로 구분 분리하여 배열로 반환하는 함수
- substring 함수 : 문자열을 시작첨자와 종료첨자로 분리하여 문자열로 반환하는 함수
'Web Dev' 카테고리의 다른 글
| MyBatis Framework - 2 (Mapper Binding) (0) | 2022.02.25 |
|---|---|
| MyBatis Framework (0) | 2022.02.24 |
| EL(Expression Language) (0) | 2022.02.21 |
| MVC Pattern - 2 (0) | 2022.02.18 |
| MVC Pattern - 1 (0) | 2022.02.17 |