본문 바로가기
05_Server (04. JSP 프로그래밍 구현)

JSP Action Tag

by moca7 2024. 10. 7.

 

 

 

ㅁ JSP를 이루는 구성인자

 

(1) 스크립트 원소

- 스크립틀릿(<% %>) : 자바코드 작성 (변수 선언, 제어문 등)

- 표현식(<%= %>) : 자바 값 출력

- 선언식(<%! %>) : 메소드 및 멤버변수 정의

 

(2) 지시어

- page 지시어 : jsp에 대한 정보 기술

- include 지시어 : 다른 jsp를 포함시키는 기술

- taglib 지시어 : 외부 라이브러리를 해당 jsp에서 사용할 수 있게 하는 기술

 

 

(3) 액션 태그

- xml 태그 방식을 이용해서 기존의 jsp 문법을 확장하는 기술

- 표준 액션 태그 : 별도의 라이브러리 필요없이 바로 작성 가능. 태그명에 jsp: 접두어가 붙는다.

- 커스텀 액션 태그 : 별도의 라이브러리 등록을 통해 사용 가능. 태그명에 라이브러리 종류별 접두어가 붙는다.

 

 

 

 

 

 

ㅁ index.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>



<h3>EL</h3>
<a href="<%= request.getContextPath() %>/el.do">1) EL 기본 구문</a> <br>
<a href="<%= request.getContextPath() %>/elOperator.do">2) EL 연산자</a>


<h3>JSP Action Tag</h3>

<h4>1. 표준 액션 태그 (Standard Action Tag)</h4>
<a href="<%= request.getContextPath() %>/02_standardAction/include.jsp">1) jsp:include</a> <br>
<a href=""></a>
 

</body>
</html>
 

 

 

 

 

 

ㅁ webapp 폴더에 02_standardAction 폴더를 만들고 include.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>

    <h3>jsp:include</h3>
    <p>또 다른 페이지를 포함하고자 할 때 사용하는 태그</p>

</body>
</html>
 

 

 

 

- 이때까지 써왔던 include 지시어 대신 표준 액션 태그로도 다른 페이지를 포함시킬 수 있다.

 

 

 

 

 

ㅁ webapp/02_standardAction에 footer.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 currentYear = new java.text.SimpleDateFormat("yyyy").format(new java.util.Date());
    %>

    <div style="border: 1px solid gray; padding: 10px;">
        Copyright ⓒ 2000-<%= currentYear %> GooDee Academy. All rights reserved.
        <br>
       
    </div>

</body>
</html>
 

 

 

- 풀클래스 명을 쓰면 import할 필요 없다. 

 

 

 

 

 

ㅁ include.jsp에서 footer.jsp를 include 한다.

 

 
<%@ 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>

    <h3>jsp:include</h3>
    <p>또 다른 페이지를 포함하고자 할 때 사용하는 태그</p>
 

    <h4>기존 include 지시어 방식 (정적 include 방식-컴파일 시점에 포함되어서)</h4>
    <%@ include file="footer.jsp" %>
    <br>
 

    특징 : include하는 jsp 상에 선언된 변수를 현재 이 페이지에서도 사용 가능 (include 선언 이후 코드에서만 사용 가능) <br>
    currentYear : <%= currentYear %>

    단, 현재 이 페이지에서 동일한 이름의 변수를 재선언할 수 없다. 변수명 중복이라서. <br>
    <%-- int currentYear = 2024; --%>


</body>
</html>
 

 

 

 

- 기존 include 지시어 방식은 컴파일 시점에 포함되어서 정적 include 방식이라고 한다.

- include 선언 이전의 코드에서는 포함시키는 jsp 상에 선언된 변수를 쓸 수 없다.

- 동일한 이름의 변수를 재선언할 수 없다. 변수명이 중복된다.

 

 

 

 

 

 

ㅁ include를 표준 액션 태그로 해보기

 

 
<%@ 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>


    <h3>jsp:include</h3>
    <p>또 다른 페이지를 포함하고자 할 때 사용하는 태그</p>
 

    <%--
    <h4>기존 include 지시어 방식 (정적 include 방식-컴파일 시점에 포함되어서)</h4>
    <%@ include file="footer.jsp" %>
    <br>
 

    특징 : include하는 jsp 상에 선언된 변수를 현재 이 페이지에서도 사용 가능 (include 선언 이후 코드에서만 사용 가능) <br>
    currentYear : <%= currentYear %>

    단, 현재 이 페이지에서 동일한 이름의 변수를 재선할 수 없다. 변수명 중복이라서. <br>
    int currentYear = 2024;
    --%>
 


    <h4>include 표준액션태그 방식 (동적 include 방식)</h4>
    <jsp:include page="footer.jsp"></jsp:include>
   

</body>
</html>
 

 

 

- 정적 incldue 방식은 컴파일시 포함된다면, 동적 include 방식은 runtime시 포함되는 형태다.

 

- 액션 태그 사용시 유의사항 : 반드시 종료태그가 존재해야 한다. 

 

- 시작 태그와 종료 태그 사이에 구문을 더 작성할 수도 있다.

 

 

 

- 시작 태그와 종료 태그 사이에 작성할 구문이 없다면 시작태그에 종료태그까지 같이 기술할 수 있다.

 
<jsp:include page="footer.jsp"></jsp:include>
 
 
<jsp:include page="footer.jsp"/>
 

 

- 시작태그 마지막에 슬래시("/")를 작성한다.

 

 

 

 

 

 

- 표준액션태그 방식으로도 include가 잘 된다.

 

 

 

 

 

 

ㅁ 표준액션태그 방식 특징

 

 
<%@ 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>


    <h3>jsp:include</h3>
    <p>또 다른 페이지를 포함하고자 할 때 사용하는 태그</p>

    <%--
    <h4>기존 include 지시어 방식 (정적 include 방식-컴파일 시점에 포함되어서)</h4>
    <%@ include file="footer.jsp" %>
    <br>

    특징 : include하는 jsp 상에 선언된 변수를 현재 이 페이지에서도 사용 가능 (include 선언 이후 코드에서만 사용 가능) <br>
    currentYear : <%= currentYear %>

    단, 현재 이 페이지에서 동일한 이름의 변수를 재선할 수 없다. 변수명 중복이라서. <br>
    int currentYear = 2024;
    --%>
 


    <h4>include 표준액션태그 방식 (동적 include 방식)</h4>
    <jsp:include page="footer.jsp"></jsp:include>
   
    <br><br><br>

    특징1 : include하는 jsp 상에 선언된 변수는 현재 페이지에서 사용 불가능 (따라서 재선언 가능) <br><br>
    <%-- currentYear : <%= currentYear %>  오류발생 --%>

    특징2 : include시 해당 jsp로 값을 전달해서 동적으로 표현할 수 있다. <br><br>
 
    <jsp:include page="footer.jsp">
        <jsp:param name="test" value="hello"/>
    </jsp:include> <br>

    <jsp:include page="footer.jsp">
        <jsp:param name="test" value="good bye"/>
    </jsp:include>


</body>
</html>
 

 

 

※ include 표준액션태그 방식의 특징

- 동적 include 방식이다.

- include하는 jsp 상에 선언된 변수는 현재 페이지에서 사용 불가능하다. 따라서 재선언이 가능하다.

- include시 해당 jsp로 값을 전달해서 동적으로 표현할 수 있다.

 

 

- jsp:param으로 값을 넘길 때는 반드시 key-value 세트로 보내야 한다.

 

- jsp:param도 표준 액션 태그라 닫는 태그가 반드시 필요하다.

 

 

- 똑같은 footer.jsp가 포함이 되는데 일부 영역만 데이터를 다르게 처리할 수 있다.

포함할 페이지를 동적으로 매번 다르게 표현할 수 있다.

 

- 메뉴바 등에서 현재 선택된 카테고리를 표시하거나 강조하기 위해 사용할 수 있다.

 

 

 

 

 

 

 

 

 

- 그런데 전달값이 한글이면 깨져보인다.

한글 데이터 전달시에는 인코딩 설정을 해야 한다.

 


    <jsp:include page="footer.jsp">
        <jsp:param name="test" value="하하"/>
    </jsp:include> <br>
   
    <% request.setCharacterEncoding("utf-8"); %>
    <jsp:include page="footer.jsp">
        <jsp:param name="test" value="하하"/>
    </jsp:include>
 

 

 

 

 

 

 

 

ㅁ 2. jsp:forward

 

- 아래는 index.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>



<h3>EL</h3>
<a href="<%= request.getContextPath() %>/el.do">1) EL 기본 구문</a> <br>
<a href="<%= request.getContextPath() %>/elOperator.do">2) EL 연산자</a>


<h3>JSP Action Tag</h3>

<h4>1. 표준 액션 태그 (Standard Action Tag)</h4>
<a href="<%= request.getContextPath() %>/02_standardAction/include.jsp">1) jsp:include</a> <br>
<a href="<%= request.getContextPath() %>/02_standardAction/forward.jsp">2) jsp:forward</a>

</body>
</html>
 

 

 

- 아래는 forward.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>

    <h3>jsp:forward</h3>
    <p>jsp에서 또다른 jsp로 바로 포워딩하고자 할 때</p>

    <% if(10 < 3) { %>
        <jsp:forward page="/01_el/elBasic.jsp"/>
    <% } else { %>
        <jsp:forward page="/02_standardAction/footer.jsp">
            <jsp:param name="test" value="hello world"/>
        </jsp:forward>
    <% } %>
        <jsp:forward page="/01_el/elBasic.jsp"/>

</body>
</html>
 

 

 

- 처음 index.jsp에서 클릭한 링크는 forward.jsp지만 실제 로드되는 페이지는 footer.jsp다.

주소창에는 이동한 페이지의 경로는 숨겨진다.

 

 

 

 

 

 

========================================================================

 

 

 

 

ㅁ 커스텀 액션 태그

- 표준액션태그보다 커스텀액션태그가 더 중요하다. 많이 쓰게될 것이다.

- 대표적으로 많이 쓰는 라이브러리가 JSTL이다.

 

 

ㅁ JSTL

- JSP Standard Tag Library

- 자주 쓰는 자바 코드를 보다 쉽게 사용할 수 있도록 태그화 시킨 대표적인 라이브러리

 

- 라이브러리 연동을 해야 한다.

jstl 라이브러리(jar)를 다운받아서 lib 폴더에 넣는다.

그런데 lib 폴더에 넣는다고 끝이 아니고, jstl을 작성하고자 하는 jsp 파일에 taglib 지시어를 이용해서 라이브러리 연동하는 구문을 작성해야 한다.

 

 

 

 

ㅁ jstl 라이브러리 다운

- 아파치 톰캣 사이트를 간다

 

 

 

 

 

 

- impl, spec 두 jar 파일을 다운받는다.

- 바로 lib 폴더에 넣어도 되지만, 자주 쓸거라 dev 폴더에 넣어놓는다.

- WEB-INF/lib에도 붙여놓는다.

 

 

ㅁ 대표적인 라이브러리 종류

- jstl 내에서도 라이브러리 종류가 나뉜다. 태그를 제공하는 라이브러리들이다.

- Core Library : 변수와 제어문 등의 로직과 관련된 문법 제공 (매우 중요)

- Formatting Library : 숫자, 날짜 및 시간 데이터의 출력 형식관련 문법 제공

- Function Library : EL 구문 내에서 사용 가능한 함수 제공

 

- JSTL은 EL 구문과 함께 쓰는거라 세트로 불려진다. EL/JSTL

 

 

 

 

 

ㅁ Core Library

 

- 아래는 index.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>



<h3>EL</h3>
<a href="<%= request.getContextPath() %>/el.do">1) EL 기본 구문</a> <br>
<a href="<%= request.getContextPath() %>/elOperator.do">2) EL 연산자</a>


<h3>JSP Action Tag</h3>

<h4>1. 표준 액션 태그 (Standard Action Tag)</h4>
<a href="<%= request.getContextPath() %>/02_standardAction/include.jsp">1) jsp:include</a> <br>
<a href="<%= request.getContextPath() %>/02_standardAction/forward.jsp">2) jsp:forward</a>

<h4>2. 커스텀 액션 태그 (JSTL)</h4>
<a href="${ pageContext.request.contextPath }/03_customAction/core.jsp">1) JSTL Core Library ****</a><br>
<a href="">2) JSTL Formatting Library</a><br>
<a href="">3) JSTL Function Library</a><br>


</body>
</html>
 

 

 

- pageContext는 JSP에서 현재 페이지의 모든 정보를 담고 있는 객체입니다. JSP 컨테이너가 페이지가 실행되는 동안 자동으로 제공하는 객체 중 하나로, 페이지 범위의 여러 속성에 접근할 수 있게 해줍니다.

 

 

 

- 아래는 core.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>
 

    <h2>JSTL Core Library</h2>

    <h3>1. 변수(== 속성 == JSP 내장객체 내의 attribute)</h3>
 

</body>
</html>
 

 

 

- taglib 지시어에는 항상 2개의 속성을 기술한다. prefix와 uri. 

- core 라이브러리는 접두어로 보통 c:을 붙인다.

- jsp 파일 상단에 core 라이브러리를 쓰겠다는 선언을 한다. 접두어는 c:이다.

 

 

 

 

 

ㅁ <c:set>

- JSP 내장객체에 데이터(attribute)를 담는(binding) 구문.

- 변수를 선언 및 초기화하는 구문이라고 생각해도 된다.

 

<c:set var="" value="" [scope=""]/>

<c:set var="" [scope=""]>value값</c:set>

 

- var : 바인딩할 Attribute명 (변수명)

- value : 바인딩할 데이터값

- scope : 해당 key-value 세트를 어느 영역(page, request, session, application)에 저장시킬 건지 지정.

생략시 기본값은 page 영역이다. 현재 이 페이지에서만 쓸 수 있다. 

 

- 내부적으로 scope로 지정한 JSP내장객체.setAttribute("var명", value값);이 실행된다.

 

- <c:set>으로 담았으면 반드시 EL 구문으로 JSP 내장객체에 담긴 attribute를 꺼내서 출력해야 한다. (표현식 불가)

 

${ var명 } => value 값 출력

 

 

 

 

ㅁ <c:set>

 

 
<%@ 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>

    <h2>JSTL Core Library</h2>

    <h3>1. 변수(== 속성 == JSP 내장객체 내의 attribute)</h3>

    <c:set var="num1">10</c:set>                      <!-- pageContext.setAttribute("num1", 10); -->
    <c:set var="num2" value="20" scope="request"/>    <!-- request.setAttribute("num2", 20); -->

    num1값 : ${ num1 } 또는 ${ pageScope.num1 } <br>
    num2값 : ${ num2 } 또는 ${ requestScope.num2 } <br>

    <br><br>

    <c:set var="result" value="${ num1 + num2 }" scope="session"></c:set>

    result값 : ${ result } 또는 ${ sessionScope.result } <br>


    <br><br>
    <!-- 앞으로 자주 사용할 c:set 구문 -->
    <c:set var="contextPath" value="${ pageContext.request.contextPath }"></c:set>
    contextPath값 : ${ contextPath }


</body>
</html>
 

 

 

- 태그를 작성했지만 내부적으로는 자바 코드가 실행된다. 자바코드를 안써도 된다.

 

 

- 종료태그 반드시 쓰기!

 

 

 

 

ㅁ <c:remove>

- 바인딩 되어있는 Attribute 삭제하는 구문

 

<c:remove var="" [scope=""]/>

 

- var : 삭제할 attribute 명

- scope : 삭제시킬 영역. 생략시 전체 scope에서 다 삭제한다.

 

- 내부적으로 scope로 지정한 JSP내장객체.removeAttribute("var명"); 이런 자바코드가 실행된다.

 

 

 
<%@ 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>

    <h2>JSTL Core Library</h2>

    <h3>1. 변수(== 속성 == JSP 내장객체 내의 attribute)</h3>

    <c:set var="num1">10</c:set>                      <!-- pageContext.setAttribute("num1", 10); -->
    <c:set var="num2" value="20" scope="request"/>    <!-- request.setAttribute("num2", 20); -->

    num1값 : ${ num1 } 또는 ${ pageScope.num1 } <br>
    num2값 : ${ num2 } 또는 ${ requestScope.num2 } <br>

   
    <c:set var="result" value="${ num1 + num2 }" scope="session"></c:set>
    result값 : ${ result } 또는 ${ sessionScope.result } <br>


    <!-- 앞으로 자주 사용할 c:set 구문 -->
    <c:set var="contextPath" value="${ pageContext.request.contextPath }"></c:set>
    contextPath값 : ${ contextPath }


    <br><br>
    <c:remove var="result"></c:remove>
    result값 :  ${ result }


</body>
</html>
 

 

 

 

 

 

 

 

<c:out>

- 특정 데이터를 출력하는 구문

 

<c:out value="" [default=""] [escapeXml=""]/>

 

- value : 출력할 데이터

- default : 출력할 데이터가 존재하지 않을 경우 출력시킬 기본값

- escapeXml : 출력할 데이터에 html태그가 존재할 경우 태그로써 해석시킬 껀지 여부

(true가 기본값. true면 태그로 해석안되고 문자열로 취급됨. false면 태그로 해석됨)

 

 

 

 

ㅁ 

 
<%@ 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>

    <h2>JSTL Core Library</h2>

    <h3>1. 변수(== 속성 == JSP 내장객체 내의 attribute)</h3>

    <c:set var="num1">10</c:set>                      <!-- pageContext.setAttribute("num1", 10); -->
    <c:set var="num2" value="20" scope="request"/>    <!-- request.setAttribute("num2", 20); -->

    num1값 : ${ num1 } 또는 ${ pageScope.num1 } <br>
    num2값 : ${ num2 } 또는 ${ requestScope.num2 } <br>


    <c:set var="result" value="${ num1 + num2 }" scope="session"></c:set>
    result값 : ${ result } 또는 ${ sessionScope.result } <br>


    <!-- 앞으로 자주 사용할 c:set 구문 -->
    <c:set var="contextPath" value="${ pageContext.request.contextPath }"></c:set>
    contextPath값 : ${ contextPath }


    <br><br>
    <c:remove var="result"></c:remove>
    result값 :  ${ result }

    <br><br><br>
    result값 : <c:out value="${ result }"/> <br>
    result값 : <c:out value="${ result }" default="없음"/> <br><br>

    <c:set var="outTest" value="<b>출력테스트</b>"></c:set>
    outTest값 : <c:out value="${ outTest }"/> <br>
    outTest값 : <c:out value="${ outTest }" escapeXml="false"/> <br>

</body>
</html>
 

 

 

 

 

 

====================================================================================

 

 

 

ㅁ 2. 조건문

 

 

ㅁ <c:if>

- 자바에서의 단일 if문을 대체하는 구문

 

<c:if test="조건식">

    해당 조건이 true일 경우 실행 또는 출력할 구문

</c:if>

 

- test : 조건식을 작성하는데, 반드시 EL 구문으로 작성해야 한다. 

 

 

 

ㅁ 

 

 
 
<%@ 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>



    <h3>2. 조건문</h3>

    <%--
    <% if(num1 <= num2){ %>

    <% } %>
    --%>
   
   
    <c:if test="${ num1 le num2 }">
        <b>num1이 num2보다 작거나 같습니다</b> <br>
    </c:if>
 
 

    <c:set var="str" value="안녕"></c:set>

    <%--
    <% if(str.equals("안녕")) { %>

    <% } %>    
    --%>

    <c:if test="${ str eq '안녕' }">
        <b>Hello World</b> <br>
    </c:if>    

</body>
</html>
 

 

 

- EL이랑 JSTL이 결합되면 자바 코드가 싹 사라진다. 그렇다고 자바 코드가 실행되지 않는 것은 아님.

- EL에서 문자열은 쌍따옴표, 홑따옴표 다 가능하지만 바깥쪽의 따옴표와 겹쳐서는 안 됨.

 

 

 

 

 

 

 

<c:choose>, <c:when>, <c:otherwise>

- 자바에서의 else if문 또는 else문을 대체하는 구문

 

<c:choose>

    <c:when test="첫번째 조건식">

        if 블럭

    </c:when>

    <c:when test="두번째 조건식">

        else if 블럭

    </c:when>

    <c:otherwise>

        else 블럭

    </c:otherwise>

</c:choose>

 

- otherwise는 생략 가능.

- 주석은 각 태그 안쪽에 써야 함. <c:choose>와 <c:when test="조건식"> 사이에 쓰면 나중에 오류날 수 있다.

 

 

 


    <%--
    <% if(num1 > 20){ %>

    <% }else if(num1 >= 10){ %>
       
    <% }else { %>
       
    <% } %>    
    --%>
 
   
    <c:choose>
        <c:when test="${ num1 > 20 }">
            <b>반갑습니다.</b>
        </c:when>
        <c:when test="${ num1 ge 10 }">
            <b>안녕하세요.</b>
        </c:when>
        <c:otherwise>
            <b>어서오세요.</b>
        </c:otherwise>
    </c:choose>


 

 

 

 

==============================================================================

 

 

ㅁ 3. 반복문

 

 

<c:forEach>

- 자바에서의 for문을 대체하는 구문

 

 

(1) for loop문

 

<c:forEach var="" begin="" end="" [step=""]>  </c:forEach>

 

- var : 반복문 돌 때 마다 순차적으로 증가된 값을 받기 위한 변수

- begin : 초기값

- end : 최종값

- step : 증가값, 생략시 기본값 1

 

 

(2) 향상된 for문

 

<c:forEach var="" items="" [varStatus=""]>  </c:forEach>

 

- var : 반복문 돌 때 마다 접근되는 요소를 받기 위한 변수

- items : 순차적으로 접근하고자 하는 객체(배열, 컬렉션)

- varStatus : 현재 접근된 요소의 상태값을 담기 위한 변수 (count-순번, index-인덱스 속성에 접근 가능)

 

얘도 결국 var여서 어떤 값을 보관해두기 위한 변수다.

 

 

 

 

ㅁ 

 

 
<%@ 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>

    <h2>JSTL Core Library</h2>


    <h3>3. 반복문</h3>

    <%--
    <% for(int i=1; i<=10; i+=2){ %>

    <% { %>}    
    --%>


    <c:forEach var="i" begin="1" end="10" step="2">
        반복확인 : ${ i } <br>
    </c:forEach>


    <c:forEach var="i" begin="1" end="6">
        <h${ i }>태그 안에도 적용 가능</h${ i }>
    </c:forEach>



</body>
</html>
 

 

 

 

 

- var로 선언된 변수에 접근할 때는 무조건 EL 구문으로 접근한다.

- 태그 안에도 EL 구문 사용 가능하다.

 

 

 

 

 

 
<%@ 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>

    <h2>JSTL Core Library</h2>


    <h3>3. 반복문</h3>

    <%--
    <% for(int i=1; i<=10; i+=2){ %>

    <% { %>}    
    --%>


    <c:forEach var="i" begin="1" end="10" step="2">
        반복확인 : ${ i } <br>
    </c:forEach>


    <c:forEach var="i" begin="1" end="6">
        <h${ i }>태그 안에도 적용 가능</h${ i }>
    </c:forEach>







    <%@ page import="java.util.*, com.br.elJstl.model.vo.Person" %>
    <%
        String[] colorArr = {"red", "yellow", "green", "pink"};
        request.setAttribute("colors", colorArr);

        List<Person> personList = new ArrayList<>();
        personList.add(new Person("홍길동", 20, "남자"));    
        personList.add(new Person("홍길녀", 30, "여자"));  
        personList.add(new Person("홍길순", 40, "여자"));  
        request.setAttribute("list", personList);
    %>

    <%--
    <% for(String c : colorArr) { %>

    <% } %>
    --%>    


    <ul>
        <c:forEach var="c" items="${ colors }">
            <li>${ c }</li>
        </c:forEach>
    </ul>

    <ul>
        <c:forEach var="c" items="${ colors }">
            <li style="color:${ c }">${ c }</li>
        </c:forEach>
    </ul>



    <%--
    <% for(Person p : personList) { %>

    <% { %>    
    --%>

    <table border="1">
        <thead>
            <tr>
                <th>번호</th>              
                <th>이름</th>
                <th>나이</th>
                <th>성별</th>
            </tr>
        </thead>
        <tbody>
            <c:forEach var="p" items="${ list }" varStatus="sta">
                <tr>
                    <td>순번: ${ sta.count }, 인덱스: ${ sta.index }</td>
                    <td>${ p.name }</td>
                    <td>${ p.age }</td>
                    <td>${ p.gender }</td>
                </tr>
            </c:forEach>
        </tbody>
    </table>    



</body>
</html>
 

 

 

 

- 순번은 1부터 시작, 인덱스는 0부터 시작

- 향상된 for문의 특성상 인덱스를 쓸 수 없다. 인덱스를 쓰고 싶다면 varStatus 속성을 쓰면 된다. 

 

 

 

 

 

ㅁ <c:forTokens>

- 자바에서의 split 또는 StringTokenizer와 같은 구문으로 구분자로 문자열 분리 후 반복문 수행시키는 구문.

 

<c:forTokens var="" items="" delims="">  </c:forTokens>

 

- var : 순차적으로 분리된 문자열들을 전달받을 변수

- items : 분리시켜 반복문 돌리고자하는 데이터

- delims : 분리 기준의 구분자

 

 

 

ㅁ 

 

 
<%@ 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>

    <h2>JSTL Core Library</h2>

 

    <c:set var="device" value="컴퓨터,핸드폰,TV.에어컨/냉장고.세탁기"/>

    <ol>
        <c:forTokens var="d" items="${ device }" delims=",./">
            <li>${ d }</li>
        </c:forTokens>
    </ol>



</body>
</html>
 

 

 

- delims에 여러개의 구분자 제시 가능하다. 

 

 

 

============================================================================================

 

 

ㅁ 4. url 제작 관련 태그

 

 

ㅁ <c:url>, <c:param>

- 요청할 url을 생성하고 쿼리스트링(요청시 전달할 값)을 정의해둘 수 있는 구문.

 

 

<c:url var="" value="">

    <c:param name="" value=""/>

    <c:param name="" value=""/>

</c:url>

 

- var : 최종적으로 제작된 url 구문을 받기 위한 변수

- value : 요청할 url 주소

 

- name : 파라미터(요청시전달값)명 == 키값

- value : 파라미터(요청시전달값)값 == 밸류값

 

 

 

 

 

 
<%@ 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>

    <h2>JSTL Core Library</h2>
 

    <!-- 앞으로 자주 사용할 c:set 구문 -->
    <c:set var="contextPath" value="${ pageContext.request.contextPath }"></c:set>


    <h3>4. url제작</h3>

    <a href="${ contextPath }/test.do?name=홍길동&age=10">기존방식(url 직접 작성)</a> <br>


    <%-- String mkUrl = "/elJstl/test.do?name=홍길동&age=10" --%>
    <c:url var="mkUrl" value="/test.do">
        <c:param name="name" value="홍길동"></c:param>
        <c:param name="age" value="10"/>
    </c:url>


    <a href="${ mkUrl }">c:url로 제작한 url로 요청하는 방식</a>



</body>
</html>
 

 

 

 

- url을 직접 작성하는 기존 방식

 

- url을 여러군데에 제시해야해서 구조적으로 만들어 두는게 c:url태그다.

 

 

 

 

 

- value의 /가 context path를 의미해서 저렇게만 써도 된다.

 

value="${ contextPath }/test.do" 이렇게 쓰면 context path인 elJstl이 두번 보여짐.

 

 

 

ㅁ core 라이브러리 끝.

 

 

'05_Server (04. JSP 프로그래밍 구현)' 카테고리의 다른 글

Formatting Library, Function Library  (0) 2024.10.08
[EL&JSTL] EL  (2) 2024.10.07
[AJAX] 1. ajax를 이용한 비동기식 요청  (0) 2024.09.29
실제 프로젝트 작업  (1) 2024.09.22
JSP/SERVLET 정리  (2) 2024.09.21