관리 메뉴

개발 노트

9/8 JSTL을 구성하는 작은 라이브러리들, forEach, forTokens 본문

프로젝트 기반 JAVA 응용 SW개발 : 22.07.19~23.01.20/Servlet, JSP

9/8 JSTL을 구성하는 작은 라이브러리들, forEach, forTokens

hayoung.dev 2022. 9. 15. 19:34

[och09]

[JSTL을 구성하는 작은 라이브러리들]

och09 > src > main > webapp > WEB-INF > lib 에 

javax.servlet.jsp.jstl-1.2.1.jar

javax.servlet.jsp.jstl-api-1.2.1.jar

설치파일 넣기

 

webapp 폴더에 cstl, jstl 폴더 생성하기

[jstl]

num.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>두 숫자입력</h2>
	<form action="catch.jsp">
		첫번째 숫자 : <input type="text" name="num1"><p>
		두번째 숫자 : <input type="text" name="num2"><p>
		<input type="submit" value="확인">
	</form>
</body>
</html>

catch.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!-- jstl라이브러리인 http://java.sun.com/jsp/jstl/core를 c라고 선언하고 쓰겠다. -->
<%@ 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>
    <!--  num에서 호출함.  try-catch문과 같음 -->
	<c:catch var="e1">
		<%	
			int num1 = Integer.parseInt(request.getParameter("num1"));
			int num2 = Integer.parseInt(request.getParameter("num2"));
		%>
		나눗셈 결과 : <%=num1/num2 %>
	</c:catch>
    <c:if test="${e1 != null }">
 		에러메세지 : ${e1.message }
    </c:if>
</body>
</html>

출력 결과

(두번째 숫자에 0을 입력한 경우)

(두번째 숫자에 aa를 입력한 경우)

 

 

 

num2.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h2>숫자 입력</h2>
	<form action="choose.jsp">
		숫자 : <input type="text" name="num1"><p>
		<input type="submit" value="확인">
	</form>

</body>
</html>

choose.jsp

<%@ 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>
	<!-- num2에서 호출 --> 
	<h2>인사말 Switch유사</h2>
	<c:choose>
		<c:when test="${param.num1==0}">안녕하세요</c:when>
	    <c:when test="${param.num1==1 }">Hi Hi</c:when>
    	<c:when test="${param.num1==2 }">아리가또</c:when>
    	<!-- switch문과 비슷하다. 0,1,2값이 아닌 경우에 출력된다. -->
	    <c:otherwise>헐! 누구</c:otherwise>
	</c:choose>

</body>
</html>

 

forEach는 for문과 비슷하다.

 

color.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		String[] color={"red","orange","yellow","green","blue","navy","violet"};
		request.setAttribute("color", color);
	%>
	<!-- jsp:forward page= : 페이지 이동 -->
<%--<jsp:forward page="colorResult.jsp"></jsp:forward> --%>
	<jsp:forward page="colorResult2.jsp"></jsp:forward>
</body>
</html>

colorResult.jsp

<%@ 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>
	<!-- 향상형 for문과 같음 -->
                 <!--   {"red","orange","yellow","green","blue","navy","violet"} -->
	<c:forEach var="col" items="${color }">
	     <font color="${col }">야호</font>
	</c:forEach>
</body>
</html>

출력 결과

 

colorResult2.jsp

<%@ 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>
	<!-- 1부터 7까지 반복 -->
	<c:forEach var="cnt" begin="1" end="7">
		<!-- 향상형 for문 -->
		<c:forEach var="col" items="${color }">
			<font color="${col }" size="${cnt }">야호</font>
		</c:forEach>
		<br>
	</c:forEach>
</body>
</html>

출력 결과

 

redirect.jsp

<%@ 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:redirect url="https://www.naver.com/"></c:redirect>
</body>
</html>

출력 결과 : 네이버 페이지가 켜진다.

 

set.jsp

<%@ 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>
<c:set var="num1"      value="6"/>
<c:set var="num2"      value="2"></c:set>
<c:set var="result"    value="${num1+num2 }"></c:set>
<c:set var="divResult" value="${num1/num2 }"></c:set>

<body>
	덧셈: ${num1 } + ${num2 } = ${result }<p>
	뺄셈: ${num1 } - ${num2 } = ${num1-num2 }<p>
	곱셈: ${num1 } * ${num2 } = ${num1*num2}<p>
	나눗셈1: ${num1 } / ${num2 } = ${num1/num2 }<p>
	나눗셈2: ${num1 } / ${num2 } = ${divResult }<p>
</body>
</html>

출력 결과

 

set2.jsp

<%@ 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:set var="code"  value="1112"     scope="request"></c:set>
	<c:set var="name"  value="온도계"     scope="request"></c:set>
	<c:set var="price" value="16,000원"  scope="request"></c:set>
	<jsp:forward page="set2Result.jsp"></jsp:forward>
</body>
</html>

set2Result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>상품정보</h2>
	코드 : ${code }<p>
	이름 : ${name }<p>
	가격 : ${price }
</body>
</html>

출력 결과

 

<c:forTokens>

 

token.jsp

<%@ 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:set var="animals" value="토끼,고양이*강아지,여우"></c:set>
	<h2>사자의 생일</h2>
	<!-- *이면 *을 기준으로 나누어서 각각을 원소로 만들고 향상형 for문처럼 작동한다.
	문자열을 유연하게 나눌 수 있다.-->
	<c:forTokens var="an" items="${animals}" delims="*">
		${an }<br>
	</c:forTokens>

</body>
</html>

출력 결과

 

colorResult3.jsp

<%@ 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>
<!-- 변수 선언 -->
<c:set var="color" value="red,orange,yellow,green,blue,navy,violet"/>
<c:set var="num" value="1-2-3-4-5-6-7"/>
<body>
<!-- c:forTokens 쓰기위해 원소를 구별할수 있는 일정한 구분자 필요 -->
<c:forTokens var="cnt" items="${num }" delims="-">
	<c:forTokens var="col" items="${color }" delims=",">
		<font color="${col }" size="${cnt }">야호</font>
	</c:forTokens>
	<br>
</c:forTokens>
</body>
</html>

출력결과

 

formDate1.jsp

<%@page import="java.util.Date"%>
<%@ page language="java" 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" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<!-- Date객체를 선언하여 사용 -->
<c:set var="date1" value="<%=new Date() %>"></c:set>
<body>
   오늘 날짜 : <fmt:formatDate value="${date1 }"/><p>
   현재 시간 : <fmt:formatDate value="${date1 }" type="time" />
</body>
</html>

출력 결과

 

formDate2.jsp

<%@page import="java.util.Date"%>
<%@ page language="java" 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" %>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<c:set var="date" value="<%=new Date() %>"></c:set>
<body>
	<h2>현재 날짜와 시간</h2>
	<fmt:formatDate value="${date }" type="both" dateStyle="short"  timeStyle="short" /><br>
	<fmt:formatDate value="${date }" type="both" dateStyle="medium" timeStyle="medium" /><br>
	<fmt:formatDate value="${date }" type="both" dateStyle="long"   timeStyle="long" /><br>
	<fmt:formatDate value="${date }" type="both" dateStyle="full"   timeStyle="full" />

</body>
</html>

출력 결과

 

formDate3.jsp

<%@page import="java.util.Date"%>
<%@ page language="java" 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" %>       
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<c:set var="date" value="<%=new Date() %>"></c:set>
<body>
   <!-- 날짜 사이에 / 넣기 -->
   날짜 : <fmt:formatDate value="${date }" type="date" pattern="YYYY/MM/dd (E)"  /><p>
   <!-- 시간 사이에 : 넣기 -->
   시간 : <fmt:formatDate value="${date }" type="time" pattern="hh:mm:ss (a)"    />
</body>
</html>

출력 결과

 

formNumber.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- 세자리마다 , 넣어줌. -->
	<fmt:formatNumber value="1000000"     groupingUsed="true"/><br>
	<!-- 소수점을 세 자리까지만 표현하고 반올림. -->
	<fmt:formatNumber value="3.1415923" pattern="#.###"/><br>
	<!-- 있는 것만 보여줌 -->
	<fmt:formatNumber value="3.1"       pattern="#.##"/><br>
	<!-- 자리가 없으면 0를 넣어줌. -->
	<fmt:formatNumber value="3.1"       pattern="#.00"/><br>
	<!-- 섞어서 사용 가능. -->
	<fmt:formatNumber value="121434323453." pattern="#,###.00"/><br>
	<!-- 	\\ : 앞글자 원(한화)자는 특수문자로 인정해줌. -->
	<fmt:formatNumber value="250000"    type="currency" 	currencySymbol="\\"/><br>
	<fmt:formatNumber value="0.75"      type="percent"/><br>
</body>
</html>

출력결과

 

locale.jsp

<%@page import="java.util.Date"%>
<%@ page language="java" 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" %>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<c:set var="date" value="<%=new Date() %>"></c:set>
<body>

<h2>우리나라</h2>
<fmt:setLocale value="ko_kr"/>
<!-- type="currency" : 타입이 화폐-->
금액: <fmt:formatNumber value="1000000" type="currency" /><br>
<!-- 지정한 그 나라 언어로 표현됨. -->
일시: <fmt:formatDate value="${date}" type="both" dateStyle="full" 
                     timeStyle="full" /> <br>
	 
<h2>미국</h2>
<fmt:setLocale value="en_us"/>
금액: <fmt:formatNumber value="1000000" type="currency" /><br>
일시: <fmt:formatDate value="${date}" type="both" dateStyle="full" timeStyle="full" /> <br>
	 	 
<h2>일본</h2>
<fmt:setLocale value="ja_jp"/>
금액: <fmt:formatNumber value="1000000" type="currency" /><br>
일시: <fmt:formatDate value="${date}" type="both" dateStyle="full" timeStyle="full" /> <br>
</body>
</html>

출력결과

 

timeZone.jsp

<%@page import="java.util.Date"%>
<%@ page language="java" 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" %>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>각각 나라의 시간 확인</title>
</head>
<c:set var="date" value="<%=new Date() %>"></c:set>
<body>
서울: <fmt:formatDate value="${date}" type="both" /> <br>

<fmt:timeZone value="Asia/Hong_Kong">
홍콩: <fmt:formatDate value="${date}" type="both" /><br>
</fmt:timeZone>

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

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

출력결과

 

greet.jsp

<%@ page language="java" 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" %>
<!-- prefix="fn" : fn으로 지정하면 함수이다.-->
<%@ taglib prefix="fn"  uri="http://java.sun.com/jsp/jstl/functions" %>    
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<c:set var="greet" value="How Are You ?"></c:set>
<body>
	원글 : ${greet} <p>
	대문자 : ${fn:toUpperCase(greet) }<p>
	소문자 : ${fn:toLowerCase(greet) }<p>
	How 위치 : ${fn:indexOf(greet,"How")}<p>
	Are 위치 : ${fn:indexOf(greet,"Are")}<p>
	Are를 Were로 변경 : ${fn:replace(greet,"Are","Were") }<p>
	문자 길이 : ${fn:length(greet) }
</body>
</html>

출력 결과

 

webapp > WEB-INF > tags 폴더 생성 : 사용자가 만드는 태그 저장할 예정

 

tags > newLine.tag

<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ tag body-content="empty" %>
<!-- 외부에서 color, size값을 받아옴 -->
<%@ attribute name="color" required="true" %>
<%@ attribute name="size"  required="true" type="java.lang.Integer" %>
<font color="${color }">
	<%
		for(int i=0 ; i <size ; i++) {
			out.println("-");
		}
	%>
</font>

cstl > book.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- /WEB-INF/tags 폴더에 있는 모든 tags를 가져와서 u로 선언하고 사용 -->
<%@ taglib prefix="u" tagdir="/WEB-INF/tags" %>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>좋아하는 책</h2>
    <u:newLine color="red" size="20"/><br>
	홍길동전<p>
	이순신전<p>
	김유신전<p>
	<u:newLine color="blue" size="27"/> 
</body>
</html>

출력결과

tags > max.tag

<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ tag body-content="empty"  %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- 파라미터 받음 -->
<%@ attribute name="num1" type="java.lang.Integer" required="true"  %>
<%@ attribute name="num2" type="java.lang.Integer" required="true"  %>
<!-- 파라미터 돌려줌 -->
<!-- scope="AT_END" : 범위가 끝까지 -->
<%@ variable name-given="maximum" scope="AT_END" variable-class="java.lang.Integer" %>
<%
	int result;
	if(num1 >= num2) result = num1;
	else             result = num2;
%>
<c:set var="maximum" value="<%=result %>"></c:set>

cstl > max.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="u" tagdir="/WEB-INF/tags" %>    
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>큰수 찾기</h2>
	<u:max num2="33" num1="75" />
	큰값 : ${maximum }
</body>
</html>

출력 결과

 

[och10]

och10 > src > main > webapp > WEB-INF > lib 에

javax.servlet.jsp.jstl-1.2.1.jar

javax.servlet.jsp.jstl-api-1.2.1.jar

설치파일 넣기.

och10 > src > main > webapp > WEB-INF > lib 에

c:oraclexe 폴더에서 ojdbc6.jar 검색 후 파일 복사하여 붙여넣기.

앞으로도 이 3개 파일은 계속 이렇게 가지고다녀야 함.

 

ora01.jsp

<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 연결 확인 -->
<%
	String driver = "oracle.jdbc.driver.OracleDriver";
	String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
  
	Class.forName(driver);
	
	Connection conn = DriverManager.getConnection(url, "scott", "tiger");
	
	/* 화면에 결과 출력 */
	if (conn != null) out.println("연결 성공 ㅋㅋ");
	else              out.println("연결 실패");
	conn.close();

%>
</body>
</html>

출력 결과

 

반응형