[Naver Cloud Camp 7] 교육 정리
네이버 클라우드 캠프 87일차 230828
우기37
2023. 8. 29. 09:43
## 교육정리
1) JSTL
#1 JSTL
JSTL(JSP Standard Tag Library)? )
- JSP 확장 태그이다.
- 기본으로 제공하지 않는다.
- JSTL API를 구현한 외부 라이브러리를 가져와서 사용해야 한다.
I18N(Internationalization 의 약자)
=> 프로그램을 짤 때 여러 언어를 고려해서 코딩하는 것을 말한다.
=> 특히 화면에서 버튼에 제목이나 라벨을 출력할 때 특정 언어로 고정된 값을 출력하지 않고,
외부 파일(예: label_ko_KR.properties)에서 읽어 온 값을 출력하도록 프로그래밍 하는 것.
L10N(Localization 의 약자)
=> 특정 언어에 대해 라벨 텍스트를 담은 프로퍼티 파일(예: label_ko_KR.properties)을
작성하는 것을 말한다.
JSTL - c:out 예제)
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
trimDirectiveWhitespaces="true"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
<h1>JSTL - c:out</h1>
<%--
- 출력문을 만드는 태그이다.
<c:out value="출력될 값" default="기본 값"/>
<c:out value="출력될 값>기본값<c:out>
--%>
<%
pageContext.setAttribute("name", "유관순");
%>
<c:out value="임꺽정"/><br>
<c:out value="${null}" default="홍길동"/><br>
<c:out value="${null}">홍길동</c:out><br>
<c:out value="${'임꺽정'}" default="홍길동"/><br>
<c:out value="${name}" default="홍길동"/><br>
<c:out value="${name2}" default="홍길동"/><br>
</body>
</html>
실행결과)
JSTL - c:remove 예제)
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
trimDirectiveWhitespaces="true"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
<h1>JSTL - c:remove</h1>
<pre>
- 보관소에 저장된 값을 제거한다.
</pre>
<%
pageContext.setAttribute("name", "홍길동");
request.setAttribute("name", "임꺽정");
session.setAttribute("name", "유관순");
application.setAttribute("name", "김구");
%>
1: ${pageScope.name}<br>
2: ${requestScope.name}<br>
3: ${sessionScope.name}<br>
4: ${applicationScope.name}<br>
<hr>
<c:remove var="name" scope="page"/>
1: ${pageScope.name}<br>
2: ${requestScope.name}<br>
3: ${sessionScope.name}<br>
4: ${applicationScope.name}<br>
<hr>
<c:remove var="name" scope="request"/>
1: ${pageScope.name}<br>
2: ${requestScope.name}<br>
3: ${sessionScope.name}<br>
4: ${applicationScope.name}<br>
<hr>
<c:remove var="name" scope="session"/>
1: ${pageScope.name}<br>
2: ${requestScope.name}<br>
3: ${sessionScope.name}<br>
4: ${applicationScope.name}<br>
<hr>
<c:remove var="name" scope="application"/>
1: ${pageScope.name}<br>
2: ${requestScope.name}<br>
3: ${sessionScope.name}<br>
4: ${applicationScope.name}<br>
</body>
</html>
실행결과)
JSTL - c:if 예제)
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
trimDirectiveWhitespaces="true"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
<h1>JSTL - c:if</h1>
<pre>
- 조건문을 만든다.
</pre>
<c:set var="name" value="홍길동"/>
<c:set var="age" value="16"/>
<c:set var="gender" value="man"/>
<c:if test="${not empty name}">
<p>${name}님 환영합니다!
</c:if>
<c:if test="${age < 19}">
<p>미성년입니다.</p>
</c:if>
<c:if test="${age >= 19}">
<p>성년입니다.</p>
</c:if>
<hr>
<h2>조건문의 결과를 보관소에 저장하기</h2>
<pre>
var 속성으로 변수이름을 설정하면, 조건문의 테스트 결과는 지정된 이름으로 보관소에 저장된다.
</pre>
<c:if test="${gender == 'woman'}" var="r1"/>
${r1}<br>
${pageScope.r1 ? "여성" : "남성"}<br>
</body>
</html>
실행결과)
JSTL - c:forEach 예제)
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
trimDirectiveWhitespaces="true"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
<h1>JSTL - c:forEach</h1>
<pre>
- 반복문을 만든다.
</pre>
<h2>배열</h2>
<%
pageContext.setAttribute("names", new String[]{"홍길동", "임꺽정", "유관순"});
%>
<hr>
<ul>
<%
String[] names = (String[]) pageContext.getAttribute("names");
for (String n : names) {%>
<li><%=n%></li>
<%} %>
</ul>
<hr>
<ul>
<c:forEach items="${names}" var="n">
<li>${n}</li>
</c:forEach>
</ul>
<h2>Collection 객체</h2>
<%
List<String> names2 = new ArrayList<>();
names2.add("홍길동");
names2.add("임꺽정");
names2.add("유관순");
pageContext.setAttribute("names2", names2);
%>
<ul>
<c:forEach items="${names2}" var="n">
<li>${n}</li>
</c:forEach>
</ul>
<h2>Map 객체</h2>
<%
Map<String,Object> names3 = new HashMap<>();
names3.put("s01", "홍길동");
names3.put("s02", "임꺽정");
names3.put("s03", "유관순");
pageContext.setAttribute("names3", names3);
%>
<ul>
<%-- Map 객체에 대해 반복문을 돌리면 var로 저장되는 것은
key와 value를 갖고 있는 Entry 객체이다. --%>
<c:forEach items="${names3}" var="n">
<li>${n.getKey()} : ${n.getValue()} => ${n.key} : ${n.value}</li>
</c:forEach>
</ul>
<h2>CVS(comma separated value) 문자열</h2>
<%
pageContext.setAttribute("names4", "홍길동,임꺽정,유관순,김구");
%>
<ul>
<c:forEach items="${names4}" var="n">
<li>${n}</li>
</c:forEach>
</ul>
</body>
</html>
실행결과)
JSTL - c:forTokens 예제)
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
trimDirectiveWhitespaces="true"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
<h1>JSTL - c:forTokens</h1>
<pre>
- 반복문을 만든다.
</pre>
<h2>CVS 문자열</h2>
<%
pageContext.setAttribute("names1", "홍길동,임꺽정,유관순,김구");
/*
String str = (String) pageContext.getAttribute("names1");
String[] values = str.split(",");
for (String n : values) {
out.println("<li>" + n + "</li>");
}
*/
%>
<ul>
<c:forTokens items="${names1}" var="n" delims=",">
<li>${n}</li>
</c:forTokens>
</ul>
<h2>Query String 문자열</h2>
<%
pageContext.setAttribute("qs", "name=홍길동&age=20&tel=1111-2222");
%>
<ul>
<c:forTokens items="${pageScope.qs}" var="n" delims="&">
<li>${n}</li>
</c:forTokens>
</ul>
</body>
</html>
실행결과)
JSTL - c:url 예제)
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
trimDirectiveWhitespaces="true"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
<h1>JSTL - c:url</h1>
<pre>
- 복잡한 형식의 URL을 만들 수 있다.
</pre>
<h2>네이버 검색 URL 만들기</h2>
<pre>
https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%ED%99%8D%EA%B8%B8%EB%8F%99
</pre>
<c:url value="https://search.naver.com/search.naver" var="naverUrl">
<c:param name="where" value="nexearch"/>
<c:param name="sm" value="top_hty"/>
<c:param name="fbm" value="1"/>
<c:param name="ie" value="utf8"/>
<c:param name="query" value="홍길동"/>
</c:url>
<pre>${naverUrl}</pre>
</body>
</html>
실핼결과)
JSTL - c:import 예제)
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
trimDirectiveWhitespaces="true"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
<h1>JSTL - c:import</h1>
<pre>
- HTTP 요청을 수행하는 코드를 만든다.
</pre>
<h2>HTTP 요청하기</h2>
<c:url value="ex10_sub.jsp"
var="url1">
<c:param name="name" value="홍길동"/>
<c:param name="age" value="20"/>
<c:param name="gender" value="woman"/>
</c:url>
<pre>${url1}</pre>
<%-- 지정된 URL을 요청하고 서버로부터 받은 콘텐트를 contents라는 이름으로
PageContext 보관소에 저장한다. --%>
<c:import url="${url1}" var="contents"/>
<textarea cols="120" rows="20">${pageScope.contents}</textarea>
<c:import url="https://www.naver.com" var="contents2"/>
<textarea cols="120" rows="20">${pageScope.contents2}</textarea>
</body>
</html>
## 교육정리