ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Servlet] 002. EL과 JSTL 개념 & JSTL Core 구문 관찰
    SsY/Class 2023. 6. 7. 13:00
    728x90
    EL(이엘) 과 JSTL 
    ■■■ EL(Expression Language) 과 JSTL(Jsp Standard Tag Library) ■■■
    
    ○ EL(Expression Language : 표현 언어)
    //-- 표현식을 조금 더 간결하게 사용할 수 있다.
    
     표현 언어는 JSTL 1.0 스펙에서 잠깐 소개되었다가
     JSP 2.0 부터 공식적으로 포함되었으며
     JSP 페이지에 사용되는 자바 코드를 대신해서
     액션 태그 엘리먼트 속성에 값을 지정하는 역할을 수행한다.
    
     예를들어, 
     <someTag:aTag> 액션 태그 엘리먼트 속성은 arrtibute 이고
     속성 값은 <% pageContent.getAttribute("aName") %> 인 경우
    
     <someTag:aTag attribute="<% pageContent.getAttribute("aName") %>"> 
     의 방식으로 표현해야 하지만
     표현 언어에서는 다음과 같이 표기한다.
     <someTag:aTag attribute="${aName}">
    
     ==> - 표현 언어(EL)은 표현식(『<%= %>』)을 대신하는 효과를 갖는다.
         - null 을 가지는 변수(데이터)에 대해 좀 더 관대한 특징을 갖는다.
         - 데이터 형 변환을 자동적으로 처리해준다.
         - setAttribute() 로 넘긴 데이터를 getAttribute() 로 받는 대신
           『${}』로 받는다.
    
    ○ JSTL(Jsp Standard Tag Library : JSP 표준 태그 라이브러리)
    
     JSP 에서는 XML 처럼 사용자가 태그를 정의해서 사용하는 것이 가능하며
     이와 같은 사용자 정의 태그를 커스텀 태그라고 하는데
     이들 중 자주 사용하는 것을 표준으로 만들어 놓은 것이 JSTL 이다.
    
     JSP Standard Tag Library(JSTL)는 일반적인 웹 어플리케이션 기능인
     반복(itertion)과 조건, 데이터 관리, 포맷, XML 조작, 데이터베이스 액세스를
     구현하는 커스텀 태그 라이브러리 모음이다.
    
     JSP의 스크립트와 HTML 코드를 같이 혼용해서 사용하면
     개발의 편의성을 제공하긴 하지만 코드의 복잡성을 증대시키는 문제가 있다.
     이와 같은 문제를 해결하기 위해 로직 부분의 JSP 코드를 태그로 대치시켜
     HTML 과 같은 태그로 이루어진 코딩 방법이 제시되었다.
    
     JSTL 은 JSP 로직을 담당하는 부분인 if, for, while, DB 처리 등과 관련된
     표준 커스텀 태그를 제공함으로써
     코드를 간결하고 가독성이 좋도록하며
     데이터 포맷, 반복 콘텐트 또는 조건 콘텐트와 같은
     전형적인 표현 레이어를 위한 표준 구현을 제공하기 때문에
     JSP 작성자들이 어플리케이션 개발에 집중하는데 도움이 된다.
    
     JSP(JSTL)작성 시 주의할 사항은
     액션 태그도 그렇지만 JSTL 커스텀 태그도 XML 기반에서 작성되었기 때문에 
     모든 태그는 시작태그와 종료태그의 쌍으로 이루어져야 한다는 것이다.
    
     기존의 컨텍스트에서 JSTL 을 사용하기 위해서는
     웹 어플리케이션의 WEB-INF/lib 디렉터리에
     필요한 라이브러리를 복사하여 붙여넣으면 된다.
     JSTL 의 주된 라이브러리 파일은 jstl.jar, standard.jar 파일이고, 
     jaxen-full.jar, sxpath.jar, jaxp-api.jar 파일 등이 필요하다.
     이 파일들을 적재하고 컨텍스트를 리로드한다.
     
     - JSTL 을 사용하기 위한 환경 설정
    
    1. 웹 브라우저 URL 요청 『http://jakarta.apache.org/』 
       → 『https://jakarta.apache.org/』 페이지로 이동
    2. 페이지 내 왼편의 메뉴 목록들 중 『Taglibs』클릭
       → 『https://tomcat.apache.org/taglibs/』 페이지로 이동
    3. 페이지 내 왼편의 메뉴 목록들 중 『Standard』클릭
       → 『https://tomcat.apache.org/taglibs/standard/』 페이지로 이동
    4. 페이지 본문의 목록들 중 『Standard1.1』 항목의 『Downloads』 클릭
       → 『http://archive.apache.org/dist/jakarta/taglibs/standard/』 페이지로 이동
    5. 페이지 본문의 목록들 중 『binaries』클릭
       → 『http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/』 페이지로 이동
    6. 페이지 본문의 목록들 중 『jakarta-taglibs-standard-1.1.2.zip 2004-10-25 20:57 933k』클릭
       → 다운로드 대화창 호출 (jakarta-taglibs-standard-1.1.2.zip)
    7. 해당 파일 다운로드 후 압축 해제
    
    압축 해제 이후
    『C:\Downloads\13_JSTL\jakarta-taglibs-standard-1.1.2\lib』 디렉터리 안에 있는
    『jstl.jar』파일과 『standard.jar』파일
    이렇게 두 개의 jar 파일을
    현재 작업할(또는 작업 중인) 프로젝트의
    『WebContent > WEB-INF > lib』 경로에 복사하여 붙여넣기 한다.
    
    다음으로
    이클립스 환경 설정(이클립스 windows 메뉴 > preferences) 클릭
    → Web > JSPFiles > Editor > Templates
    
    템플릿의 리스트의 항목들 중 (체크박스는 건들지 말고)
    『New JSP File(html5)』 항목 선택 
    
    다음으로 열리는 대화창에서(Edit Template)
    최초 디렉티브(page 디렉티브) 아래에 다음과 같은 내용 추가
    
    『<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>』
    
    OK(대화창 닫힘) → Apply and Close (대화창 닫힘)
    
     - JSTL 사용
    
     JSTL 은 태생이 커스텀 태그이기 때문에 JSP 와 밀접한 관계가 있다. 
     application, session, request, response, pageContext 등의
     내장 객체에 쉽게 접근하며, 그 외에도 파라미터 쿠키, 헤더 등을
     복잡한 코드를 사용하지 않고 쉽게 직관적으로 사용할 수 있다.
     또한, 기본적인 연산이나 객체 비교 등을 『.equals()』 메소드 등을
     사용하는 대신 『==』 을 사용할 수 있도록 쉽게 구현하였으며, 
     조건, 반복, 이동에 따른 태그를 지원하기 때문에
     태그만으로도 반복 기능을 구현할 수 있다. 
    
     JSTL 의 처리 영역은 크게 4가지로 나누어진다. 
      core,         format,  xml,     sql
     (기본핵심기능) (형식화) (xml처리) (sql 처리)
    
    ※ 주요 분류 및 종류
    
     ○ Core
      - 기능 : 변수지원, 흐름제어, URL 처리 등
      - 접두어(Prefix) : c
      - URI : http://java.sun.com/jsp/jstl/core
    
     ○ XML
      - 기능 : XML코어, 흐름제어, XML 변환 등
      - 접두어(Prefix) : x
      - URI : http://java.sun.com/jsp/jstl/xml
    
     ○ 국제화(형식화)
      - 기능 : 지역, 메세지형식, 숫자 및 날짜 형식 등
      - 접두어(Prefix) : fmt
      - URI : http://java.sun.com/jsp/jstl/fmt
    
     ○ 데이터베이스
      - 기능 :  SQL 지원
      - 접두어(Prefix) : sql
      - URI : http://java.sun.com/jsp/jstl/sql
    
     ○ Functions
      - 기능 : 컬렉션 처리, String 처리 등
      - 접두어(Prefix) : fn
      - URI : http://java.sun.com/jsp/jstl/functions
    
    ※ 선택적 사용시 JSTL 에 taglib 추가
     <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
     <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
     <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
     <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
     <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

    WebApp22
    • 환경 구성
    더보기

    taglib 이다 taglic (오타)


    • Test3.jsp
      - EL 관찰
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <%
    	/* setAttribute() 로 넘긴 데이터 수신하는 방법 1,2 */
    	request.setAttribute("result", "EL 테스트");
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Test3.jsp</title>
    <link rel="stylesheet" type="text/css" href="css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>EL 관련 실습</h1>
    	<hr />
    </div>
    
    <div>
    	<!-- action 속성 생략 → su1 과 su2 데이터를 전송하며 요청하는 페이지는 자기자신 -->
    	<form method="post">
    		정수1 <input type="text" name="su1" class="txt"/><br>		
    		정수2 <input type="text" name="su2" class="txt"/><br>
    		<button type="submit" class="btn">결과확인</button>		
    	</form>
    </div>
    
    <div>
    	<h2>폼 데이터 수신</h2>
    	
    	<!-- 폼의 데이터를 수신하는 방법 1 : 기존 방법 사용 -->
    	<h3><%=request.getParameter("su1") %></h3>
    	
    	<!-- 폼의 데이터를 수신하는 방법 2 : EL 사용 -->
    	<!-- 34문과 동일한 수식 -->
    	<h3>${param.su1}</h3>
    	<!--  ----- request.getParameter -->
    	<!-- 방법 1의 경우에는 기존 데이터가 없을 경우 null 이 찍히나 방법2의 경우에는 표시가 되지 않은 채로 null 값이 들어있음 -->
    </div>
    
    <div>
    	<h2>폼의 데이터를 받아 연산 수행</h2>
    	
    	<!-- 폼의 데이터를 받아 연산 수행하는 방법 1 : 기존방식 -->
    	<%
    		String s1 = request.getParameter("su1");
    		String s2 = request.getParameter("su2");
    		
    		int s = 0;
    		
    		if(s1 != null && s2 != null)
    		{
    			s = Integer.parseInt(s1) + Integer.parseInt(s2);
    		}
    	%>
    	<h3>합 : <%=s %></h3>
    	
    	<!-- 폼의 데이터를 받아 연산 수행하는 방법 2 : EL 사용 -->
    	<!-- 47 ~ 58 문과 동일한 수식 -->
    	<h3>합 : ${param.su1 + param.su2 }</h3>
    	<!-- → 파라미터 수신도 알아서... -->
    	<!-- → 필요한 캐스팅도 알아서 자동으로 수행 -->
    	<!-- → null 을 대하는 방식도 자연스럽게 수행 -->
        <!-- 그냥 null 일 땐 안나오게 보여지는데 - 산술연산을 해달라고 함으로 써 null + null = 0 으로 자연스럽게 표현 해줌 -->
    </div>
    
    <div>
    	<h2>setAttribute() 로 넘긴 데이터 수신</h2>
    	
    	<!-- setAttribute() 로 넘긴 데이터 수신하는 방법 1 : 기존 방법 -->
    	<h3><%=(String)request.getAttribute("result") %></h3>	
    
    	<!-- setAttribute() 로 넘긴 데이터 수신하는 방법 2 : EL 사용 -->
    	<h3>${result} </h3>
    	
    </div>
    
    </body>
    </html>

    • Test4.jsp
      - JSTL 코어(Core) if 문 실습
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <!-- ※ uri 는 url 보다 큰 개념! -->
    <!-- 태그라이브러리를 운용할 때 필요한 소스를 제공하면 만드는 법은 uri 경로 참조해라~ -->
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Test4.jsp</title>
    <link rel="stylesheet" type="text/css" href="css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>JSTL 코어(Core) if문 실습</h1>
    	<hr>
    </div>
    
    <div>
    	<!-- form 태그의 action 속성 생략 → 전송하는 데이터의 수신처는 자기 자신 -->
    	<form method="post">
    		정수 <input type="text" name="su" class="txt" /><br><br>
    		<button type="submit" class="btn">결과 확인</button>
    	</form>
    </div>
    <br><br>
    
    <div>
    	<!-- 테스트 : 데이터 잘 넘겨 받는지 -->
    	<%-- <h2>${param.su}</h2> --%>
    	
    	<%-- (<>꺽새 생략)『c:if test="" ~~ /c:if』 : JSTL Core if문 --%>
    	<%-- 『test="" 』: 조건식을 지정. 파라미터로 수신한 su 에 값이 있으면...
    	      즉 if()에서 ()괄호안에 들어가는 구문
    	      empty : 비어있다
    	--%>
    	<%-- 『param.su』 : EL 을 이용한 폼 전송 데이터를 수신하는 부분 --%>
    	<!-- 코어에 if 문 열었다~ -->
    	<c:if test="${!empty param.su }">
    		<!-- <h2>있다</h2> -->
    		
    		<!-- 파라미터로 수신한 su 가 짝수라면... -->
    		<!-- → 20 : 짝수 -->
    		<c:if test="${ (param.su % 2) == 0 }">
    			<h2>${param.su} : 짝수</h2>
    		</c:if>
    		
    		<!-- JSTL Core의 if 구문에는 else 구문이 없다 -->
    		<!-- 파라미터로 수신한 su 가 홀수라면... -->		
    		<c:if test="${(param.su%2)!=0 }">
    			<h2>${param.su } : 홀수</h2>
    		</c:if>
    		
    	</c:if>
    	<!-- 코어에 if 문 닫았다 -->	
    </div>
    
    </body>
    </html>

    • Test5.jsp
      - JSTL Core 반복문 : forEach 문 실습
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Test5.jsp</title>
    <link rel="stylesheet" type="text/css" href="css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>JSTL 코어(Core) forEach문 실습</h1>
    	<hr />
    </div>
    
    <div>
    	<table class="table">
    		
    		<!-- JSTL 코어(Core) 반복문 -->
    		<%-- 『c:forEach var="변수" begin="시작값" end="끝값" step="증가값" ~ /c:forEach』 --%>
    		<c:forEach var="a" begin="1" end="9" step="1"> 			<!-- a : 1 2 3 4 5 6 7 8 9 -->
    			<tr>
    				<c:forEach var="b" begin="1" end="9" step="1">	<!-- b : 1 2 3 4 5 6 7 8 9 -->
    					<td style="width: 20px;">
    						${a*b }
    					</td>
    				</c:forEach>
    			</tr>
    		</c:forEach>
    		
    	</table>
    </div>
    
    
    </body>
    </html>

    • Test6.jsp & MyData.java & Test6_result.jsp
    • Eclipse 생성자 자동 생성하는 방법
    <%@page import="com.test.MyData"%>
    <%@page import="java.util.List"%>
    <%@page import="java.util.ArrayList"%>
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <%
    	//Test6.jsp
    	//-- 사용자 정의 데이터타입을 취하는(요소로 갖는) 자료구조 생성
    	
    	List<MyData> lists = new ArrayList<MyData>();
    
    	MyData ob = new MyData("김길동",15);
    	lists.add(ob);
    	
    	ob = new MyData("박길동", 13);
    	lists.add(ob);
    
    	ob = new MyData("이길동", 8);
    	lists.add(ob);
    
    	ob = new MyData("한길동", 17);
    	lists.add(ob);
    
    	ob = new MyData("홍길동", 20);
    	lists.add(ob);
    
    	ob = new MyData("최길동", 85);
    	lists.add(ob);
    	
    	request.setAttribute("lists", lists);
    %>
    
    <jsp:forward page="Test6_result.jsp"></jsp:forward>

    /*==================================
    	MyData.java
    	- 사용자 정의 데이터타입 활용
    =================================== */
    
    package com.test;
    
    public class MyData
    {
    	// 주요 속성 구성
    	private String name;
    	private int age;
    	
    	// default 생성자 형태의 사용자 정의 생성자
    	public MyData()
    	{
    	}
    	
    	// 매개변수 2개인 사용자 정의 생성자
    	public MyData(String name, int age)
    	{
    		super();
    		this.name = name;
    		this.age = age;
    	}
    	// getter / setter 구성
    	public String getName()
    	{
    		return name;
    	}
    	public void setName(String name)
    	{
    		this.name = name;
    	}
    	public int getAge()
    	{
    		return age;
    	}
    	public void setAge(int age)
    	{
    		this.age = age;
    	}
    	
    	
    	
    }

    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Test6_result.jsp</title>
    <link rel="stylesheet" type="text/css" href="css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>JSTL 코어(Core) forEach문을 이용한</h1>
    	<h1>자료구조 활용 실습</h1>
    	<hr />
    </div>
    
    <div>
    	<table class="table">
    		<tr>
    			<th>이름</th>
    			<th>나이</th>
    		</tr>
    		
    		<!-- 컬렉션 객체 접근용(처리용, 출력용) 반복문 구성 -->
    		<!-- 자바의 forEach 처럼 순서 맞춰서 적는 습관 -->
    		<!-- items 자료구조 -> var 자료형 --> 
    		<c:forEach var="dto" items="${lists }">
    			<tr>
    				<td style="text-align: center;">${dto.name }</td>
    				<td style="text-align: center;">${dto.age }</td>
    			</tr>		
    		</c:forEach>
    		
    	</table>
    </div>
    
    </body>
    </html>

    • Test7.jsp
      - JSTL 코터(Core) set 문 실습
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Test7.jsp</title>
    <link rel="stylesheet" type="text/css" href="css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>JSTL 코어(Core) set문 실습</h1>
    	<h2>지수승 구하기</h2>
    	<hr />
    </div>
    
    <div>
    	<p>『c:set』은 JSP 의 setAttribute() 와 같은 역할을 수행한다.</p>
    	<p>(page | request | session | application)
    	    범위의 변수(속성)을 설정한다.</p>
    	<p>『c:remove』는 JSP 의 removeAttribute() 와 같은 역할을 수행한다.</p>
    	<p>(page | request | session | application)
    	    범위의 변수(속성)을 제거한다.</p>
    	<p>scope 속성이 생략될 경우 기본 값(default)은 page 이다.</p>
    </div>
    
    <div>
    	<form method="post">
    		정수1 <input type="text" name="su1" class="txt" /><br>
    		정수2 <input type="text" name="su2" class="txt" /><br><br>
    		
    		<button type="submit" class="btn">결과 확인</button>
    	</form>
    </div>
    
    <div>
    	<!-- 『request.getParameter("su1");』 로 수행한 결과 값이 존재할 경우... -->
    	<c:if test="${!empty param.su1}">
    	
    		<%-- 『c:set var="변수" value="값" ~ /c:set』 --%>
    		<%--
    				→ 변수의 값을 지정하는 구문
    				→ 해당 스코프에 지정된 변수가 존재하지 않을 경우
    				   변수를 새로 선언하여 초기화 하는 기능을 수행하게 되며
    				   해당 스코프에 이미 지정된 변수가 존재할 경우
    				   그 변수의 값을 다시 초기화(덮어쓰기)하는 효과가 적용된다.
    		--%>
    		<c:set var="result" value="1" ></c:set>
    
    		<c:forEach var="a" begin="1" end="${param.su2 }" step="1">
    			<c:set var="result" value="${result*param.su1 }"></c:set>
    			<p>${param.su1 }^${a } = ${result }</p>			
    		</c:forEach>
    	</c:if>
    </div>
    
    </body>
    </html>

    • Gugudan.jsp
      - JSTL 코어(Core)를 활용한 구구단 출력
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Gugudan.jsp</title>
    <link rel="stylesheet" type="text/css" href="css/main.css">
    </head>
    <body>
    
    <!--
         원하는 단을 사용자로부터 입력받아 해당 구구단을 출력하는 JSP 페이지를 구성한다.
         단, JSTL Core if 문과 forEach 구문을 활용한다.
    -->
    
    <div>
    	<h1>JSTL 코어(Core)를 활용한 구구단 출력</h1>
    	<hr>
    </div>
    
    <div>
    	<form>
    		원하는 단 입력 <input type="text" name="dan" class="txt"/><br><br>
    		
    		<button type="submit" class="btn">결과 확인</button>
    	</form>
    </div>
    
    <div>
    	<%-- 내 풀이 // 망함
    		<c:if test="${!empty param.dan}">
    		
    		<c:forEach var=i begin="1" end="9" step="1">
    			<p>${param.dan} * ${i} = ${param.dan * i } </p>
    		</c:forEach>
    	</c:if>
    	--%>
    	
    	<!-- 결과 처리 -->
    	<%-- ${param.dan }  --%>
    	
    	<c:if test="${!empty param.dan}">
    	
    	<ul>
    		<c:forEach var="su" begin="1" end="9" step="1">
    			<li>
    				${param.dan} * ${su } = ${param.dan * su }
    			</li>
    		</c:forEach>
    	</ul>
    	
    	</c:if>
    </div>
    
    </body>
    </html>

    • Test8.jsp
      - JSTL 코어(Core) choose문 실습
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Test8.jsp</title>
    <link rel="stylesheet" type="text/css" href="<%=cp %>css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>JSTL 코어(Core) choose문 실습</h1>
    	<h2>배수 확인하기</h2>
    	<hr />
    </div>
    
    <div>
    	<form>
    		정수 <input type="text" name="su" class="txt" /><br><br>
    		
    		<button type="submit" class="btn">결과 확인</button>
    	</form>
    </div>
    <br><br>
    
    <div>
    	<!-- 결과 확인 -->
    	<c:if test="${!empty param.su }">
    		
    		<%-- ${param.su } --%>
    		
    		
    		<%-- c:choose ~ c:/choose --%>
    		<%-- JSTL Core 에서 if~else 를 대신할 수 있는 구문 --%>
    		<%-- 조건을 구성하는 순서가 중요! --%>
    		
    		<c:choose>
    			
    			<c:when test="${param.su%3==0 && param.su%4==0 }">
    				<p>${param.su }은(는) 3과 4의 배수</p>
    			</c:when>
    			
    			<c:when test="${param.su%3==0 }">
    				<p>${param.su }은(는) 3의 배수</p>
    			</c:when>
    		
    			<c:when test="${param.su%4==0 }">
    				<p>${param.su }은(는) 4의 배수</p>
    			</c:when>
    
    		<%-- else 를 대신할 수 있는 구문 --%>
    			<c:otherwise>
    				<p>${param.su }은(는) 3 또는 4의 배수가 아님</p>
    			</c:otherwise>
    			
    		</c:choose>
    		
    	</c:if>
    </div>
    
    </body>
    </html>

    • Test9.jsp
      - JSTL 코어(Core) import 문 실습
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Test9.jsp</title>
    <link rel="stylesheet" type="text/css" href="<%=cp %>css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>JSTL 코어(Core) import 문 실습</h1>
    	<hr />
    </div>
    
    <div>
    	<p>『c:import』는 URL 처리에 관여하며,
    	URL 을 활용하여 다른 자원의 결과를 삽입할 때 사용한다.</p>
    </div>
    <br>
    
    <!-- 변수 지정 -->
    <c:set var="url" value="Gugudan.jsp"></c:set>
    
    <!-- import 를 수행하며 해당 페이지가 필요로하는 파라미터 넘기기 -->
    <c:import url="${url }" var="impt"></c:import>
    
    <!-- 결과 화면 출력 -->
    <c:out value="${impt }"></c:out>
    <!-- → 결과 화면 출력 과정에서 HTML 코드를 그대로 출력하는 구문 -->
    <!-- 이 때, 『escapeXML』 속성의 기본값(default)은 true 로 설정되어 있다. -->
    
    </body>
    </html>

    • MemberInsertForm.jsp & MemberInsert.jsp & MemberList.jsp & MemberDTO.java
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>MemberInsertForm.jsp</title>
    <link rel="stylesheet" type="text/css" href="css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>JSTL 코어(Core)를 활용한 회원정보 입력</h1>
    	<hr />
    </div>
    <div>
    	<form action="MemberInsert.jsp">
    		
    		<!-- (이름, 전화번호, 주소) * 5명 분 입력 폼 구성 -->
    		<!-- → 각각의 입력 컨트롤 15개 구성 -->
    		<!-- → submit 액션 처리 -->
    		
    		<table class="table">
    			<tr>
    				<th>이름</th>
    				<td>
    					<!-- 				
    					<input type="text" name="name1">
    					<input type="text" name="name2">
    					<input type="text" name="name3">
    					<input type="text" name="name4">
    					<input type="text" name="name5">
    				 	-->
    				 	<!-- 선언 -->
    				 	<c:set var="i" value="1"></c:set>
    				 	<c:forEach var="a" begin="1" end="5" step="1">
    				 		<%-- <input type="text" name="name${a}" /> --%>
    				 		<input type="text" name="name${i}" />
    				 		<%-- 동일한 이름의 변수가 있으면 덮어쓰기 됨! --%>
    				 		<c:set var="i" value="${i+1 }"></c:set>
    				 	</c:forEach>
    				</td>
    			</tr>
    			<tr>
    				<th>전화번호</th>
    				<td>
    					<!-- 
    					<input type="text" name="tel1" />
    					<input type="text" name="tel2" />
    					<input type="text" name="tel3" />
    					<input type="text" name="tel4" />
    					<input type="text" name="tel5" />
    					 -->
    					<c:set var="i" value="1"></c:set>
    				 	<c:forEach var="a" begin="1" end="5" step="1">
    				 		<input type="text" name="tel${i}" />
    				 		<c:set var="i" value="${i+1 }"></c:set>
    				 	</c:forEach>
    				</td>
    			</tr>
    			<tr>
    				<th>주소</th>
    				<td>
    					<!-- 
    					<input type="text" name="addr1" />
    					<input type="text" name="addr2" />
    					<input type="text" name="addr3" />
    					<input type="text" name="addr4" />
    					<input type="text" name="addr5" />
    					-->
    					<c:set var="i" value="1"></c:set>
    				 	<c:forEach var="a" begin="1" end="5" step="1">
    				 		<input type="text" name="addr${i}" />
    				 		<c:set var="i" value="${i+1 }"></c:set>
    				 	</c:forEach>					
    				</td>
    			</tr>
    			<tr>
    				<td colspan="2">
    					<button type="submit" class="btn" >입력</button>
    				</td>
    			</tr>
    		</table>
    	</form>
    </div>
    
    <%-- 내 풀이
    <div>
    	<form action="MemberInsert.jsp">
    		
    		<!-- (이름, 전화번호, 주소) * 5명 분 입력 폼 구성 -->
    		<!-- → 각각의 입력 컨트롤 15개 구성 -->
    		<!-- → submit 액션 처리 -->
    		
    		<c:forEach var="a" begin="1" end="5" step="1">
    		회원 ${a}
    		<div>
    			이&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;름 <input type="text" name="name${a}" class="txt"/><br>
    			전화번호 <input type="text" name="tel${a}" class="txt"/><br>
    			주&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;소 <input type="text" name="addr${a}" class="txt" />
    		</div>
    		<br>
    		</c:forEach>
    		
    		<button type="submit" class="btn" style="width: 300px; height: 50px;">입력</button>
    		
    	</form>
    </div>
    --%>
    </body>
    </html>

    <%@page import="java.util.List"%>
    <%@page import="java.util.ArrayList"%>
    <%@page import="com.test.MemberDTO"%>
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <%
    	// MemberInsert.jsp
    	
    	// 5명 분 데이터 수신 → 객체 구성 → 자료구조 활용 → setAttribute() → MemberList.jsp 로 넘김
    	//						 MemberDTO 
    	
    	List<MemberDTO> lists= new ArrayList<MemberDTO>();
    
    	for(int i=1; i<=5; i++)
    	{
    		MemberDTO ob = new MemberDTO( request.getParameter("name"+i)
    									, request.getParameter("tel"+i)
    									, request.getParameter("addr"+i));
    		lists.add(ob);
    	}
    	
    	request.setAttribute("lists", lists);
    	
    	// dispatcher 로 넘기는 것도 가능 
    	
    %>
    <jsp:forward page="MemberList.jsp"></jsp:forward>
    <%-- 내 풀이
    <%
    	// MemberInsert.jsp
    	
    	// 5명 분 데이터 수신 → 객체 구성 → 자료구조 활용 → setAttribute() → MemberList.jsp 로 넘김
    	//						 MemberDTO 
    	
    	// DTO 를 담을 리스트 구성
    	ArrayList<MemberDTO> list = new ArrayList<MemberDTO>(); 
    	
    	// 전송 받은 값 가져오기
    	for(int i=1; i<=5; i++)
    	{
    		MemberDTO dto = new MemberDTO(request.getParameter("name"+i),request.getParameter("tel"+i),request.getParameter("addr"+i));
    		// 리스트에 값 담기
    		list.add(dto);
    	}
    
    	// 리스트 setAttribute() 하기
    	request.setAttribute("list", list);
    	
    	// MemberList.jsp 로 넘기기
    	//response.sendRedirect("MemberList.jsp");	
    %>
    <jsp:forward page="MemberList.jsp"></jsp:forward>
     --%>

    <%@page import="com.test.MemberDTO"%>
    <%@page import="java.util.ArrayList"%>
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>MemberList.jsp</title>
    <link rel="stylesheet" type="text/css" href="css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>JSTL 코어(Core) 문제 해결</h1>
    	<h2>회원 명단 출력</h2>
    	<hr>
    </div>
    
    <div>
    	<!-- 5명 분의 이름, 전화번호, 주소 출력 -->
    	
    	<table class="table">
    		<tr>
    			<th>이름</th>
    			<th>전화번호</th>
    			<th>주소</th>
    		</tr>
    
    	
    	<c:forEach var="dto" items="${lists}">
    		<tr>
    			<td>${dto.name }</td>
    			<td>${dto.tel }</td>
    			<td>${dto.addr }</td>
    		</tr>
    	</c:forEach>
    	
    	</table>
    	
    	<%-- 내 풀이 
    	<c:forEach var="dto" items="${list}">
    		<ul>
    			<li>이름 : ${dto.name} </li>
    			<li>전화번호 : ${dto.tel} </li>
    			<li>주소 : ${dto.addr} </li>
    		</ul>
    	</c:forEach>
    	--%>
    </div>
    
    </body>
    </html>

    package com.test;
    
    public class MemberDTO
    {
    	// 주요 속성 구성
    	private String name, tel, addr;
    
    	// 사용자 정의 (default) 생성자 추가
    	public MemberDTO()
    	{
    	}
    	
    	// 사용자 정의 생성자 구성
    	public MemberDTO(String name, String tel, String addr)
    	{
    		//super();
    		this.name = name;
    		this.tel = tel;
    		this.addr = addr;
    	}
    
    	// getter / setter 구성 
    	public String getName()
    	{
    		return name;
    	}
    
    	public void setName(String name)
    	{
    		this.name = name;
    	}
    
    	public String getTel()
    	{
    		return tel;
    	}
    
    	public void setTel(String tel)
    	{
    		this.tel = tel;
    	}
    
    	public String getAddr()
    	{
    		return addr;
    	}
    
    	public void setAddr(String addr)
    	{
    		this.addr = addr;
    	}
    	
    }
    728x90
Designed by planet-si