위로 아래

개요

  1. JSP에서 HTML 태그를 중심으로 하되 <% %> 사이에 Java 코드를 넣으면서 구현
  2. 디자이너들이 Java 코드를 다루기 어려워해서 유지보수와 협업이 나쁨
  3. JSP2.0에서부터 JSP 페이지 내에 Java 코드를 빼는 방향으로 발전
  4. 표현언어 EL(Expression Language)와 JSTL(JSP Standard Tag Library) 두 가지 방법 발전
  5. EL은 액션태그와 함께 사용하며, 반복문 등은 여전히 Java 코드를 사용함
  6. JSTL은 반복문도 사용 가능. 기능을 미리 구현해놓은 라이브러리.

 

 


표현언어 EL

EL(Expression Language)

 

//기본형 
${표현식}

// el 표기법으로 출력
${requestScope.RequestAttribute}


// 스크립틀릿으로 출력
<%
// request라는 jsp 내장 객체를 사용해서 객체를 저장
request.setAttribute("RequestAttribute", "request 내장객체");
%>
  1. page 디렉티브(지시자) 태그에서 isELIgnored = false로 설정해야 한다.
  2. $를 사용하지만 <script></script> 사이에 있지 않으니 자바스크립트 코드가 아니다. EL 표기법이다.

 

내장객체 종류

  1. scope
    1. pageScope : JSP의 page와 같은 기능. page 영역에 바인딩된 객체를 참조
    2. requestScope : JSP의 request와 같은 기능. request에 바인딩된 객체를 참조
    3. sessionScope : JSP의 session과 같은 기능. session에 바인딩된 객체를 참조
    4. applicationScope : JSp의 application과 같은 기능. application에 바인딩된 객체를 참조
  2. 요청 매개변수
    1. param : request.getParameter() 메소드와 같은 기능. 한 개의 값을 전달하는 요청 매개변수를 처리
    2. paramValues : request.getParameterValues() 메소드와 같은 기능. 여러 개의 값을 전달하는 요청 매개변수를 처리
  3. 그 외
    1. header : request.getHeader() 메소드와 같은 기능. 요청 헤더 이름의 정보를 단일 값으로 반환
    2. headerValues : request.getHeader() 메소드와 같은 기능. 요청 헤더 이름의 정보를 배열로 반환
    3. Cookies : 쿠키 이름의 값을 반환
    4. pageContext : pageContext 객체를 참조
    5. 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"%>
  1. 자바 서버 페이지 표준 태그 라이브러리
  2. 데이터베이스로의 CRUD에 용이
  3. prefix : 회사마다 정해진 태그 타입을 따르는 것. 

 

 

설치법

  1. maven에서 jstl.jar 파일 다운
  2. webapp -> WEB-INF -> lib 폴더 안에 붙여넣기
  3. 지시어(디렉티브) 입력

 

 

 


core 태그 라이브러리

변수

// 변수 선언 
<c:set var="변수이름" value="변수값" scope="page>

// 변수 사용
${변수이름}

// 변수 삭제
<c:remover var="변수이름">

 

  1. <c:set var="변수이름" value="변수값" scope="page"> : JSP 페이지에서 변수를 지정
  2. <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
  1. <c:choose> : switch문을 사용. 
  2. 조건식1이 참이면 본문 내용 1 실행.
  3. 조건식1이 거짓이면 조건식2로 넘어감
  4. 조건식이 모두 거짓이면 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에 지정된 값이 없을 때에는 기본값을 출력.

 

 

그 외

  1. <c:forTokens> : 구분자로 분리된 각각의 토큰을 처리할 때 사용
  2. <c:import> : URL을 이용해 다른 자원을 JSP 페이지에 추가
  3. <c:redirect> : response.sendRedirect() 기능을 수행
  4. <c:url> : 요청 매개변수로부터 URL 생성
  5. <c:catch> : 예외 처리에 사용
  6. <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>
  1. value : 출력될 숫자를 지정
  2. type : 출력된 타입을 지정.
    1. percent : %
    2. number : 숫자
    3. currency : 통화 형식
  3. dateStyle : 날짜의 출력 형식
  4. groupingUsed : true하면 콤마로 숫자 구분. (기본값 true)
  5. currencyCode : 통화 코드를 지정 한국 원화는 KRW
  6. currentSimbol : 통화 표시할 떄 사용할 기호 표시
  7. var : <formatNumber>태그 결과를 저장할 변수 이름 지정 
  8. scope : 변수의 접근 범위를 지정
  9. pattern : 숫자가 출력될 양식을 지정

 

날짜

<fmt:formatDate>
  1. value : 포맷될 날짜를 지정
  2. type : 포매팅할 타입을 지정
    1. date : 날짜만
    2. time : 시간만
    3. both : 둘다 
  3. dateStyle : 날짜의 출력 형식 지정
  4. timeStyle : 시간 출력 형식 지정
  5. pattern : 직접 출력 형식 지정
  6. 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