[JSP] JSTL

:)·2024년 4월 9일

개발

목록 보기
14/19
post-thumbnail

JSTL

  • (Java(S)erver(P)age Standard Tag Library)은 표준 태그 라이브러리. JSP의 기본 태그가 아닌 JSP 확장 태그

    • apache tomcat 웹사이트에서 jar 파일 다운로드 -> 라이브러리 추가
    • 기존에 사용하던 jsp의 스크립트릿, 출력식 기호 대체 → 자바와 html 태그를 분리시, jsp 파일을 태그형식으로만 작성하기 위해
  • 요청으로 전달받은 데이터(파라미터)를 서버에서 받을때는 request 객체를 사용(메소드: getParameter())

    • 브라우저에 입력하는 것은 모두 메소드 (get) 요청 : 메소드(get, post)
      • 검사-네트워크 - ctrl+r 에서 눌러보면 요청 메서드 상태를 볼 수 있음
        • 응답 response 요청 request - 요청 받기: java / 응답 하기: jsp (화면만 만들어주기)
  • 사이에 들어가는 글이 없으면 <c:out value="" />처럼 한문장안에서 끝낼 수 있음

  • 태그 라이브러리는 맨 위 지시자에서 정의하고 사용. EL 기호는 애트리뷰트 값만 출력 가능

  • 코드

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

태그

  • c: core 태그 : 값 저장과 출력, 실행 제어
    1. if문 : <c:if test=""> 실행코드 </c:if>
    2. if - else문: <c:choose>
      <c: when test=""> 실행코드 /여러 경우시 when을 추가 작성
      <c:otherwise> 실행코드
    3. foreach: <c:forEach var="i" begin="1" end="10" varStatus="status" step="2">
    4. 자바객체 활용: <%CustomerVo vo= new CustomerVo(value …);
      pageContext.setAttribute("customer",vo); %>
    • 코드
      1. pageContext 영역에 '애트리뷰트' 이름 age, 값 23을 저장
      <c:set var="age" value="13"/>
      
      2. 저장된 애트리뷰트 값 출력
      age: <c:out value="${age }"></c:out></h5>  -> age는 애트리뷰트 이름
      name: <c:out value="${name }"></c:out>     ->name은 자바변수. 출력 안됨
      
      3. 자바의 if 태그 대신 사용
      <h5>c:if테스트</h5>
      <!-- 조건식을 test 속성에 작성. EL 기호 안에 사용 -->
      <c:if test ="${age<20 }">
      <div style ="color:green">청소년입니다. </div>
      </c:if>
      <c:if test ="${age>=20 }">
      <div style ="color:red">성인입니다. </div>
      </c:if>
      
      4. if~else 형식
      <c:set var="age" value="23"/>  <!-- 애트리뷰트 age값 변경 -->
      <c:choose>
      <c:when test="${age <20 }">
      <div style ="color:green">청소년입니다. </div>
      </c:when>
      <c:otherwise>
      <div style ="color:red">성인입니다. </div>
      </c:otherwise>
      </c:choose>
      
      5. for문
      <c:forEach var="i" begin="1" end="10" varStatus="status" step="2">
      <div>
      <c:out value="${i }"/>
      <c:out value="${i*11}"/>
      <!-- varstatus 속성은 for 반복 상태를 알 수 있는 값을 제공 -->
      <c:out value="${status.count}"/>
      <c:out value="${status.step}"/>
      </div>
      </c:forEach>
      
      6. 자바 객체 활용하기
      <%CustomerVo vo= new CustomerVo("momo","강모모"[,"momo22@daum.net](mailto:,%22momo22@daum.net)",29,null);
      //만들어진 객체를 pageContext scope의 애트리뷰트로 저장
      pageContext.setAttribute("customer",vo); %>
      <c:out value="${customer }"/>
      <ul>
      
      <li>${customer.customId}</li>
      <li>${[customer.name](http://customer.name/)}</li>
      <li>${customer.email}</li>
      <li>${customer.age}</li>
      </ul>
      
      7. 자바 객체의 컬렉션(list) 활용하기 -> jdbc로 sql 조회한 결과 List인 경우 활용 가능
      List<CustomerVo> list = List.of(new CustomerVo("momo12","강모모","momo12@daum.net",25,null),
      											new CustomerVo("momo13","강모모","momo13@daum.net",26,null);
      											
      pageContext.setAttribute("list",list);%>
      
      		<!-- 컬렉션 list에서 값을 하나씩 가져와 애트리뷰트 이름 vo에 저장 -->
      		<c:forEach items="${list }" var="vo" varStatus="status">
      			<c:out value="${status.index }"/>, <c:out value="${vo }"/>
      			<!--varStatus 속성 index는 지금처럼 items 로 컬렉션 다룰 때 사용  -->
      			<!--vo에 저장된 객체 속성을 각각 출력하기  -->
      			<ul>
      				<li><c:out value="${vo.customId }"/></li>
      				<li><c:out value="${vo.name }"/></li>
      				<li><c:out value="${vo.email }"/></li>
      				<li><c:out value="${vo.age }"/></li>
      			</ul>
      		</c:forEach>
  • fmt: format . 출력 포맷 설정 (숫자,날짜 출력형식 / Locale 설정)
    • <fmt:formatNumber value="9999999"/> → 서식(기본: 3자리마다 ,) 있는 출력저장 동작 , value에는 값을 직접 또는 el
    • <fmt:parseNumber var="test" value="8888888"/> → fmt:parseNumber는 변수에 저장만 (출력별개)
    • <fmt:setLocale value="ko_kr"/> → 기준 국가 지정
    • <fmt:formatDate value="${now }" /> →날짜 출력
    • 코드
      <!-- formatNumber는 서식(기본: 3자리마다 ,) 있는 출력과 저장 동작 , value에는 값을 직접 또는 el -->
      	   <fmt:formatNumber  value="9999999"/> <br>  
      	   <!-- fmt:parseNumber는 변수에 저장만 (출력별개).  -->
      	   <fmt:parseNumber var="test"  value="8888888"/> 
      	   test :<c:out value=" ${test }"/><br>  <!-- 서식 없는 출력 -->
      	   <!-- 현재 locale : ko_kr 표기는 언어_국가 형식 :화폐단위 -₩   ->화폐, 날짜는 locale에 영향을 받음-->
      	   <fmt:formatNumber  value="9999999"  type="currency"/><br> 
      	   <!--  locale 변경 : en_us :화폐단위 - $ -->
      	   <fmt:setLocale value="en_us"/>  
      	   <fmt:formatNumber  value="9999999"  type="currency"/><br> 
      	   <!-- type: 화폐단위 , 퍼센트(percent) 등 표시 , 
      	        pattern : 직접 소수점 이하, 전체 자리수 지정-->
      	   <hr>
      	   <!-- 789,789.123 기본패턴:소수점 최대 3자리 -->
      	   <fmt:formatNumber value="789789.12345" /><br>  
      	    <!-- 789,789.12 -->
      	   <fmt:formatNumber value="789789.12345" pattern="#,###.##"/><br> 
      	   <fmt:formatNumber value="789789.12345" pattern="#,###.#####"/><br> 
      	   <fmt:formatNumber value="789789.123" pattern="0000,000,000.00000"/><br>
      	   <!-- 자릿수를 맞추기 위해 빈자리에 0을 넣음
      	   		fmt:formatXXX: 출력과 변수에 저장
      			fmt:parseXXX:  저장만 함 	   	  -->
      			
      	   <hr>
      	   <!-- 날짜 패턴에 대소문자 유의 : 일 dd, 월 MM , 분 mm , 시(12) hh , 시(24) HH -->
      	   <!-- Jan 20, 2023 *formatDate 도 var 로 변수 저장 -->
      		<!--now 애트리뷰트 값 : 테스트 위해 자바객체로 생성 -->	    
      	   <fmt:setLocale value="ko_kr"/> 
      	   <c:set var="now" value="<%= new java.util.Date()%>"/>
      	    현재시간과 날짜 : ${datetime1 }<br>  <!-- 출력결과 :  Thu Nov 03 20:14:00 KST 2022 -->
      	   <fmt:formatDate value="${now }" /><br>  
      	   <!-- parseDate의 pattern은 value 값의 형식을 알려줍니다. pattern이 없으면 날짜 타입으로 변환을 못함..(문자열을 날짜 타입으로 캐스팅)-->
      	   <fmt:parseDate value="2022-11-03 20:14" var="datetime1" pattern="yyyy-MM-dd HH:mm"/> 
      	    지정된 시간과 날짜 : <c:out value="${datetime1 }"/>
      	    <hr>
      	   <fmt:formatDate value="${datetime1 }" type="date"/><br>  <!-- Jan 20, 2023 -->
      	   <fmt:formatDate value="${datetime1 }" type="time"/><br>  <!-- 10:35:29 AM -->
      	   <fmt:formatDate value="${datetime1 }" type="both"/><br>  <!-- Jan 20, 2023, 10:35:29 AM -->
      	   <hr>
      	   <fmt:formatDate value="${datetime1 }" pattern="yyyy-MM-dd HH:mm:ss"/><br> 
      	   <!-- 2022-11-03 20:14:00  시간이 24시 기준(HH)-->
      	   <fmt:formatDate value="${datetime1 }" pattern="yyyy-MM-dd a hh:mm:ss"/><br>
      	   <!-- 2022-11-03 PM 08:14:00   시간이 12시 기준(hh). a는 오전/오후 표시-->
  • fn : 함수.문자열 메소드를 함수형태로 사용 (자바의 문자열 메소드와 상당부분 일치)
    • core, fmt 라이브러리는 태그를 제공
    • fn 라이브러리는 함수를 사용할 수 있게 함
      • 문자열 메소드의 결과값이 태그 안에서 출력되도록 함
      • “${fn: 메소드()}”
    • 코드
      <ul>
      			<li><c:out value="${fn:length(msg)}"/></li>
      			<li><c:out value="${fn:indexOf(msg,'am')}"/></li>
      			<li><c:out value="${fn:toUpperCase(msg)}"/></li>
      			<li><c:out value="${fn:substring(msg,3,6)}"/></li>
      			<li><c:out value="${fn:contains(msg,'am')}"/></li>
      			<li><c:out value="${fn:contains(msg,'are')}"/></li>
      			<li><c:out value="${fn:replace(msg,'Twice','Viviz')}"/></li>
      			<c:set value="he                llo           !" var="temp"/>
      			<li><c:out value="${temp }"/>공백 하나만 출력되는 이유: html 문서에는 공백이 하나만 반영됨, 연속적으로 출력하고 싶은 경우 &nbsp;사용해야함 </li>
      			<li><c:out value="${fn:replace(temp,' ','&nbsp;')}"/></li>
      			<li>${fn:replace(temp,' ','&nbsp;')}</li>
      			<!-- 리턴이 발생하는 split은 c:set 으로 실행, 리턴받을 var 정의 -->
      			<c:set value="${fn:split(msg,' ')}" var="temps"/>
      			
      		</ul>
      		<h4>msgArr 배열 애트리뷰트값을 하나씩 출력</h4>
      		<ul>
      			<c:forEach items ="${msgArr }" var="arr" varStatus="status">
      				<li><c:out value="${arr }"/></li>
      			</c:forEach>
      	</ul>
  • EL : ${} 은 getAttribute로 값을 가져와서 출력 → <%= =>의 대체
    • 객체변수명.getXXX() getter 메소드 사용... -> EL은 알아서 getter 동작. 객체의 속성 이름 정확히 작성
  • nbsp
  • 태그사용=Markup Language
profile
:) GITHUB: https://github.com/YJ2123412

0개의 댓글