JSP - EL/JSTL

JSP Action Tag

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

 

표준 액션 태그

JSP:include

<%@ include file="파일명" %> 과 쓰임은 도일하나

jsp파일이 java파일로 변환될 때 사입되는 <%@ include %>와는 달리 jsp 파일이 java파일로 바뀌고 컴파일이 완료되어 런타임 시 삽입

 

header.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>
	<header style="height:200px; background:red;">
		<h1>헤더부분 입니다.</h1>
	</header>
</body>
</html>

 

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>
	<jsp:include page="header.jsp"/>
	<h1> 컨텐츠 부분입니다.</h1>
</body>
</html>

jsp:forward

하나의 JSP페이지에서 다른 JSP페이지로 요청 처리를 전달할 때 사용 전달하는 페이지에서 request, response객체가 같이전달되며 URL은 변경되지 않음

<%@ 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>
	<!-- index.jsp로 포워딩처리 -->
	<jsp:forward page="index.jsp"/>
</body>
</html>

 

EL

JSP 2.0버전에서 추가됨

<%= %>, out.print()와 같이 JSP에 쓰이는 Java코드를 간결하게 사용하는 방법으로 화면에 표현하고자 하는 코드를 %{value} 형식으로 표현하여 작성

 

form.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>
	<form action="indexGo.jsp" method="get">
		이름 : <input type="text" name="name"> <br>
		나이 : <input type="text" name="age"> <br>
		성별 : <input type="text" name="gender"> <br>
		<input type="submit" value="전송">
	</form>
</body>
</html>

 

 

indexGo.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>
	<%--
		원래 jsp 스트립틀릿 이용해서 파라미터값 가져올려면
		request.getParameter("name") 이런식으로 받아왔어야했는데 EL에서는 param.네임명 
		으로 값 가져올수 있다.
	 --%>
	<h1>이름 : ${ param.name }</h1>
	<h2>나이 : ${ param.age }</h2>
	<h3>성별 : ${ param.gender }</h3>
</body>
</html>

 

 

JSTL

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

jstl-1.2jar파일 설치후 이클립스 프로젝트 내 WEB-INF/lib 내에 등록하고 사용하고자 하는 jsp파일에 선언을해서 사용해야한다.

 

JSTL 라이브러리 등록

https://mvnrepository.com/artifact/javax.servlet/jstl/1.2

위 링크로 들어가

아래의 JSTL 1.2.jar 파일다운로드한다

 

혹은 아래파일 다운로드 한다.

jstl-1.2.jar
0.40MB

 

그다음에 프로젝트의 WEB-INF/lib/... 에다가 라이브러리 붙여넣기한다.

이러면 JSTL 사전준비는끝!

 

JSTL 태그 종류

Core Tags : 변수와 url, 조건문, 반복문 등의 로직과 관련된 JSTL문법 제공

<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>

 

Formatting : 메세지 형식이나 숫자, 날짜 형식과 관련된 포맷 방식 제공

<%@ taglib uri=“http://java.sun.com/jsp/jstl/fmt” prefix=“fmt” %>

 

Function : trim, substring과 같은 여러 문자열 처리 함수 제공

 

그외

XML Tags, SQL Tags 의 두가지 가 존재하는데 많이안쓰여서 패스하였다.

 

Core Tags

jsp파일의 상단에 아래처럼 입력

아래의 taglib를 입력해야 jstl 라이브러리 사용가능

prefix 는 접두사를의미 보편적으로 CoreTags는 c 접두사를 사용함

 

c:set

변수를 선언하고 나서 그 변수에 초기 값 대입

자바의 변수라고 생각하면된다. 하지만 c:set은 항상 초기값 입력해줘야함.

 

index.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="name" value="홍길동"/>
	<c:set var="age" value="66"/>
	
	이름 : ${ name } <br>
	나이 : ${ age }
</body>
</html>

 

c:set scope 속성

scope속성을 이용하면 page영역 뿐만 아니라 request, session,application 영역에 속성 저장 가능 (미 설정 시 기본 값은 apge)

 

index.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>
	<%--
		아래방식은 서블릿은
		request.setAttribute();
		session.setAttribute();
		랑 비슷한 맥락임
	 --%>
	<c:set var="name" value="김가나" scope="request"/>
	<c:set var="gender" value="남" scope="session"/>
	
	이름 : ${ name } <br>
	성별 : ${ gender }
</body>
</html>

 

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>
	<c:set var="colorArr" scope="request">
		red, yellow, green, silver, pink
	</c:set>
	
	색상 : ${ colorArr }
</body>
</html>

배열은 forEach할때 사용할예정

 

c:remove

<c:set>으로 선언한 변수는 page, request, session, application영역에 속성으로 저장되기 때문에 삭제해야 할 필요가 있을 때 사용

 

<%@ 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="name" value="홍길동" scope="page"/>
	<c:set var="name" value="김길동" scope="request"/>
	<c:set var="name" value="이길동" scope="session"/>
	<c:set var="name" value="나길동" scope="application"/>
	
	<%-- session의 name삭제 --%>
	<c:remove var="name" scope="session"/>
	page : ${pageScope.name } <br>
	request : ${requestScope.name } <br>
	session : ${sessionScope.name } <br>
	application : ${applicationScope.name } <br>
	<br><br>	
	
	<%-- scope 지정하지않고 remove 작성시 "name" 속성 전체삭제됨 --%>
	<c:remove var="name"/>
	page : ${pageScope.name } <br>
	request : ${requestScope.name } <br>
	session : ${sessionScope.name } <br>
	application : ${applicationScope.name } <br>
</body>
</html>

 

c:out

데이터 출력할 때 사용하는 태그로 <, >, & 특수 문자를 자동으로 이스케이프 시퀀스로 바꿔줌

출력할 데이터에 포함된 특수문자를 태그의 일부로 인식시키고 싶을 땐 escapeXml이라는 속성을 추가하고 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>
	<c:out value="<h2>안녕하세요</h2>"></c:out>
	<c:out value="<h2>안녕하세요</h2>" escapeXml="false"></c:out>
</body>
</html>

 

 

c:if

자바 프로그램의 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>
	<c:if test="${1 > 2}">
		<h1>1은 2보다 큽니다.</h1>
	</c:if>
	<c:if test="${1 < 2}">
		<h1>1은 2보다 작습니다.</h1>
	</c:if>
</body>
</html>

 

 

c:choose

자바 프로그램의 switch문과 비슷한 역할을 하는 태그로

<c:when>, <c:otherwise> 태그와 함께 사용되는데, 각각 switch문의 case, default절과 비슷한 역할

<%@ 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="num" value="1"/>
	<c:choose>
		<c:when test="${ num == 1 }">
			<h1>1입니다.</h1>
		</c:when>
		<c:when test="${ num == 2 }">
			<h1>2입니다.</h1>
		</c:when>
		<c:when test="${ num == 3 }">
			<h1>3입니다.</h1>
		</c:when>
		<c:otherwise>
			<h1>일치하는 숫자가 없습니다.</h1>
		</c:otherwise>
	</c:choose>
</body>
</html>

 

num변수의 값이 1일시

num변수의 값이 2일시

num변수의 값이 3일시

num변수의 값이 4일시

 

 

c:foreach

자바의 for, for-in문에 해당하는 기능 제공

 

속성

items 반복할 객체 명
begin 반복이 시작할 요소 번호
end 반복이 끝나는 요소 번호
step 반복할 횟수 번호
var 현재 반복 횟수에 해당하는 변수 이름
varStatus 현재 반복에 해당하는 객체 요소

 

varStatus

current 현재 반복 횟수 상태 값 명.current
index 반복 라운드의 제로기반 인덱스 상태 값 명.index
count 반복 라운드의 1기반 인덱스 상태 값 명.count
first 현재 라운드가 반복을 통한 첫 번째임을 의미 상태 값 명.first
last 현재 라운드가 반복을 통한 마지막 번째임을 의미 상태 값 명.last

 

<%@ 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="sName">
		홍길동, 김길동, 이길동, 사길동, 오길동
	</c:set>
	
	<ul>
	<c:forEach var="name" items="${ sName }" varStatus="nameSt">
		<li>${ nameSt.count } 번 ${name } 학생</li>
	</c:forEach>
	</ul>
</body>
</html>

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유