표현언어 EL(Expression Language)와 JSTL(JSP Standard Tag Library) 두 가지 방법 발전
EL은 액션태그와 함께 사용하며, 반복문 등은 여전히 Java 코드를 사용함
JSTL은 반복문도 사용 가능. 기능을 미리 구현해놓은 라이브러리.
표현언어 EL
EL(Expression Language)
//기본형
${표현식}
// el 표기법으로 출력
${requestScope.RequestAttribute}
// 스크립틀릿으로 출력
<%
// request라는 jsp 내장 객체를 사용해서 객체를 저장
request.setAttribute("RequestAttribute", "request 내장객체");
%>
page 디렉티브(지시자) 태그에서 isELIgnored = false로 설정해야 한다.
$를 사용하지만 <script></script> 사이에 있지 않으니 자바스크립트 코드가 아니다. EL 표기법이다.
내장객체 종류
scope
pageScope : JSP의 page와 같은 기능. page 영역에 바인딩된 객체를 참조
requestScope : JSP의 request와 같은 기능. request에 바인딩된 객체를 참조
sessionScope : JSP의 session과 같은 기능. session에 바인딩된 객체를 참조
applicationScope : JSp의 application과 같은 기능. application에 바인딩된 객체를 참조
요청 매개변수
param : request.getParameter() 메소드와 같은 기능. 한 개의 값을 전달하는 요청 매개변수를 처리
paramValues : request.getParameterValues() 메소드와 같은 기능. 여러 개의 값을 전달하는 요청 매개변수를 처리
그 외
header : request.getHeader() 메소드와 같은 기능. 요청 헤더 이름의 정보를 단일 값으로 반환
headerValues : request.getHeader() 메소드와 같은 기능. 요청 헤더 이름의 정보를 배열로 반환
Cookies : 쿠키 이름의 값을 반환
pageContext : pageContext 객체를 참조
initParam : 컨텍스트의 초기화 매개변수 이름 값을 반환.
JSTL
JSTL(Java Pages Standard Tag Library)
// 코어 : 변수 지원, 흐름 제어, 반복문 처리, URL 처리
<%@ taglib prefix="c" uri ="http://java.sun.com/jsp/jstl/core"%>
// 함수 : 컬렉션 처리, 문자열 처리
<%@ taglib prefix="fn" uri ="http://java.sun.com/jsp/jstl/functions"%>
// 국제화 : 지역, 메시지 형식, 숫자 및 날짜 형식
<%@ taglib prefix="fmt" uri ="http://java.sun.com/jsp/jstl/fmt"%>
// XML : XML 코어, 흐름 제어, XML 변환
<%@ taglib prefix="x" uri ="http://java.sun.com/jsp/jstl/xml"%>
// 데이터베이스 : SQL
<%@ taglib prefix="sql" uri ="http://java.sun.com/jsp/jstl/sql"%>
자바 서버 페이지 표준 태그 라이브러리
데이터베이스로의 CRUD에 용이
prefix : 회사마다 정해진 태그 타입을 따르는 것.
설치법
maven에서 jstl.jar 파일 다운
webapp -> WEB-INF -> lib 폴더 안에 붙여넣기
지시어(디렉티브) 입력
core 태그 라이브러리
변수
// 변수 선언
<c:set var="변수이름" value="변수값" scope="page>
// 변수 사용
${변수이름}
// 변수 삭제
<c:remover var="변수이름">
<c:set var="변수이름" value="변수값" scope="page"> : JSP 페이지에서 변수를 지정
<c:choose>
<c:when test = "조건식1">본문 내용1</c:when>
<c:when test = "조건식2">본문 내용2</c:when>
...
<c:otherwise>본문내용 n</c.otherwise>
</c:chosse
<c:choose> : switch문을 사용.
조건식1이 참이면 본문 내용 1 실행.
조건식1이 거짓이면 조건식2로 넘어감
조건식이 모두 거짓이면 otherwise로 넘어감
<c:forEach>
<c:forEach var="반복할 변수이름" items="반복할 객체 이름"
begin="시작값" end="마지막값" step="증가값" varStatus="반복상태변수이름">
<!-- varStatus 속성들 -->
index : items에서 정의한 항목을 가리키는 index 번호. 0부터 시작 (int)
count : 몇 번째 반복인지 나타냄. 1부터 시작 (int)
first : 첫 번쨰 반복인지 확인 (boolean)
last : 마지막 반복인지 확인 (boolean)
// 문자열 A에 문자열 B가 포함되어 있는지 확인 (boolean)
fn:contains(A,B)
// 문자열 A의 끝이 B로 끝나는지 확인 (boolean)
fn:endWith(A,B)
// 문자열 A에서 B가 처음으로 위치하는 인덱스를 반환 (int)
fn:indexOd(A,B)
// 문자열 A의 길이를 반환 (int)
fn:length(A)
// 문자열 A에서 B까지 해당되는 문자를 찾아 C로 변환 (String)
fn:replace(A,B,C)
// A를 모두 소문자로 변환 (String)
fn:toLowerCase(A)
// A를 모두 대문자로 변환 (String)
fn:toUpperCase(A)
// A를 인덱스 번호 3에서 2개의 문자를 반환 (String)
fn:substring(A, 3, 2)
// A를 띄어쓰기로 나누어 배열로 반환 (String[])
fn:split(A," ")
//문자열 A에서 앞뒤 공백을 제거 (String)
fn:trim(A)
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<% request.setCharacterEncoding("UTF-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>fmt의 number 태그를 이용한 숫자 포맷팅 예제</h2>
<c:set var="price" value="1000000"/>
<fmt:formatNumber value="${price}" type="number" var="priceNumber"/><br>
통화로 표현 시 :
<fmt:formatNumber value="${price}" type="currency" groupingUsed="true" /><br>
퍼센트로 표현 시 :
<fmt:formatNumber value="${price}" type="percent" groupingUsed="false"/><br>
일반 숫자로 표현 시 :
${priceNumber}<br>
<h2>formatDate 예제</h2>
<c:set var="now" value="<%=new Date()%>" />
<fmt:formatDate value="${now }" type="date" dateStyle="full" /><br>
<fmt:formatDate value="${now }" type="date" dateStyle="short" /><br>
<fmt:formatDate value="${now }" type="time" /><br>
<fmt:formatDate value="${now }" type="both" dateStyle="full" timeStyle="full" /><br>
<fmt:formatDate value="${now }" pattern="YYYY-MM-dd :hh:mm:ss" /><br>
<br><br>
한국 현재 시간 :
<fmt:formatDate value="${now }" type="both" dateStyle="full" timeStyle="full"/><br><br>
<fmt:timeZone value="America/New York">
뉴욕 현재 시간:
<fmt:formatDate value="${now }" type="both" dateStyle="full" timeStyle="full"/><br>
</fmt:timeZone>
</body>
</html>
언어
<fmt:setLocale> // 언어 지정
<fmt:message> // 지정한 언어에 해당하는 언어를 표시
<fmt:setBundle> // 사용할 번들을 지정
<fmt:setParam> // 전달할 매개변수를 지정
<fmt:requestEncoding> // 요청 매개변수의 문자 인코딩을 지정