JSTL (JSP Standard Tag Library)
JSP 개발을 단순화하기위한 태그 library
장점
- 빠른 개발 -> JSP를 단순화하는 많은 태그를 제공
- 코드 재사용성 -> 다양한 페이지에서 JSTL 태그 사용 가능
- 스크립틀릿 태그를 사용할 필요가 없음 (스크립틀릿 태그를 사용하지 않음)
★ Ex1
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="https://fonts.googleapis.com/css2?family=Dokdo&family=Gaegu&family=Gugi&family=Nanum+Pen+Script&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.5.0.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<%
request.setAttribute("siteName", "JSPStudy.co.kr");
%>
<title>Expression Language</title>
</head>
<body>
<h2>EL의 기본문법1</h2>
사이트명: <b>${siteName}</b>
</body>
</html>
★ Ex2
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!-- EL문법 무시 -->
<%@ page isELIgnored="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="https://fonts.googleapis.com/css2?family=Dokdo&family=Gaegu&family=Gugi&family=Nanum+Pen+Script&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.5.0.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<%
request.setAttribute("siteName", "JSPStudy.co.kr");
%>
<title>Expression Language</title>
</head>
<body>
<h2>EL의 기본문법2</h2>
사이트명: <b>${siteName }</b>
</body>
</html>
★ Ex3_scope1
그냥 sum으로 넣어도 됨
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="https://fonts.googleapis.com/css2?family=Dokdo&family=Gaegu&family=Gugi&family=Nanum+Pen+Script&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.5.0.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<title>Insert title here</title>
</head>
<body>
<h2>EL의 Scope1</h2>
<%
int sum= 0;
for(int i=1; i<=10; i++)
sum+=i;
/* request 저장소에 sum 속성으로 1~10까지의 합을 저장함 */
request.setAttribute("sum", new Integer(sum));
%>
<!-- foward 액션태그를 사용하여 scope2.jsp를 포워드함 -->
<jsp:forward page="scope2.jsp"/>
</body>
</html>
★ Ex3_scope2
주소창 : http://localhost:8067/JspMiniProject/JSTL/scope1.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="https://fonts.googleapis.com/css2?family=Dokdo&family=Gaegu&family=Gugi&family=Nanum+Pen+Script&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.5.0.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<%
pageContext.setAttribute("msg", "꿈은 이루어 진다");
%>
<title>Insert title here</title>
</head>
<body>
<h2>EL의 Scope1</h2>
<!-- pageContext에 저장된 값 출력 -->
msg(pageScope로 받은값): <b>${pageScope.msg}</b><p/>
<!-- request에 저장된 값을 표현식을 이용해출력 -->
1에서 10까지의 합(request로 받은값): <b><%=request.getAttribute("sum") %></b><p/>
1에서 10까지의 합(requestScope로 받은값): <b>${requestScope.sum }</b><p/>
</body>
</html>
★ Ex4_scope3
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="https://fonts.googleapis.com/css2?family=Dokdo&family=Gaegu&family=Gugi&family=Nanum+Pen+Script&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.5.0.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<%
/* session 저장소의 id 속성에 'rorod'라는 문자열 저장 */
session.setAttribute("id", "rorod");
/* application 저장소에 siteName 속성에 문자열 저장 */
application.setAttribute("siteName", "JSPStudy.co.kr");
%>
<title>Insert title here</title>
</head>
<body>
<h2>EL의 Scope2</h2>
<!-- scope3에서 요청된 모든 정보를 가지고 scope4로 제어권 넘어감 -->
<jsp:forward page="scope4.jsp"/>
</body>
</html>
★ Ex4_scope4
주소창 : http://localhost:8067/JspMiniProject/JSTL/scope3.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="https://fonts.googleapis.com/css2?family=Dokdo&family=Gaegu&family=Gugi&family=Nanum+Pen+Script&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.5.0.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<title>Insert title here</title>
</head>
<body>
<h2>EL의 Scope?</h2>
<!-- EL의 문법으로 id 속성값을 출력 -->
id(sessionScope로 받은값): <b>${sessionScope.id}</b><p/>
<!-- EL의 문법으로 siteName 속성값 출력 -->
siteName(applicationScope로 받은값): <b>${applicationScope.siteName }</b><p/>
</body>
</html>
★ Ex5_param1.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<h2>EL의 param1</h2>
<form method="post" action="param1.jsp">
id: <input name="id"><br>
pass: <input type="password" name="pwd"><br>
<input type="submit" value="LOGIN">
</form>
</body>
</html>
★ Ex5_param1.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="https://fonts.googleapis.com/css2?family=Dokdo&family=Gaegu&family=Gugi&family=Nanum+Pen+Script&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.5.0.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<title>Insert title here</title>
</head>
<body>
<h2>EL의 param1</h2>
<!-- 매개변수로 받은 id를 EL 문법으로 출력합니다 -->
id: ${param.id }<br>
<!-- 매개변수로 받은 pw를 다른 방법의 EL문법으로 출력 -->
pass: ${param["pwd"] }<br>
</body>
</html>
★ Ex6_param2.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<h2>EL의 param2</h2>
<form method="post" action="param2.jsp">
name: <input name="name"><br>
hobby: <input type="checkbox" name="hobby" value="독서">독서
<input type="checkbox" name="hobby" value="여행">여행
<input type="checkbox" name="hobby" value="게임">게임
<input type="checkbox" name="hobby" value="영화">영화
<input type="checkbox" name="hobby" value="운동">운동
<br>
<input type="submit" value="SAVE">
</form>
</body>
</html>
★ Ex6_param2.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="https://fonts.googleapis.com/css2?family=Dokdo&family=Gaegu&family=Gugi&family=Nanum+Pen+Script&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.5.0.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<title>Insert title here</title>
</head>
<body>
<%
/* 폼으로 넘겨받을 때 엔코딩은 필수 */
request.setCharacterEncoding("utf-8");
%>
<h2>EL의 param2</h2>
name: ${param.name }<br>
<!-- param2.html에서 checkbox에서 체크된 첫번째 hobby 속성값을 출력 -->
hobby: ${paramValues.hobby[0] }
${paramValues.hobby[1] }
${paramValues.hobby[2] }
${paramValues.hobby[3] }
${paramValues.hobby[4] }
</body>
</html>
★ Ex7_empty
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="https://fonts.googleapis.com/css2?family=Dokdo&family=Gaegu&family=Gugi&family=Nanum+Pen+Script&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.5.0.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<title>Insert title here</title>
</head>
<body>
<h2>EL의 Empty</h2>
<!-- empty 연산자를 통해 요청된 name 속성 값 유무를 판단한다 -->
name의 요청 여부: <b>${empty param.name }</b><br>
<!-- name속성에 'rorod'값을 가지고 자신의 페이지를 요청 -->
<a href="empty.jsp?name=rorod">name값이 있는 요청</a> ||
<a href="empty.jsp">name값이 없는 요청</a>
</body>
</html>
★ Ex7_array1
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%
String studyArr[] = {"Java", "JSP", "Android", "Spring"};
/* pageContext 저장소에 study 속성으로 studyArr 배열객체를 저장 */
pageContext.setAttribute("study", studyArr);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="https://fonts.googleapis.com/css2?family=Dokdo&family=Gaegu&family=Gugi&family=Nanum+Pen+Script&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.5.0.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<title>Insert title here</title>
</head>
<body>
<h2>EL의 Array1</h2>
<b>Java Program 과목</b>
<hr width="150" align="left">
1. ${study[0] }<br>
2. ${study[1] }<br>
3. ${study[2] }<br>
4. ${study[3] }<br>
</body>
</html>
★ Ex7_array2
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<%
ArrayList<String> familyList = new ArrayList<String>();
String nameArr[] = {"simba", "rorod", "tina", "poli"};
for(int i=0; i<nameArr.length; i++){
familyList.add(nameArr[i]);
}
/* pageContext 저장소에 Family 속성으로 ArrayList 타입의 familyList 객체를 저장함 */
pageContext.setAttribute("Family", familyList);
%>
<html>
<head>
<meta charset="utf-8">
<link href="https://fonts.googleapis.com/css2?family=Dokdo&family=Gaegu&family=Gugi&family=Nanum+Pen+Script&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.5.0.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<title>Insert title here</title>
</head>
<body>
<h2>EL의 Array2</h2>
<b>Family List</b>
<hr width="135" align="left">
1. ${Family[0] }<br>
2. ${Family[1] }<br>
3. ${Family[2] }<br>
4. ${Family[3] }<br>
</body>
</html>
☆ JSTL 설치
◎ JSTL 설치방법
https://codedragon.tistory.com/4343
◎ JSTL
http://tomcat.apache.org/taglibs/standard/
Apache Taglibs - Apache Standard Taglib: JSP[tm] Standard Tag Library (JSTL) implementations
◎ 압축해제 후 lib 폴더에 있는 jstl.jar와 standard.jar를 복사 후 WEB-INF/lib 폴더에 저장
◎ JSTL 기본 사용법
[JSP] JSTL 사용 방법 - 주요 태그 문법 정리
JSTL을 사용하려면 라이브러리가 필요하다. 라이브러리 다운로드 및 프로젝트 세팅은 이 포스트를 참고한다. 태그 라이브러리 선언 자바에서 import문을 선언하듯 JSP에서도 JSTL 확장 태그를 사용
atoz-develop.tistory.com
◎ core 태그 사용을 위해 아래의 코드를 선언해야한다.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
'프로그래밍 > JSTL' 카테고리의 다른 글
2021년 11월 11일 - JSTL 기초 (0) | 2021.11.11 |
---|
댓글