2020년 12월 23일

업데이트:

첫 시작 화면

홈화면

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL / JSTL</title>
</head>
<body>
	<h3>EL</h3>
	<ul>
		<li><a href="01_el/el.do">01.EL이란?</a>
		<li><a href="views/01_el/02_elParam.jsp">02.EL - param</a>
		<li><a href="01_el/elObject.do">03.EL - Object</a>
		<li><a href="views/01_el/04_elOperation.jsp">04.el - operation</a>
	</ul>
	
	<hr>

	<h3>JSP Action Tag</h3>	
	<ul>
		<li><a href="views/02_action/01_action.jsp">JSP Action Tag - include</a></li>
	</ul>
	
	<hr>
	
	<h3>JSTL</h3>	
	<ul>
		<li><a href="views/03_jstl/01_jstl.jsp">01.JSTL - core(기초)</a></li>
		<li><a href="views/03_jstl/02_jstl_core_if.jsp">02.JSTL - core(if)</a></li>
		<li><a href="views/03_jstl/03_jstl_core_choose.jsp">03.JSTL - core(choose)</a></li>
		<li><a href="views/03_jstl/04_jstl_core_forEach.jsp">04.JSTL - core(forEach-1)</a></li>
		<li><a href="views/03_jstl/05_jstl_core_forEach2.jsp">05.JSTL - core(forEach-2)</a></li>
		<li><a href="views/03_jstl/06_jstl_core_forTokens.jsp">06.JSTL - core(forTokens)</a></li>
		<li><a href="views/03_jstl/07_jstl_core_url.jsp">07.JSTL - core(url)</a></li>
		<li><a href="views/03_jstl/08_jstl_core_redirect.jsp">08.JSTL - core(redirect)</a></li>
		
		<li><a href="views/03_jstl/09_jstl_fmt.jsp">09.JSTL - fmt</a></li>
		
		<li><a href="views/03_jstl/10_jstl_fn.jsp">10.JSTL - fn</a></li>
	</ul>
</body>
</html>



JSP Action Tag 란?

기존의 JSP 문법을 확장하는 메커니즘을 제공하는 태그로,
웹 브라우저에서 실행되는 것이 아니라,
웹 컨테이너에서 실행되고 결과만 브라우저로 보냄.

JSP 페이지에서 바로 사용 가능하고
태그 앞에 jsp: 접두어가 붙음

03_actionInclude.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>정적, 동적 include</title>
</head>
<body>
	
	<a href ="02_scriptingInclude.jsp">
		1) Scripting 방식의 include (정적 include)
	</a>
	<br>
	
	<a href="03_actionInclude.jsp">
		1) JSP Action Tag 방식의 include (동적 include)
	</a>
</body>
</html>


정적 include 방식

현재 페이지에 포함되어지는 jsp 파일이 컴파일 전에 지정된 위치에 삽입되어 하나의 거대한 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>

	<h1>정적 include 방식</h1>
	
	<pre>
	현재 페이지에 포함되어지는 jsp 파일이 컴파일 전에 지정된 위치에 삽입되어 
	하나의 거대한 jsp 파일로 컴파일 됨.
	
	특징  : 추가된 페이지에 선언된 변수를 그대로 사용할 수 있음.
	문제점 : 현재 페이지와 추가된 페이지가 동일한 이름의 변수를 가질 수 없다.(변수명 충돌)
	
	인터넷이 느리면 정적 include이 더 좋음.
	</pre>

	<%@include file="test.jsp" %><br><br>
	
	현재 년도 : <%=year %>
	
	<%--  <% String year = "2021"; %>
		  Duplicate local variable year
		  == 변수명 중복 에러
	--%>
</body>
</html>


동적 include

현재 페이지에 삽입되는 페이지가 컴파일 이전이 아닌, 현재 페이지가 요청되어 출력되는 시점에 하나로 합쳐지는 방식.

동적

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>동적 Include</title>
</head>
<body>
	<h3>JSP Action Tag란?</h3>
	<pre>
	JSP Action 태그는 XML 기술을 이용하여 
	기존의 JSP 문법을 확장하는 메커니즘을 제공하는 태그로, 
	
	웹 브라우저에서 실행되는 것이 아니라, 
	웹 컨테이너에서 실행되고 결과만 브라우저로 보냄.
	
	JSP 페이지에서 바로 사용 가능하고
	태그 앞에 jsp: 접두어가 붙음
	
	<%-- 
		<jsp:include page="jsp파일 경로"></jsp:include>
	 --%>
	</pre>
	
	<h3>동적 include</h3>
	<pre>
	현재 페이지에 삽입되는 페이지가 컴파일 이전이 아닌,
	현재 페이지가 요청되어 출력되는 시점에 하나로 합쳐지는 방식.
	
	특징 : 정적 include에서의 문제점인 변수명 중복이 발생하지 않는다.
		(변수명 중복 검사는 컴파일 시에 수행됨.)
		+ 현재 페이지에서 삽입되는 페이지로 데이터 전달이 가능함.
		
	</pre>
	
	<%-- 전달하고자 하는 값을 작성할  있음. --%>
	<jsp:include page="test.jsp">
		<jsp:param name="age" value="30"/>
	</jsp:include>
		
</body>
</html>


test.jsp

<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
	String year = String.format("%tY",new Date());
%>

<p>
	2005 - <%=year %> 이 웹페이지의 저작권은 데브보령에게 있습니다.
</p>

<h1>age:${param.age }</h1>



JSTL이란?

Jsp Standard Tag Library
JSP에서 사용하는 커스텀 태그로,
공통으로 사용하는 코드의 집합을 사용하기 쉽게
태그화하여 표준으로 제공한 것을 말한다.

Library 등록 방법

1) https://tomcat.apache.org/download-taglibs.cgi 접속
2) Standard-1.2.5 -> jar files -> Impl,Spec,El 다운로드
3) WebContent/WEB-INF/lib 에 추가
다운로드

캡처

jstl.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
	<h2>JSTL이란?</h2>
	Jsp Standard Tag Library<br>
	JSP에서 사용하는 커스텀 태그로, <br>
	공통으로 사용하는 코드의 집합을 사용하기 쉽게<br> 
	태그화하여 표준으로 제공한 것을 말한다.

    <form action="01_jstl_core_basic.jsp">
		첫번째 수 : <input type="text" name="num1" /><br/>
		두번째 수 : <input type="text" name="num2" /><br/>
		<button type="submit">확인</button> 
	</form>
</body>
</html>


1. 변수의 선언 - <c:set>

1

<%@ 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>JSTL - core tag</title>
</head>
<body>
	<h3>라이브러리 등록 방법</h3>
	1) https://tomcat.apache.org/download-taglibs.cgi 접속<br>
	2) Standard-1.2.5 -> jar files -> 4개 다 다운로드<br>
	3) WebContent/WEB-INF/lib 에 추가<br>
	
	<hr>
	
	<h3>JSTL 선언 방법</h3>
	<pre>
	JSTL을 사용 하고자하는 JSP 페이지의 상단  page 지시자 아래에 taglib 지시자를 사용.
	 	
	&lt;%@ taglib prefix="사용하고자 하는 접두사" uri="tld 파일상의 uri"  %> 
		
	prefix : 접두사. 다른 태그와 구별할 수 있는 namespace를 제공함.
	uri : 실제 웹상주소가 아니라, 태그라이브러리를 나타내는 식별자임. 
		tlb파일상의 uri값을 가리키며, 이 지시자를 통해 작성한 태그이름과 매칭되는 자바코드를 찾음.

	* tld(Tag Library Descriptor) 파일 : 커스텀 태그 정보를 갖고 있는 라이브러리 파일.
	* uri : (Uniform Resource Identifier) : 자원을 나타내는 유일한 주소
	
	</pre>
	
	<hr>
	
	<h3>JSTL core Library</h3>
	
	
	<p>
		<h4>1. 변수의 선언 - &lt;c:set> </h4>
	
		<pre>
		- 변수를 선언하고 초기값을 대입하는 기능을 가진 태그
		- 변수를 선언할 때 scope를 지정할 수 있음. (기본값 page)
		
		- 사용법
		1) 변수 타입을 별도로 선언하지 않는다.
		2) c:set 태그로 선언한 변수를 사용할 경우 EL로 사용해야 한다.
		3) c:set으로 선언된 변수는 EL 구문에서는 사용할 수 있지만 scriptlet 내에서는 사용할 수 없다.
		</pre>
		
		<c:set var="car" value="람보르기니" />
		
		<h3>${car }</h3>
		
		<!-- 전달된 파라미터 두개를 c:set을 이용하여 변수에 저장 -->
		<c:set var="n1" value="${param.num1 }"/>
		<c:set var="n2" value="${param.num2 }" scope="request"/>
		<c:set var="result" value="${n1*n2}" scope="session"/>
		
		${n1 }*${n2 }=${result }<br>
		
		<!-- 정확하게 작성하는 법 -->
		${pageScope.n1 }*${requestScope.n2}=${sessionScope.result }<br>
	</p>

	<hr>


2. 변수의 삭제 - <c:remove>

변수삭제

<p>
    <h4> 2. 변수의 삭제 - &lt;c:remove> </h4>
    
    <c:set var="result" value="9999" scope="request"/>
    
    [삭제전]<br>
    request : ${requestScope.result }<br>
    session : ${sessionScope.result }<br>
    
    1)모든 스코프에서 삭제<br>
    <%-- <c:remove var="result"/> --%>
    
    
    2) 특정 스코프에서 삭제 <br>
    <c:remove var="result" scope="request"/>
    
    [삭제후]<br>
    request : ${requestScope.result }<br>
    session : ${sessionScope.result }<br>
    
</p>	   

<hr>


3. 변수의 출력 - <c:out>

시퀀스

<p>
		<h4> 3. 변수의 출력 - &lt;c:out> </h4>
		&lt;c:out> 태그는 데이터를 출력할 때 사용하는 태그<br>
		&lt;, >, & 특수 문자를 자동으로 이스케이프 시퀀스(escape sequance)로 바꿔줌.<br>
		
		<pre>
		* 특수 문자 이스케이프 시퀀스(escape sequance)
		< &lt;
		> &gt;
		& &amp;
		</pre>
		
		<c:out value="<h3>c:out 테스트 중 입니다.</h4>"/>
		<c:out value="<h3>c:out 테스트 중 입니다.</h4>" escapeXml="false"/>
	</p>
</body>
</html>



4. <c:if> 태그

  • Java의 if 문과 비슷한 역할을 하는 태그.
  • <c:if> 태그에서 조건식은 test라는 속성의 값으로 지정해야 함
    이 때 조건식은 반드시 EL 형식으로 기술해야 한다.
    cif

    비교
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL - core tag(if)</title>
</head>
<body>
	<h3>&lt;c:if> 태그 </h3>
	- Java의 if 문과 비슷한 역할을 하는 태그.<br>
	- &lt;c:if> 태그에서 조건식은 test라는 속성의 값으로 지정해야 함<br>
		이 때 조건식은 반드시 EL 형식으로 기술해야 한다.

    <form action="02_jstl_core_ifEnd.jsp">
		첫번째 수 : <input type="text" name="num1" /><br/>
		두번째 수 : <input type="text" name="num2" /><br/>
		<button type="submit">확인</button> 
	</form>
</body>
</html>


<%@ 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>JSTL - core tag(if)</title>
</head>
<body>
	<h3>&lt;c:if> 태그 </h3>
	- Java의 if 문과 비슷한 역할을 하는 태그.<br>
	- &lt;c:if> 태그에서 조건식은 test라는 속성의 값으로 지정해야 함<br>
		이 때 조건식은 반드시 EL 형식으로 기술<br>
	- else문이 존제하지 않는다.<br>
	 
	<hr> 
	<!-- input태그의 값(파라미터)은 문자열의 형태를 띄고 있으므로
		 문자열 크기 비교가 일어남. -->
	<c:set var="n1" value="${param.num1 }"/>
	<c:set var="n2" value="${param.num2 }"/>
	
	<c:if test="${n1 > n2 }">
		${n1 }은 ${n2 }보다 큽니다. -> 문자열 비교<br>
	</c:if>
	
	<c:if test="${Integer.parseInt(n1)>Integer.parseInt(n2) }">
		${n1 }은 ${n2 }보다 큽니다. -> 숫자 비교
	</c:if>
	
	<c:if test="${Integer.parseInt(n1)<Integer.parseInt(n2) }">
		${n1 }은 ${n2 }보다 작습니다. -> 숫자 비교
	</c:if>
	
	<c:if test="${Integer.parseInt(n1)==Integer.parseInt(n2) }">
		${n1 }은 ${n2 }는 같습니다. -> 숫자 비교
	</c:if>
	
</body>
</html>



5. <c:choose> 태그

  • Java의 if-else if-else, switch 문과 비슷한 역할을 하는 태그.
  • <c:when>, <c:otherwise> 태그와 함께 사용되는데,
    각각 switch 문의 case, default 절과 비슷한 역할을 함.
    뽑기

    1등

    꽝
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL - core tag(choose)</title>
</head>
<body>
	<h3>&lt;c:choose> 태그 </h3>
	- Java의 if-else if-else, switch 문과 비슷한 역할을 하는 태그.
	- &lt;c:when>, &lt;c:otherwise> 태그와 함께 사용되는데,
	각각 switch 문의 case, default 절과 비슷한 역할을 함.

	
	 <form name="genderFrm" action="03_jstl_core_chooseEnd.jsp">
        <h2>경품뽑기</h2>
       		숫자를 입력하세요 : <input type="number" name="num1"><br>
        <button type="submit">확인</button> 
    </form>
</body>
</html>


<%@ 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>JSTL - core tag(choose)</title>
</head>
<body>
		<h3>&lt;c:choose> 태그 </h3>
		
		<c:choose>
			<c:when test="${ Integer.parseInt(param.num1) == 1}">
				🎁🎉 최신형 컴퓨터를 뽑으셨습니다 👏👏👏
			</c:when>
			<c:when test="${ Integer.parseInt(param.num1) == 2}">
				🎁🎉 최신형 스마트폰을 뽑으셨습니다 👏👏👏
			</c:when>
			<c:when test="${ Integer.parseInt(param.num1) == 3}">
				🎁🎉 백화점 상품권을 뽑으셨습니다 👏👏👏
			</c:when>
			<c:when test="${ Integer.parseInt(param.num1) < 0}">
				잘못 입력하셨습니다..
			</c:when>
			<c:otherwise>
				      💥  꽝 💥
			</c:otherwise>
		</c:choose>
</body>
</html>



6. <c:forEach> 태그 -1

  • Java의 for문에 해당하는 기능을 제공하는 태그
  • forEach는 여러가지 속성이 사용됨
<%@ 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>JSTL - core tag(forEach)</title>
</head>
<body>
	<h3>&lt;c:forEach> 태그 </h3>
	- Java의 for문에 해당하는 기능을 제공하는 태그
	- forEach는 여러가지 속성이 사용됨
	<pre>
	var : 현재 반복 횟수에 해당하는 변수의 이름
	begin : 반복이 시작할 요소 번호 (0 … n)
	end : 반복이 끝나는 요소 번호
	step : 반복 시 증가할 수(기본값 1, 음수로 지정 불가)
	items : 반복할 객체 명 (Collection 객체)
	varStatus : 현재 반복에 해당하는 객체의 요소
	</pre>


기본

<h3>기본 사용법</h3>
<c:forEach var="i" begin="1" end="6">
    <h<c:out value="${i}" />>c:out으로 반복문 사용</h<c:out value="${i}" />>
    <h${i}>EL로 반복문 사용 </h${i}>
    <p>-------------------------------------------</p>
</c:forEach>
<hr>


스탭

<h3>step 속성</h3>
step속성의 값은 0보다 작거나 같을 수 없음.

<c:forEach var="i" begin="1" end="6" step="2">	
        <h${i}>건너뛰기 ${i}</h${i}>
</c:forEach>
<hr>


역순

<h3>역순</h3>
	<c:forEach var="k" begin="1" end="6">	
		<h${7-k}>역순 ${7-k}</h${7-k}>
	</c:forEach>
	
</body>
</html>



7. <c:forEach> 태그 - 컬렉션 객체 선언 및 출력

<%@ 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>JSTL - core tag(forEach)</title>
</head>
<body>
<!--  
	EL 3.0 버전 이상을 지원하는 was에서만 EL컬렉션객체 사용 가능
	톰캣 8.0부터 EL 3.0을 지원함.
-->
<c:set var="myList" value='${["A","B","C","D","E"]}' scope="request" />

<c:set var="mySet" value='${{"A","B","C","B","A"}}' scope="request" />

<c:set var="myMap" value='${{"name":"홍길동", "job":"학생", "age":20}}' scope="request" />
<!-- Map객체의 키값은 문자열로 전달함. -->


<jsp:forward page="05_jstl_core_forEach2End.jsp"/>
<!-- 현재 페이지에서 선언된 요청 정보(request scope)를
	 page 속성에 작성된 주소로 위임하겠다.
 -->

</body>
</html>


<%@ 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>JSTL - core tag(forEach)</title>
</head>
<body>
	<h2>컬렉션 객체 선언 및 출력</h2>

	<h3>varStatus 속성</h3>
	
	varStatus는 다음과 같은 속성을 가지고 있음
	<pre>
	current : 현재 반복 횟수 또는 현재 반복 접근한 값
	index : 반복 라운드의 제로 기반(zero-based) 인덱스 (0 … n)
	count : 반복 라운드의 1 기반(one-based) 인덱스 (1 … n) 
	first : 현재 라운드가 반복을 통한 첫 번째임을 의미 
	last  :현재 라운드가 반복을 통한 마지막 번째임을 의미 
	</pre>


list

<h3>List</h3>
<c:forEach var="item" items="${myList }" varStatus="vs" >
    현재 값 : ${vs.current }<br>
    index : ${vs.index }<br>
    count : ${vs.count }<br>
    first: ${vs.first }<br>
    last: ${vs.last }<br>
    -----------------------------------<br>
</c:forEach>


<hr>


set

<h3>Set</h3>
<c:forEach var="item" items="${mySet }" varStatus="vs">
    ${item }
        <!-- 마지막이 아닐 때 , 를 출력하라는 if문 -->
    <c:if test="${!vs.last }">
        ,
    </c:if>
</c:forEach>
<hr>


map

<h3>Map</h3>
	
	<c:forEach var="item" items="${myMap }">
		${item.key }=${item.value }<br>
	</c:forEach>
	
	<hr>
</body>
</html>





댓글남기기