JSP -9

김정현·2024년 6월 17일
0

JSP

목록 보기
10/13
post-thumbnail

JSTL

core 라이브러리 : 제어구문, 반복문 등
fmt 라이브러리 : 형식화, 숫자 형식, 날짜 형식, 시간대, 다국어
functions 라이브러리 : 문자열 가공 등
sql 라이브러리

https://jakarta.ee/specifications/tags/3.0/tagdocs/

URI

코어(core) 라이브러리

uri="jakarta.tags.core"

 참고)
	javaee 9 ->  JSTL 1.2 
	uri="http://java.sun.com/jsp/jstl/core"
<%@ taglib prefix="c" uri="jakarta.tags.core" %>

1) <c:set>

:속성 정의

<c:set var="속성명" value="" />
${속성명}

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c"  uri="jakarta.tags.core" %>
<c:set var="num1" value="100" />
<c:set var="num2" value="200" />
${num1 + num2}

scope = "page|request|session|application"

-page : 기본값

2) <c:remove>

:속성값 제거

<c:remove var="속성명" />

※ scope가 존재하나 설정하지 않을경우 모든 범위의 속성을 제거

3) <c:if>

:조건문 (else가 없음)

<c:if test="${조건식}">
	//조건식이 참일때 출력 되는 부분
    </c:if>


<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="jakarta.tags.core" %>
<c:set var="num1" value="11" />
<c:if test="${num1 % 2 == 1}">
    홀수
</c:if>

else 필요할땐 부정 연산문으로 다시 한번 정의

4) <c:choose>

:다중 조건문 / 다중 선택문

<c:choose>
	<c:when test="${조건식1}">
    	//조건식 1이 참일때 출력
    </c:when>
    <c:when test="${조건식2}">
    	//조건식 1이 거짓, 조건식 2가 참일때 출력
    </c:when>
    ..
    
   	<c:otherwise>
    	//조건식이 모두 거짓일때
    </c:otherwise>
</c:choose>

예제)

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="jakarta.tags.core" %>
<c:choose>
    <c:when test="${param.age < 8}">
        유치원생
    </c:when>
    <c:when test="${param.age < 14}">
        초등학생
    </c:when>
    <c:when test="${param.age < 17}">
        중학생
    </c:when>
    <c:when test="${param.age < 20}">
        고등학생
    </c:when>
    <c:otherwise>
        성인
    </c:otherwise>
</c:choose>

5) <c:forEach>

-반복문
-횟수 (begin = 시작 숫자, end = 종료 숫자, step = 증감단위 / 기본값1, var="카운트 변수")
-배열, 컬랙션(Collection - List, Set), Iterator, Enumeration (items="${배열,컬렉션 속성}" var="요소1개")
//향상된 for 문

  • 콤마(,) 문자열
  • <c:forEach>액션의 items 애트리뷰트를 이용해서 처리할 수 있는 데이터
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="jakarta.tags.core" %>
<c:forEach var="cnt" begin="1" end="10" step="1">
    <div>${cnt} 반복</div>
</c:forEach>


-콤마 문자열
나눠서 출력해줌

6) <c:forTokens>

- java.util.StringTokenizer 

var="문자" items="문자열..." delim="구분 패턴 문자"

7) <c:catch>

- 자바 코드 없이 태그 방식으로 예외 처리 
- var : 예외가 발생하면 생성될 예외객체 변수명
		- 예외가 없으면 null
  • try-catch 문과 비슷함.
    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ taglib prefix="c" uri="jakarta.tags.core" %>

    <c:catch var="e">
    <%
        String str = null;
        str.toUpperCase();
    %>
    </c:catch>

    <c:if test="${e !=null}">
<%--        에러 메세지 : ${e.getMessage()}--%>
        에러 메세지 : ${e.message}
    </c:if>

8) <c:redirect>

: 주소변경 -> 이동 (실제 이동, 상태:302)

  • ex02 -> ex03 으로 이동함
    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ taglib prefix="c" uri="jakarta.tags.core" %>
    <h1>ex02.jsp</h1>
    <c:redirect url="ex03.jsp" />

-location : ex03.jsp

참고)
HttpServletRequest
-sendRedirect(String location) 와 동일

  • <c:param name="이름" value="값" /> : 쿼리스트링 형태로 URL에 추가

->

http://localhost:3000/day05/exam06/ex03.jsp?key1=value1&key2=value2

쿼리스트링 형태로 추가됨

9) <c:import>

: 서버 쪽 자원 외에도 외부 자원도 버퍼에 추가 가능
-url: 버퍼에 추가할 자원 주소

    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ taglib prefix="c" uri="jakarta.tags.core" %>
    <h1>ex04.jsp - 상단</h1>

    <c:import url="inc.jsp" />

    <h1>ex04.jsp - 하단</h1>

참고)
<jsp:include ... />
: 서버쪽 자원만 버퍼에 추가 가능
: <jsp:param name="이름" value="값" /> : 요청 데이터 추가

어떤 값을 출력하는 태그의 경우 값을 EL식 속성으로 추가할 수 있는 속성 var
var="변수" : 변수에 출력 결과물이 담긴다. (import 외에도 가능)
  • 변수에 담김
<h1>ex04.jsp - 상단</h1>

<c:import var="html" url="inc.jsp" />
    ${html}

<h1>ex04.jsp - 하단</h1>
  • <c:param name="이름" value="값" /> : 요청 데이터에 추가

inc.jsp 에 param 데이터가 넘어감

   <c:import url="inc.jsp">
        <c:param name="num1" value="100" />
        <c:param name="num2" value="200" />
    </c:import>

//inc.jsp

<h1>inc.jsp</h1>
    num1: ${param.num1}<br>
    num2: ${param.num2}<br>
    합계: ${param.num1 + param.num2}<br>

10) <c:url>

:contextPath를 URL에 자동 붙여주는 태그
-var : 주소 값을 담을 EL식 속성명
-<c:param name="이름" value="값" /> : 주소에 쿼리스트링이 추가 예) ?이름=값

    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ taglib prefix="c" uri="jakarta.tags.core" %>
    <c:url var="loginUrl" value="/member/login" />
    
    <a href="${loginUrl}" />">로그인</a>
    <a href="<c:url value="/member/join" />">회원가입</a>

    <form method="POST" action="${loginUrl}" />">
        이메일 : <input type="text" name="email"> <br>
        비밀번호 : <input type="password" name="password"> <br>
        <button type="submit">로그인</button>

    </form>

//로그인 버튼 클릭시

참고)

	HttpServletRequest
		String hetContextPath()

11) <c:out>

:Escape된 문자열로 출력
:Escape된 상태 : HTML 태그를 문자열로 변경해서 출력

<h1> 제목 </h1> -> lt;h1gt;제목lt;h1gt;
  • 태그를 문자열 자체로 출력
    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ taglib prefix="c" uri="jakarta.tags.core" %>
    <c:set var="html" value="<script>alert('알림!');</script>" />

<%--    ${html}--%>
    <c:out value="${html}" />
var 사용 불가
  • default : 기본값
    <c:out value="${html}" default="값 없음"/>

${html}이 존재하지 않을 경우 default 출력

  • escapeXml:
    true - 기본값(HTML -> 문자)
    false -> HTML로 인식
    <c:out value="<h1>제목</h1>" escapeXml="true" />

포매팅(fmt) 라이브러리

uri="jakarta.tags.fmt" // JSTL 3.0
prefix="fmt"


JSTL 1.2
uri="http://java.sun.com/jsp/jstl/fmt"

1) fmt:formatDate : 날짜 형식화

-Date 객체를 기준
-java.text.SimpleDateFormat
-type:
date(기본값) - 날짜만 표기
time - 시간만 표기
both - 날짜와 시간을 함께 표기

-dateStyle : full, long, medium, short
-timeStyle : full, long, medium, short
-pattern : SimpleDateFormat에 정의된 날짜, 시간 형식화 패턴

2) fmt:formatNumber : 숫자 형식화

-java.text.DecimalFormat ...
-groupingUsed : true(기본값)
false : ,로 숫자 3자리 마다 나누지 않는다.

-type : percent (소수점 표기 -> 퍼센트 표기) | currency (지역화에 맞는 통화 표기법)
-currencySymbol="기호"
-pattern
참고)
DecimalFormat
패턴 설정 유형

#,###.##### : <fmt:formatNumber value="${num}" pattern="#,###.#####" /> <br>
0,000.00000 : <fmt:formatNumber value="${num}" pattern="0,000.00000" /> <br>

3) fmt:setLocale

: 지역화 설정
-value : 언어코드(en, ko, ja, zn)
언어코드_국가코드(en_us, ko_kr, ja_jp ...)

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<c:set var="date" value="<%= new Date() %>" />

<h1>대한민국</h1>
<fmt:setLocale value="ko_KR" />
일시 : <fmt:formatDate value="${date}" type="both" dateStyle="full" timeStyle="full" /><br>
금액 : <fmt:formatNumber value="100000000" type="currency" /><br>

<h1>미국</h1>
<fmt:setLocale value="en_US" />
일시 : <fmt:formatDate value="${date}" type="both" dateStyle="full" timeStyle="full" /><br>
금액 : <fmt:formatNumber value="100000000" type="currency" /><br>

<h1>일본</h1>
<fmt:setLocale value="ja_JP" />
일시 : <fmt:formatDate value="${date}" type="both" dateStyle="full" timeStyle="full" /><br>
금액 : <fmt:formatNumber value="100000000" type="currency" /><br>

4) fmt:timeZone과 fmt:setTimeZone

-시간대
-value: Asia/Seoul

-fmt:setTimeZone: 태그가 적용된 후, 하위 태그에 반영
-fmt:timeZone: 여는 태그, 닫는 태그, 태그 안쪽에 내용이 반영

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="date" value="<%=new Date()%>" />
서울 : <fmt:formatDate value="${date}" type="both" /> <br>


<fmt:timeZone value="America/New_York">
뉴욕 : <fmt:formatDate value="${date}" type="both" /> <br>
</fmt:timeZone>


<fmt:setTimeZone value="Europe/London" />
런던 : <fmt:formatDate value="${date}" type="both" /> <br>

런던 쪽 태그는 아래로 쭉 해당 타임이 적용된다.

5) fmt:setBundle과 fmt:bundle

<fmt:message key="메세지키" /> 함께 사용
-메세지 관리, 문구 관리

-properties 파일 형태로 관리 / 클래스 패스에 위치
키=값
키=값

- properties 파일의 주석

 # 설명...

<fmt:bundle basename="messages.commons">
...

/fmt:bundle>

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:bundle basename="messages.commons">
    <form>
        <fmt:message key="EMAIL" />
        <input type="text" name="email"> <br>

        <fmt:message key="PASSWORD" />
        <input type="password" name="PASSWORD"> <br>

        <button type="submit">
            <fmt:message key="LOGIN" />
        </button>
    </form>
</fmt:bundle>

- <fmt:setBundle .../> : 태그 적용 시점 이후 모두 반영

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:setBundle basename="messages.commons" />
    <form>
        <fmt:message key="EMAIL" />
        <input type="text" name="email"> <br>

        <fmt:message key="PASSWORD" />
        <input type="password" name="PASSWORD"> <br>

        <button type="submit">
            <fmt:message key="LOGIN" />
        </button>
    </form>

클래스 패스 : 클래스 파일을 인식할 수 있는 경로
src/main/java
src/main/resources : 메세지 파일(properties 파일)

webapp/WEB-INF/lib, webapp/WEB-INF/classes ...

-메세지 치환 기능
-메세지 작성시 {0}...{1}...{2}

{순서}

<fmt:param>값</fmt:param>

-다국어 설정
파일명_언어코드.properties

언어 감지 순위
1. 요청 헤더 Accept-Language 헤더 정보 : Locale 객체
2.<fmt:setLocale /> 설정

<c:if test="${!empty param.lang}">
    <fmt:setLocale value="${param.lang}" />
</c:if>

<fmt:setBundle basename="messages.commons" />

<a href="?lang=ko">한국어</a>
<a href="?lang=en">English</a>

- <fmt:param>값</fmt:param>

6) fmt:requestEncoding

<fmt:requestEncoding value="UTF-8">
참고)
서블릿 4버전까지 적용
request.setCharacterEncoding("...");

  1. 함수(functions) 라이브러리
    uri="jakarta.tags.functions"
    prefix="fn"

-문자열 가공 편의 함수
-EL식 내에서 적용 가능 ${fn:concat(..)}

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="jakarta.tags.core" %>
<%@ taglib prefix="fn" uri="jakarta.tags.functions" %>
<c:set var="str" value="Apple,Melon,Orange,Grape" />
<c:set var="fruits" value="${fn:split(str, ',')}" />
str : ${str}<br>
fruits : ${fruits}<br>

<c:forEach var="fruit" items="${fruits}">
    ${fruit} <br>
</c:forEach>


https://github.com/yonggyo1125/curriculum300H/tree/main/5.JSP2%20%26%20JSP%20%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8(60%EC%8B%9C%EA%B0%84)/2%EC%9D%BC%EC%B0%A8(3h)%20-%20JSTL

0개의 댓글