EL & JSTL

Let's Just Go·2022년 5월 30일
0

JSP

목록 보기
7/12

EL(Expression Language)

EL

  • EL(Expression Language)
    • JSP에서 저장 객체를 출력할 때 Scripting 을 전혀 사용하지 않을 수 있는 것

    • <%= value %> → EL ${value}

    • EL은 jsp의 내장 객체에 접근할 수 있음

    • EL은 내장 객체(request와 response)의 값을 가져오는 기능을 편리하게 사용 가능

    • 화면에 쉽게 표현하기 위해 사용하는 언어

      <%@ page language="java" contentType="text/html; charset=UTF-8"
          pageEncoding="UTF-8"%>
      <!DOCTYPE html>
      
      	<%
      		String name = request.getParameter("name");
      		String nick = request.getParameter("nick");
      	%> 
      <html>
      <head>
      <meta charset="UTF-8">
      <title>Insert title here</title>
      </head>
      <body>
       	<p>
      		# Scripting<br>
      		# 이름 : <%= name %> <br>
      		# 별명 : <%= nick %> <br>
      	</p> 
      <hr>
      	
      	<%-- 
      		EL에서 데이터를 참조할 때 영역을 명시하지 않는다면 
      		page -> request -> session -> application
      		순서대로 검색하여 찾아내서 표현 
      		
      	 --%>
      	<p>
      		# EL(Expression Language)<br>
      		# 이름 : ${param.name}<br>
      		# 별명 : ${param.nick}<br> 
      	</p>
      	
      	<%
      		session.setAttribute("data1", "hello");
      		application.setAttribute("data2", "bye~");
      		session.setAttribute("data2", "이름은 같지만 다른 데이터");
      		
      	%>
      	
      	<a href = "EL_result.jsp">세션,어플리케이션 데이터를 화면에 출력</a>
      
      </body>
      </html>

      <%@ 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>
      	
      	<p>
      		# Scripting <br>
      		# data1 : <%= session.getAttribute("data1") %><br>
      		# data2 : <%= application.getAttribute("data2") %><br>
      		
      	</p>
      	
      	<hr>
      	
      	<p>
      		# EL <br>
      		# data1 : ${data1 }<br>
      		# data2(application) : ${applicationScope.data2 }<br>
      		# data2(session) : ${sessionScope.data2 }<br>
      		<%-- EL은 내장객체에 동일한 이름을 알아서 찾아줌 --%>
      		<%-- 특별히 명세하고 싶을 때 : 내장객체이름Scope.이름 --%>
      	</p>
      </body>
      </html>

      <%@ 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>
      	
      	<p>
      		# Scripting <br>
      		# data1 : <%= session.getAttribute("data1") %><br>
      		# data2 : <%= application.getAttribute("data2") %><br>
      		
      	</p>
      	
      	<hr>
      	
      	<p>
      		# EL <br>
      		# data1 : ${data1 }<br>
      		# data2(application) : ${applicationScope.data2 }<br>
      		# data2(session) : ${sessionScope.data2 }<br>
      		<%-- EL은 내장객체에 동일한 이름을 알아서 찾아줌 --%>
      		<%-- 특별히 명세하고 싶을 때 : 내장객체이름Scope.이름 --%>
      	</p>
      </body>
      </html>

      <%@page import="kr.com.jsp.user.model.UserVO"%>
      <%@ 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>
      
      	<%
      		UserVO vo = (UserVO) session.getAttribute("member");
      		// member라는 이름의 UserVO객체를 가져옴
      	%>
      	
      	<p>
      		# 이름 : <%= vo.getUser_name() %> <br>
      		# 아이디 : <%= vo.getUser_id() %> <br>
      		# 이메일 : <%= vo.getUser_email() %> <br>
      		# 주소 : <%= vo.getUser_address() %>
      	</p>
      	
      	<hr>
      	
      	<p>
      		# 이름 : ${sessionScope.member.user_name} <br>
      		# 아이디 : ${member.user_id }<br>
      		# 이메일 : ${member.user_email }<br>
      		# 주소 : ${member.user_address }<br>
      		
      		<%-- getname이 아니고 user_name을 써야함	  
      		--%>
      	</p>
      </body>
      </html>

JSTL (JSP Standard Tag Library)

JSTL

  • JSTL
    • JSP는 HTML 태그와 같이 사용되어서 전체 코드의 가독성이 떨어짐
    • JSP 페이지에서 자바 코드를 바로 사용하지 않고 로직을 내장하는 효율적인 방법 제공
    • JSTL을 사용하면 자바의 제어문을 HTML 태그화 시킬 수 있음
    • 별도의 라이브러리를 설치
    • https://mvnrepository.com/artifact/javax.servlet/jstl/1.2 설치
    • jdbc파일이 있는 폴더(WebContent/WEB-INF/lib)에 라이브러리 추가

  • JSTL IF
    • 단일 조건문

    • http://localhost:8181/MyWeb/JSTL/jstl_if.jsp?age=15 하면 값을 지정가능

    • JSTL을 사용하기 위해서 외부 태그 라이브러리 선언해야 JSTL 사용 가능

    • <c:set ~~~>을 통해 값 선언 가능

      <%@ page language="java" contentType="text/html; charset=UTF-8"
          pageEncoding="UTF-8"%>
          
      
      <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
      
      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="UTF-8">
      <title>Insert title here</title>
      </head>
      <body>
      	<%-- c:set을 사용하게 되면 변수 선언 가능  
      		 JSTL로 변수를 선언하면 EL안에서 활용가능 
      		 값도 EL을 이용해서 매겨줄 수 있음 
      		 EL이 타입을 자동으로 인식해서 정해줌 
      		 내장 객체를 지정할 수도 있음
      		 그냥 setAttribute랑 같다고 생각하면 될 듯? --%>
      	<c:set var="age" value ="${param.age}" />
      	<%-- c:set을 이용해서 지정한 변수는 scriptlet의 자바 변수와는 다르고 
      		 내장객체에 지정하는 데이터로 활용되기 때문에 EL이 가능  --%>
      	<p>
      		나이 : ${age }세 <br>
      	<%-- http://localhost:8181/MyWeb/JSTL/jstl_if.jsp?age=15을 통해 값 화면에 출력 가능  --%>
      		
      		<%-- 조건문 활용  --%>
      		<c:if test="${age >= 20}">
      			<h2>당신은 성인입니다.</h2>
      		</c:if>
      	</p>
      	
      </body>
      </html>

  • JSTL CHOOSE
    • 다중 조건문

    • choose 태그 안에서는 when 태그를 무제한으로 작성할 수 있음

    • http://localhost:8181/MyWeb/JSTL/jstl_choose.jsp?age=1을 통해서 값을 받아서 화면 출력 가능

      <%@ page language="java" contentType="text/html; charset=UTF-8"
          pageEncoding="UTF-8"%>
          
          
      <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="UTF-8">
      <title>Insert title here</title>
      </head>
      <body>
      
      	<c:set var="age" value = "${param.age }" />
      		
      		# 이름 : ${param.name }<br>
      		# 나이 : ${age }<br>
      		
      	<c:choose>
      		<c:when test="${age >= 20 }">
      			<c:choose>
      				<c:when test="${age >= 40 }">
      					<h3>장년층 입니다.</h3>
      				</c:when>
      				
      				<c:otherwise>
      					<h3>청년층 입니다.</h3>
      				</c:otherwise>
      			</c:choose>
      		</c:when>
      		
      		<c:when test="${age >= 17 }">
      			<h3>당신은 고등학생입니다.</h3>
      		</c:when>
      		
      		<c:when test="${age >= 14 }">
      			<h3>당신은 중학생입니다.</h3>
      		</c:when>
      		
      		<c:when test="${age >= 8 }">
      			<h3>당신은 초등학생입니다.</h3>
      		</c:when>
      		
      		<c:otherwise>
      			<h3>당신은 완전 애기입니다.</h3>
      		</c:otherwise>
      		
      	</c:choose>
      	<%-- http://localhost:8181/MyWeb/JSTL/jstl_choose.jsp?age=1 --%>
      </body>
      </html>

  • 반복문
    • forEach 구문을 통해서 반복문 수행 가능

      <%@ page language="java" contentType="text/html; charset=UTF-8"
          pageEncoding="UTF-8"%>
          <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
          
      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="UTF-8">
      <title>Insert title here</title>
      </head>
      <body>
      
      <%-- 	<%
      		int total = 0;
      		for (int i = 1; i<= 100; i++ ){
      			total += i;
      		}
      		out.print("<h4>1부터 100까지의 누적합 : "+ total + "<br>" );
      	%> --%>
      	
      	<c:set var = "total" value = "0" />
      	<%-- 변수 선언 --%>
      	<c:forEach var = "i" begin ="1" end = "100" step = "1">
      		<c:set  var = "total" value = "${total + i }"/>
      	</c:forEach>
      	
      	<h4>1부터 100까지의 누적합 : ${total }</h4>
      	
      	<hr>
      	
      	<h4>구구단 4단</h4>
      	
      	<c:forEach var = "hang" begin = "1" end = "9">
      		4 X ${hang } = ${4*hang }<br>		
      	
      	</c:forEach>
      	
      	<hr>
      	
      	짝수 단 출력 <br>
      	<hr>
      	
      	
      	
      	<c:forEach var = "front" begin = "2" end = "9" step = "2">
      		<c:forEach var = "back" begin = "1" end = "9" >
      			${front } x ${back } = ${front * back }<br>
      		
      		</c:forEach>
      		${'-------------------------------------------'}<br>
      	</c:forEach>
      	
      	
      	<h2>배열이나 컬렉션 내부의 값을 출력</h2>
      	<c:set var = "arr" value="<%=new int[] {1, 3, 5, 7, 9} %>"/>
      	<c:forEach var = "n" items = "${arr }">
      	<%-- 배열은 items를 통해서 값 출력 --%>
      	  ${n }
      		
      	
      	</c:forEach>
      </body>
      </html>
profile
안녕하세요! 공부한 내용을 기록하는 공간입니다.

0개의 댓글