Jam's story

[JSP] JSTL 본문

JSP

[JSP] JSTL

애플쩀 2022. 6. 23. 12:06

JSTL 이란 ? JSP Standard Tag Library

  1. 개발자가 필요에 의해서 태그를 만들어서 사용할 수 있다.
  2. 커스텀 태그 중에 많이 사용된 것을 모아서 JSTL
  3. WEB-INF>lib>jstl-1.2.jar
  4. JSTL 기능
    • 변수지원 - c:set c:remove
    • 흐름제어 - c:forEach c:if c:choose
    • URL 처리 - c:url c:redirect
    • 출력태그 - c:out
    • 데이터베이스 - sql:
    • XML 태그 - xml:
    • 국제화
      • 지역
      • 메시지 - fmt:
      • 숫자, 날짜형식
    • 함수 - fn:

이것을 꼭 추가해야한다. 

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

window-preferences 

템플릿수정 

 

jstl로 sql 이용하기 - 이 방법 잘 안쓴다 .

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<link rel="shortcut icon" type="image/x-icon" href="../images/SiSt.ico">
<title>2022. 6. 23.-오전 9:33:51</title>
</head>
<body>
<sql:query var="rs" dataSource="jdbc/myoracle">
SELECT deptno, dname, loc 
from dept
</sql:query>
<c:forEach items="${rs.rows}" var="dto">
<li>${dto.detpno }-${dto.loc }</li>
</c:forEach>
<h3></h3>
</body>
</html>

 

 

변수선언 <c:set> 과 값 변경 

target => 대상의 property=>속성을 value=>로 바꾸겟다 .
target: 프로퍼티 값을 설정할 대상 객체 지정 자바빈, 맵, 표현식, el property: 설정할 프로퍼티의 이름 지정
<%@page import="days02.DeptDTO"%>
<%@ page 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">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<link rel="shortcut icon" type="image/x-icon" href="../images/SiSt.ico">
<title>2022. 6. 23.-오전 10:06:16</title>
</head>
<body>
<h3></h3>
<%
DeptDTO dto=new DeptDTO(10,"QC","SEOUL");
%>
<%-- <c:set var="dto2"  value="${dto}"></c:set> --%>
<c:set var="dto2"  value="<%=dto %>"></c:set>
deptno: ${dto2.deptno }<br>
dname:${dto2.dname }<br>
loc:${dto2.loc }<br>

<!-- deptno10->50 수정  -->

 <hr>
<c:set target="${dto2}" property="deptno" value="50"></c:set>
deptno: ${dto2.deptno }<br>
dname:${dto2.dname }<br>
loc:${dto2.loc }<br>
</body>
</html>

 

 

<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@ page 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">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>2022. 6. 23.-오전 10:13:25</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</head>
<body>
<h3>ex04_03.jsp</h3>

<%
   Map<String, String>map = new HashMap<>();
   map.put("id","admin");
   map.put("passwd","1234");
%>

<c:set var="m" value="<%= map %>"></c:set>
<!-- Map 객체의 key를 이용해 value 출력 -->
m.id = ${ m.id }<br>
m.passwd = ${ m.passwd }<br>

<!-- map.put("name","hong") 엔트리를 맵에 추가 -->
<%-- <c:set target="<%= map %>" property="name" value="hong"></c:set> --%>
<c:set target="${ m }" property="name" value="hong"></c:set>

m.name = ${ m.name }<br>

</body>
</html>

 

 

코어- 흐름제어 if ,forEach, choose, forTokens

 

짝수 홀수 

<%@ page 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">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<link rel="shortcut icon" type="image/x-icon" href="../images/SiSt.ico">
<title>2022. 6. 23.-오전 9:48:13</title>
</head>
<body>
<h3>코어- 흐름제어 if ,forEach, choose, forTokens</h3>
<c:set var="num" value="${param.num }"></c:set>
<%-- <c:if test="${num/2 }">짝수</c:if>
<c:if test="${num div 2 }">짝수</c:if> --%>

<%-- <c:if test="${num%2 }">짝수</c:if> --%>
<c:if test="${num mod 2  eq 0}">짝수</c:if>
<c:if test="${num mod 2  eq 1}">홀수</c:if>
<%-- <c:if test="${num mod 2  != 0}">홀수</c:if> --%>
<%-- <c:if test="${num mod 2  ne 0}">홀수</c:if> --%>
</body>
</html>

파라미터를 직접 주었다 .

 

 

<c:set value="${param.kor }" var="kor"></c:set>
<c:if test="${kor >=90 && kor<=100 }">수</c:if>
<c:if test="${kor >=90 && kor<=90 }">우</c:if>
<c:if test="${kor >=90 && kor<=80}">미</c:if>
<c:if test="${kor >=90 && kor<=70}">양</c:if>
<c:if test="${kor >=90 && kor<=100 }">가</c:if>



<c:choose>
    <c:when test="${kor >=90 && kor<=100 }">수</c:when>
    <c:when test="${kor ge 80 and kor lt 90 }">우</c:when>
    <c:when test="">미</c:when>
    <c:when test="">양</c:when>
    <c:otherwise>가</c:otherwise>
</c:choose>

 

c:forEach var="변수명" items="컬렉션, 배열 ,맵 "
c:forEach begin ="시작값" end="끝값" step="중가치" var="변수명"

 

 

1+ 2+ 3+ 4+ 5+ 6+ 7+ 8+ 9+ 10+ =55 

 

 

${status.current} 현재 for문의 해당하는 번호

${status.index} 0부터의 순서

${status.count} 1부터의 순서

${status.first} 첫 번째인지 여부

${status.last} 마지막인지 여부

${status.begin} for문의 시작 번호

${status.end} for문의 끝 번호

${status.step} for문의 증가값

 

 

<%@ page 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">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<link rel="shortcut icon" type="image/x-icon" href="../images/SiSt.ico">
<title>2022. 6. 23.-오전 10:31:40</title>
</head>
<body>
<h3></h3>
<!-- c:forEach var="변수명" items="컬렉션, 배열 ,맵 "
c:forEach begin ="시작값" end="끝값" step="중가치" var="변수명" -->

<!-- 1+ 2+ 3+ 4+ 5+ 6+ 7+ 8+ 9+ 10+ =55 -->

<!-- 1번째방법 -->
<c:set var="sum" value="0"></c:set>
<c:forEach begin="1" end="10" step="1" var="i">
   <c:if test="${i eq 10 }">${i }</c:if>
      <c:if test="${i ne 10 }">${i }+</c:if>
<c:set var="sum" value="${sum+i }"></c:set>
 </c:forEach>
 =${sum }
 
 <hr>
 <!-- 2번째방법 -->
 <c:forEach begin="1" end="10" step="1" var="i"> 
<!--  += 문자열 연결 연산자  -->
    ${i += (i eq 10 ? "" : "+") }
    <c:set var="sum2"  value="${sum2+i }"></c:set>
<%-- 
	위에꺼랑 같은코딩 
    <c:set var="sum"  ${sum+i }> ${sum+i }</c:set> --%>
</c:forEach>
=${sum } 

<hr>
 <c:forEach begin="1" end="10" step="2" var="i" varStatus="status"> 

 <c:if test="${status.first}">첫번째</c:if>
  <c:if test="${status.last}">마지막</c:if>
 test-${i }:[ ${status.count}/${status.index}/${status.first}/${status.last}]<br>
 
 </c:forEach>

</body>
</html>

 

 

<c:set var="m" value="<%=new int[] {1, 4, 5, 4, 2} %>"></c:set>

<c:forEach items="${m }" var="n" varStatus="status">
    <li>m[${status.index}] : ${n } - ${status.first}/${status.last }</li>
</c:forEach>

<%
    Map<String, String> map = new HashMap<>();
    map.put("k1","v1");
    map.put("k2","v2");
    map.put("k3","v3");
    map.put("k4","v4");
%>

<ol>
<c:forEach items="<%= map %>" var="entry">
  <li>${ entry.key } - ${ entry.value }</li>
</c:forEach>
</ol>

 

<!-- c:url -->
<c:url var="url" value="ex05jsp"></c:url>
<c:redirect url="${url }">
 <!-- c:url -->
<c:url var="url" value="ex05.jsp"></c:url>
<c:redirect url="${url }">
<!--리다이렉트 될때 파라미터값을 가져가고 싶을때   -->
    <c:param name="name" value="admin"></c:param>
    <c:param name="age" value="10"></c:param>
</c:redirect>
</c:redirect>

ex05.jsp에

>name="${param.name}";
>age="${param.age}";

 

<%
    FileReader fr = null;

    try {
        String path = "days08/ex01.jsp";
        String realPath = request.getRealPath(path);

        fr = new FileReader(realPath);
%>
    <pre>
        실제배포경로 = <%=realPath %> <br />
        <c:out value="<%=fr %>" escapeXml="true"></c:out>
    </pre>
<%
    } catch (Exception e) {
%>
    에러: <%=e.getMessage() %>
<%        
    } finally {
        if (fr != null) {
            try { fr.close(); } catch (IOException ex) {}
        }
    }
%>

 

try-catch

<c:catch var="ex">
</c:catch>

<c:if test="${ex != null }">
    ${ex }
</c:if>

 

 

<%
   Date now = new Date();
%>

now: <%=now %><br>

<hr>
<c:set value="<%=now %>" var="now"></c:set>
<fmt:formatDate value="${now }"/>
 <fmt:formatDate value="${now }" dateStyle="default"/> <!-- 기본 --><br>
 <fmt:formatDate value="${now }" dateStyle="full"/> <br>
 <fmt:formatDate value="${now }" dateStyle="short"/> <br>
 <fmt:formatDate value="${now }" dateStyle="long"/> <br>
 <fmt:formatDate value="${now }" dateStyle="medium"/> <br>
 <hr>
  <fmt:formatDate value="${now }" type="date"/> <br>
 <fmt:formatDate value="${now }" type="time"/> <br>
 <fmt:formatDate value="${now }" type="both"/> <br>
 
  <hr />
 <fmt:formatDate value="${now }" pattern="yyyy년 MM월 dd일"/> <br>

ex06_02.jsp

<%@page import="java.time.LocalDate"%>
<%@page import="java.time.LocalDateTime"%>
<%@page import="java.time.format.DateTimeFormatter"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.util.Date"%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@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"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<link rel="shortcut icon" type="image/x-icon" href="../images/SiSt.ico">
<title>2022. 6. 23.-오전 11:35:04</title>
</head>
<body>
<h3></h3>
<%
   Date now = new Date();
%>

now: <%=now %><br>

<hr>
<c:set value="<%=now %>" var="now"></c:set>
<fmt:formatDate value="${now }"/>
 <fmt:formatDate value="${now }" dateStyle="default"/> <!-- 기본 --><br>
 <fmt:formatDate value="${now }" dateStyle="full"/> <br>
 <fmt:formatDate value="${now }" dateStyle="short"/> <br>
 <fmt:formatDate value="${now }" dateStyle="long"/> <br>
 <fmt:formatDate value="${now }" dateStyle="medium"/> <br>
 <hr>
  <fmt:formatDate value="${now }" type="date"/> <br>
 <fmt:formatDate value="${now }" type="time"/> <br>
 <fmt:formatDate value="${now }" type="both"/> <br>
 
  <hr />
 <fmt:formatDate value="${now }" pattern="yyyy년 MM월 dd일"/> <br>
 
 <%
 String strNow="2022년 06월 22일";
//1
 Date now2=new Date(2022-1900, 6-1, 22);
 
//2
String pattern="yyyy년 MM월 dd일";
 SimpleDateFormat sdf= new SimpleDateFormat(pattern);
 Date now3=sdf.parse(strNow);
 
//3
String pattern2="yyyy년 MM월 dd일";
DateTimeFormatter f=DateTimeFormatter.ofPattern(pattern2);
LocalDate now4=LocalDate.parse(strNow,f);

//4
 %>


</body>
</html>

'JSP' 카테고리의 다른 글

[JSP] ServletContextListener 인터페이스 활용 방법  (0) 2022.06.24
[JSP] MVC 패턴  (0) 2022.06.23
[JSP] EL을 사용해서 쿠키를 읽고 쓰기  (0) 2022.06.23
[JSP] EL  (0) 2022.06.22
[JSP] 세션  (0) 2022.06.22
Comments