위로
아래
개요
- JSP에서 HTML 태그를 중심으로 하되 <% %> 사이에 Java 코드를 넣으면서 구현
- 디자이너들이 Java 코드를 다루기 어려워해서 유지보수와 협업이 나쁨
- JSP2.0에서부터 JSP 페이지 내에 Java 코드를 빼는 방향으로 발전
- 표현언어 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:remove> : 지정된 변수를 제거
<c:if>
<c:if test="${조건식}" var="(결과를 저장할)참조변수" scope="page"/>
조건문 사용
<c:choose>
<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)
반복문 사용
<c:out>
<c:out value="출력값" default="기본값" />
<!-- 예시 -->
<c:out value="${param.id}"/>
value에 지정된 값이 없을 때에는 기본값을 출력.
그 외
- <c:forTokens> : 구분자로 분리된 각각의 토큰을 처리할 때 사용
- <c:import> : URL을 이용해 다른 자원을 JSP 페이지에 추가
- <c:redirect> : response.sendRedirect() 기능을 수행
- <c:url> : 요청 매개변수로부터 URL 생성
- <c:catch> : 예외 처리에 사용
- <c:out> : JspWriter에 내용을 처리한 후 출력
예시
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:forEach var="k" begin="1" end="10" step="1">
<c:out value="${k}"/><br>
</c:forEach>
</body>
</html>
functions 태그 라이브러리 (문자열)
// 문자열 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 language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ 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>
<c:set var="title1" value="hello world!"/>
<c:set var="title2" value="쇼핑몰 중심 JSP입니다!"/>
<c:set var="str1" value="중심"/>
<h2>여러 가지 문자열 함수 기능</h2>
title1 = "hello world"<br>
title2 = "쇼핑몰 중심 JSP입니다.!"<br>
str1 = "중심"<br><br>
fn:lenght(title1) = ${fn:length(title1)}<br>
fn:toUpperCase(title1) = ${fn:toUpperCase(title1)}<br>
fn:toLowerCase(title1) = ${fn:toLowerCase(title1)}<br><br>
fn:substing(title1, 3, 6) = ${fn:substring(title1,3,6)}<br>
fn:trim(title1) = ${fn:trim(title1)}<br>
fn:replace(title1, " ","/") = ${fn:replace(title1," ","/")}<br><br>
fn:indexOf(title2,str1) = ${fn:indexOf(title2,str1)}<br>
fn:contains(title1,str1) = ${fn:contains(title1,str1)}<br>
fn:contains(title2,str1) = ${fn:contains(title2,str1)}<br>
</body>
</html>
fmt 태그 라이브러리
숫자
<fmt:formatNumber>
- value : 출력될 숫자를 지정
- type : 출력된 타입을 지정.
- percent : %
- number : 숫자
- currency : 통화 형식
- dateStyle : 날짜의 출력 형식
- groupingUsed : true하면 콤마로 숫자 구분. (기본값 true)
- currencyCode : 통화 코드를 지정 한국 원화는 KRW
- currentSimbol : 통화 표시할 떄 사용할 기호 표시
- var : <formatNumber>태그 결과를 저장할 변수 이름 지정
- scope : 변수의 접근 범위를 지정
- pattern : 숫자가 출력될 양식을 지정
날짜
<fmt:formatDate>
- value : 포맷될 날짜를 지정
- type : 포매팅할 타입을 지정
- date : 날짜만
- time : 시간만
- both : 둘다
- dateStyle : 날짜의 출력 형식 지정
- timeStyle : 시간 출력 형식 지정
- pattern : 직접 출력 형식 지정
- timezone : 특정 나라 시간대로 시간을 설정
숫자, 날짜 예시
더보기
<%@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> // 요청 매개변수의 문자 인코딩을 지정
국제화 예시
더보기
<!-- message1.jsp -->
<%@ 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>
<fmt:setLocale value="ko_KR"/>
<%-- <fmt:setLocale value="en_US"/> --%>
<h1>
회원정보<br><br>
<fmt:bundle basename="ch14.resource.member">
이름 : <fmt:message key="mem.name"/><br>
주소 : <fmt:message key="mem.address"/><br>
직업 : <fmt:message key="mem.job"/><br>
</fmt:bundle>
</h1>
</body>
</html>
// member.properties
mem.name = \uD64D\uAE38\uB3D9
mem.address = \uC11C\uC6B8\uC2DC \uAC15\uB0A8\uAD6C
mem.job = \uD68C\uACC4\uC0AC
// member_ko.properties
mem.name = \uD64D\uAE38\uB3D9
mem.address = \uC11C\uC6B8\uC2DC \uAC15\uB0A8\uAD6C
mem.job = \uD68C\uACC4\uC0AC
// member_en.properties
mem.name = hong kill-dong
mem.address = kang-name gu, seoul
mem.job = account