삶 가운데 남긴 기록 AACII.TISTORY.COM
JSTL Core 본문
JSTL(Java Server Pages Standard Tag Library) 개요
자주 사용하는 기능은 커스텀 태그로 구현 한다음 재사용하면 편리합니다.
그러나 커스텀 태그는 직접 만드려면 많은 수고가 필요하게 됩니다.
그래서 표준 태그 라이브러리가 존재하는데 이것이 JSTL 입니다.
- JSTL 1.0은 Servlet 2.3과 JSP1.2와 호환
- JSTL 1.1은 Servlet 2.4와 JSP2.0과 호환
- JSTL 1.2은 Servlet 2.5와 JSP2.1과 호환
core는 기본 기능이 포함되어 있으며 formatting은 날짜 시간에 관한 기능, sql은 데이터베이스 작업기능 xml은 xml을 지원하는 기능 functions은 여러 함수 기능이 구현되어 있습니다.
core: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
formatting: <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
sql: <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
xml: <%@ taglib prefix="xml" uri="http://java.sun.com/jsp/jstl/xml" %>
functions: <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
설치
https://tomcat.apache.org/download-taglibs.cgi
위 페이지에 방문해서 jar 파일들을 다운 받습니다.
taglibs-standard-compat-1.2.5.jar
taglibs-standard-impl-1.2.5.jar
taglibs-standard-jstlel-1.2.5.jar
taglibs-standard-spec-1.2.5.jar
이 내려받은 jar 파일들을 /WEB-INF/lib 폴더로 복사합니다.
그러면 자동으로 WAS에서 인식합니다.
Core 기본 액션
<c:set> : 이 태그는 jsp 페이지에서 사용하는 변수를 설정합니다.
- var : 변수 이름
- value: 변수 값. (EL식이나 문자열)
- scope: request, session application, page 의 변수 scope 범위 지정
- target: setter 메서드를 호출할 자바 객체 지정
- property: 값을 변경할 자바 객체의 멤버변수 이름
<c:out>: 이 태그는 jsp 페이지에서 데이터를 출력합니다.
- value: 출력 값을 지정합니다. (EL식이나 문자열)
- escapeXml: 이스케이프 문자 여부를 true/false로 지정합니다. 기본값은 true이며 >가 > 같이 이스케이프 문자로 변환됩니다.
- default: value 속성에 값이 지정되지 않은 경우 default 출력 값을 지정합니다.
<c:remove>: 이 태그는 <c:set>태그로 정의한 변수를 삭제합니다.
- var: 삭제하고자하는 변수의 이름
- scope: 해당하는 scope 영역 내에서만 변수를 삭제합니다.
<c:catch>: 이 태그는 jsp페이지 내에서 발생한 오류를 처리합니다.
- var: <c:catch> 와 </c:catch> 사이 Exception 객체를 지정합니다.
WebContent 폴더 밑에 jstl 폴더를 새로 생성한 뒤 ex1.jsp 파일을 생성합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="net.aacii.beans.BookBean" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="name" value="홍길동" />
<c:out value="${name}" /> <br>
<c:remove var="name" />
<c:out value="${name }" /><br> <!-- 출력 안됨 -->
<%
BookBean book = new BookBean();
book.setTitle("책이름1");
book.setAuthor("저자1");
book.setPublisher("출판사1");
request.setAttribute("bookOne", book);
%>
<c:set var="title" value="${bookOne.title}" />
<c:out value="${title}" /><br>
<c:set var="author" value="<%=book.getAuthor()%>" />
<c:out value="${author}" /><br>
<hr>
<c:set var="name">김길동</c:set>
<c:out value="${name}" /><br>
<%
BookBean book2 = new BookBean();
book2.setTitle("책이름2");
book2.setAuthor("저자2");
book2.setPublisher("출판사2");
request.setAttribute("bookTwo", book2);
%>
<c:set var="title">${bookTwo.title}</c:set>
<c:out value="${title}" /><br>
<c:set var="author"><%=book2.getAuthor() %></c:set>
<c:out value="${author}" /><br>
BookBean.java는 이전에 net.aacii.beans 패키지에 작성했던 것을 재활용 합니다.
package net.aacii.beans;
public class BookBean {
private String title;
private String author;
private String publisher;
public BookBean() {
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPublisher() {
return publisher;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
}
/jstl 폴더에 ex2.jsp 파일을 작성합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="net.aacii.beans.BookBean" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<% BookBean book = new BookBean(); %>
<c:set target="<%=book %>" property="title" value="책제목3" />
<%=book.getTitle() %><br>
<c:set var="b" value="<%=book %>" />
<c:set target="${b }" property="author" value="저자3" />
${b.author}
/jstl 폴더에 ex3.jsp를 작성합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String str = request.getParameter("msg");
%>
<c:catch var="e">
<%
if(str.equals("add")){
out.print(str);
}
%>
</c:catch>
<c:out value="${e}" />
Core 조건 액션
<c: if>: 이 태그는 if문을 처리합니다.
- test: 조건식을 지정합니다.
- var: test 속성의 결과를 저장하는 변수 이름을 지정합니다.
- scope: 변수의 scope 범위를 지정합니다.
<c:choose>: 이 태그는 여러개의 조건식을 처리할 때 사용합니다. 하위태그로 <c:when> <c:otherwise> 를 사용합니다.
<c:when>: 이 태그는 if~else if나 switch~case 문을 처리합니다.
<c:otherwise>: 이 태그는 switch의 default나 if문의 else 역할을 합니다.
/jstl 폴더에 ex4.jsp 파일을 작성합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="num" value="${91}" />
점수 <c:out value="${num}" /> 은
<c:if test="${num > 60 }">
합격입니다.
</c:if>
<br>
점수 <c:out value="${num}" /> 은
<c:choose>
<c:when test="${num>=90}">A학점 입니다.</c:when>
<c:when test="${num>=80}">B학점 입니다.</c:when>
<c:when test="${num>=70}">C학점 입니다.</c:when>
<c:when test="${num>=60}">D학점 입니다.</c:when>
<c:otherwise>F학점 입니다.</c:otherwise>
</c:choose>
Core 반복 액션
<c:forEach>: 지정된 횟수만큼 반복 실행하는 태그입니다.
- items: 반복 실행할 데이터가 저장된 컬랙션 혹은 배열을 지정합니다. 요소의 갯수만큼 반복 실행합니다.
- var: items에 지정된 요소 수만큼 반복 될 때 각 요소가 저장되는 변수 이름을 지정합니다.
- begin: 반복 실행 횟수의 시작값을 지정합니다.
- end: 반복 실행 횟수의 종료 값을 지정합니다.
- step: 반복 실행 횟수의 증감값을 지정합니다.
<c:forTokens>: 문자열을 특정 문자(구분자)로 구분하여 분리한 후 분리된 문자열 만큼 반복 수행합니다.
- itmes: 분리하고자하는 문자열을 지정합니다.
- delims: 구분자 기호를 지정합니다.
/jstl 폴더에 ex5.jsp를 작성합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="net.aacii.beans.BookBean" %>
<%@ page import="java.util.ArrayList" %>
<%
ArrayList<BookBean> bookList = new ArrayList<BookBean>();
BookBean tempBean = new BookBean();
tempBean.setTitle("책제목1");
tempBean.setAuthor("저자1");
tempBean.setPublisher("출판사1");
bookList.add(tempBean);
BookBean tempBean1 = new BookBean();
tempBean1.setTitle("책제목2");
tempBean1.setAuthor("저자2");
tempBean1.setPublisher("출판사2");
bookList.add(tempBean1);
String[] bookCode = {"소설","역사","인문","정치","미술","종교","여행","과학","만화","건강"};
%>
<c:set var="list" value="<%=bookList%>" />
<c:forEach items="${list}" var="item">
${item.title} / ${item.author} / ${item.publisher}<br>
</c:forEach>
<hr>
<c:set var="code" value="<%=bookCode%>" />
<c:forEach var="item" items="${code}">
<c:out value="${itme}" />
</c:forEach>
<hr>
<c:forTokens items="소설,역사,인문,정치,미술,종교,여행,과학,만화,건강" delims="," var="token">
${token}
</c:forTokens>
<hr>
<c:forEach var="k" begin="2" end="10" step="2">
${k}
</c:forEach>
<hr>
<c:forEach var="i" begin="2" end="9">
<c:forEach var="j" begin="1" end="9">
${i} * ${j} = ${i*j} <br>
</c:forEach>
<hr>
</c:forEach>
Core URL 액션
<c:import>: 특정 페이지 처리 결과를 현재 페이지에 import 하거나 변수에 저장하는 태그입니다.
- url: 현재 페이지에 import할 페이지의 URL을 지정합니다.
- var: url 속성에 지정한 페이지의 결과를 저장할 변수를 지정합니다.
<c:url>: URL 정보를 생성해주는 태그입니다.
- value: URL 정보를 지정합니다.
- var: URL 정보를 저장할 변수를 지정합니다.
<c:param>: 다른 페이지와 관련된 작업을 할 때 parameter를 절달하는 태그입니다.
- name: 변수의 이름을 지정합니다.
- value: 변수에 저장되는 값을 지정합니다.
<c:redirect>: 현재 실행중인 페이지에서 다른 페이지로 이동할 때 사용하는 태그입니다.
- url: 이동할 페이지의 경로를 지정합니다.
/jstl 경로에 ex6.jsp 파일을 작성합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:import url="ex5.jsp" var="url" />
--------------------------------------- import 시작
<p>${url}
--------------------------------------- import 끝
/jstl 폴더에 ex7.jsp 를 작성합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:url value="ex8.jsp" var="page">
<c:param name="id" value="guest" />
<c:param name="pwd" value = "1234" />
</c:url>
<c:redirect url="${page}" />
/jstl 폴더에 ex8.jsp를 작성합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<h3>ex8.jsp</h3>
${param.id} / ${param.pwd}
ex7.jsp를 실행시키면 ex8.jsp로 redirect 되는 것을 확인할 수 있습니다.
'DEV&OPS > Java' 카테고리의 다른 글
JSTL SQL (0) | 2022.07.20 |
---|---|
JSTL Formatting (0) | 2022.07.20 |
태그 기반 커스텀 태그 (0) | 2022.07.06 |
클래스 기반 커스텀 태그 JSP 2.1 (0) | 2022.07.06 |
클래스 기반 커스텀 태그 JSP 1.2 (0) | 2022.07.05 |