개발자입니다
[Java] 예제 소스 정리 - EL, JSTL 본문
네이버클라우드 AIaaS 개발자 양성과정 1기/DBMS, SQL, JDBC, Servlet
[Java] 예제 소스 정리 - EL, JSTL
끈기JK 2023. 2. 21. 20:31eomcs-java\eomcs-servlet\app\src\main\webapp
예제 소스 정리
EL
EL 표기법
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
trimDirectiveWhitespaces="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL</title>
</head>
<body>
<h1>EL 표기법</h1>
<%--
- EL(Expression Language)은 콤마(.)와 대괄호([]) 등을 사용하여 객체의 프로퍼티나,
리스트, 셋, 맵 객체의 값을 쉽게 꺼내고 설정하게 도와주는 문법이다.
특히 값을 꺼낼 때는 OGNL 표기법을 사용한다.
- OGNL(Object Graph Navigation Language)?
객체의 프로퍼티 값을 가리킬 때 사용하는 문법이다.
파일의 경로처럼 객체에 포함된 객체를 탐색하여 값을 쉽게 조회할 수 있다.
- 문법
${ 객체명.프로퍼티명.프로퍼티명.프로퍼티명 }
${ 객체명["프로퍼티명"]["프로퍼티명"]["프로퍼티명"] }
- EL에서 사용할 수 있는 객체?
pageContext
- JSP의 PageContext 객체
servletContext
- ${ pageContext.servletContext.프로퍼티명 }
자바코드 => pageContext.getServletContext().get프로퍼티()
session
- ${ pageContext.session.프로퍼티명 }
예) $ { pageContext.session.name }
=> pageContext.getSession().getName();
request
- ${ pageContext.request.프로퍼티명 }
response
param
- ${ param.파라미터명 }
=> request.getParameter("파라미터명");
paramValues
- ${ paramValues.파라미터명 }
=> request.getParameterValues("파라미터명");
header
- ${ header.헤더명 }
=> request.getHeader("헤더명");
headerValues
- ${ headerValues.헤더명 }
=> request.getHeaders("헤더명");
cookie
- ${ cookie.쿠키명 }
- ${ cookie.쿠키명.value }
- ${ cookie.쿠키명.name }
initParam
- ${ initParam.파라미터명 }
=> 보관소에서 값을 꺼내는 문법
pageScope
- ${ pageScope.객체이름 }
=> pageContext.getAttribute("객체이름");
requestScope
- ${ requestScope.객체이름 }
=> request.getAttribute("객체이름");
sessionScope
- ${ sessionScope.객체이름 }
=> session.getAttribute("객체이름");
예) ${ sessionScope.name }
=> session.getAttribute("name");
applicationScope
- ${ applicationScope.객체이름 }
=> application.getAttribute("객체이름");
--%>
</body>
</html>
EL - 보관소에 값 꺼내기
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
trimDirectiveWhitespaces="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL</title>
</head>
<body>
<h1>EL - 보관소에 값 꺼내기</h1>
<%
pageContext.setAttribute("name", "홍길동");
request.setAttribute("name", "임꺽정");
session.setAttribute("name", "유관순");
application.setAttribute("name", "안중근");
%>
PageContext 보관소 : ${pageScope.name}<br>
PageContext 보관소 : <%=pageContext.getAttribute("name")%><br>
ServletRequest 보관소 : ${requestScope.name}<br>
ServletRequest 보관소 : <%=request.getAttribute("name")%><br>
HttpSession 보관소 : ${sessionScope.name}<br>
HttpSession 보관소 : <%=session.getAttribute("name")%><br>
ServletContext 보관소 : ${applicationScope.name}<br>
ServletContext 보관소 : <%=application.getAttribute("name")%><br>
</body>
</html>
EL - 보관소에 값 꺼내기 II
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
trimDirectiveWhitespaces="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL</title>
</head>
<body>
<h1>EL - 보관소에 값 꺼내기 II</h1>
<pre>
- 보관소의 이름을 지정하지 않으면 다음 순서로 값을 찾는다.
pageScope ==> requestScope ==> sessionScope ==> applicationScope
- 보관소에 저장된 값을 찾지 못하면 빈 문자열을 리턴한다.
</pre>
<%
// 세션이나 서블릿 컨텍스트 보관소에 저장된 데이터를 초기화시킨다.
session.setAttribute("name", null);
application.setAttribute("name", null);
//pageContext.setAttribute("name", "홍길동");
//request.setAttribute("name", "임꺽정");
//session.setAttribute("name", "유관순");
application.setAttribute("name", "안중근");
%>
<h2>보관소에서 값 꺼내기 : ${name}</h2>
PageContext 보관소 : ${pageScope.name}<br>
ServletRequest 보관소 : ${requestScope.name}<br>
HttpSession 보관소 : ${sessionScope.name}<br>
ServletContext 보관소 : ${applicationScope.name}<br>
</body>
</html>
EL - 리터럴(literal)
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
trimDirectiveWhitespaces="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL</title>
</head>
<body>
<h1>EL - 리터럴(literal)</h1>
<pre>
- EL에서 문자열이나 숫자를 표현하는 방법
</pre>
문자열: ${"홍길동"}<br>
문자열: ${'홍길동'}<br>
정수: ${100}<br>
부동소수점: ${3.14}<br>
논리값: ${true}<br>
null: ${null}<br>
</body>
</html>
EL - 배열에서 값 꺼내기
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
trimDirectiveWhitespaces="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL</title>
</head>
<body>
<h1>EL - 배열에서 값 꺼내기</h1>
<%
pageContext.setAttribute("names", new String[]{"홍길동","임꺽정","유관순"});
%>
${names[0]}<br>
${names[1]}<br>
${names[2]}<br>
${names[3]}<br>
</body>
</html>
EL - List 객체에서 값 꺼내기
<%@page import="java.util.ArrayList"%>
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
trimDirectiveWhitespaces="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL</title>
</head>
<body>
<h1>EL - List 객체에서 값 꺼내기</h1>
<%
ArrayList<String> nameList = new ArrayList<>();
nameList.add("김구");
nameList.add("안중근");
nameList.add("윤봉길");
pageContext.setAttribute("names", nameList);
%>
${names[0]}<br>
${names[1]}<br>
${names[2]}<br>
${names[3]}<br>
<%-- 보관소가 아닌 로컬 변수는 EL에서 사용할 수 없다. --%>
${nameList[0]}<br>
</body>
</html>
EL - Map 객체에서 값 꺼내기
<%@page import="java.util.HashMap"%>
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
trimDirectiveWhitespaces="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL</title>
</head>
<body>
<h1>EL - Map 객체에서 값 꺼내기</h1>
<%
HashMap<String,Object> map = new HashMap<>();
map.put("s01", "김구");
map.put("s02", "안중근");
map.put("s03", "윤봉길");
map.put("s04 ^^", "오호라");
pageContext.setAttribute("map", map);
%>
${map["s01"]}<br>
${map['s01']}<br>
${map.s01}<br>
<%-- 프로퍼티 이름이 변수 이름 짓는 규칙에 맞지 않다면
다음과 같이 OGNL 표기법을 쓸 수 없다. --%>
<%--
${map.s04 ^^}<br>
--%>
${map["s04 ^^"]}<br>
${map['s04 ^^']}<br>
</body>
</html>
EL - 일반 객체에서 값 꺼내기
<%@page import="com.eomcs.web.vo.Member"%>
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
trimDirectiveWhitespaces="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL</title>
</head>
<body>
<h1>EL - 일반 객체에서 값 꺼내기</h1>
<%
Member member = new Member();
member.setNo(100);
member.setName("홍길동");
member.setEmail("hong@test.com");
member.setTel("1111-2222");
pageContext.setAttribute("member", member);
%>
${member.getNo()}<br>
${member.no}<br>
${member["no"]}<br>
${member['no']}<br>
</body>
</html>
EL - 연산자
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
trimDirectiveWhitespaces="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL</title>
</head>
<body>
<h1>EL - 연산자</h1>
<h2>산술연산자</h2>
100 + 200 = ${100 + 200}<br>
100 - 200 = ${100 - 200}<br>
100 * 200 = ${100 * 200}<br>
100 / 200 = ${100 / 200}<br>
100 div 200 = ${100 div 200}<br>
100 % 200 = ${100 % 200}<br>
100 mod 200 = ${100 mod 200}<br>
<h2>논리연산자</h2>
true && false = ${true && false}<br>
true and false = ${true and false}<br>
true || false = ${true || false}<br>
true or false = ${true or false}<br>
!true = ${!true}<br>
not true = ${not true}<br>
<h2>관계 연산자</h2>
100 == 200 = ${100 == 200}<br>
100 eq 200 = ${100 eq 200}<br>
100 != 200 = ${100 != 200}<br>
100 ne 200 = ${100 ne 200}<br>
100 > 200 = ${100 > 200}<br>
100 gt 200 = ${100 gt 200}<br>
100 >= 200 = ${100 >= 200}<br>
100 ge 200 = ${100 ge 200}<br>
100 < 200 = ${100 < 200}<br>
100 lt 200 = ${100 lt 200}<br>
100 <= 200 = ${100 <= 200}<br>
100 le 200 = ${100 le 200}<br>
<h2>empty</h2>
<p>보관소에 해당 객체가 없는지 검사한다. 없으면 true, 있으면 false.</p>
<%
pageContext.setAttribute("name", new String("홍길동"));
%>
name 값이 없는가? ${empty name}<br>
name2 값이 없는가? ${empty name2}<br>
<h2>조건 연산자 - 조건 ? 식1 : 식2 </h2>
name == "홍길동" : ${name == "홍길동" ? "맞다!" : "아니다!"}<br>
<%
String a = "홍길동";
String b = new String("홍길동");
if (a == b) { // 인스턴스의 주소를 비교!
out.println("== : 같다!<br>");
} else {
out.println("== : 다르다!<br>");
}
if (a.equals(b)) { // 인스턴스의 값을 비교!
out.println("equals() : 같다!<br>");
} else {
out.println("equals() : 다르다!<br>");
}
%>
</body>
</html>
JSTL
JSTL 개요
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
trimDirectiveWhitespaces="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
<h1>JSTL 개요</h1>
<%--
- JSTL(JSP Standard Tag Library)?
- JSP 확장 태그이다.
- 기본으로 제공하지 않는다.
- JSTL API를 구현한 외부 라이브러리를 가져와서 사용해야 한다.
- JSTL 라이브러리 가져오기
- mvnrepository.com 에서 JSTL 검색하여 라이브러리를 정보를 알아낸다.
- build.gradle 파일의 dependencies {} 블록에 추가한다.
- 'gradle eclipse' 실행하여 이클립스 설정 파일을 갱신한다.
- 이클립스 프로젝트를 리프래시 한다.
- JSTL 라이브러리 모듈
- Core(c) : http://java.sun.com/jsp/jstl/core
- XML(x) : http://java.sun.com/jsp/jstl/xml
- I18N(fmt) : http://java.sun.com/jsp/jstl/fmt
- Database(sql) : http://java.sun.com/jsp/jstl/sql
- Functions(fn) : http://java.sun.com/jsp/jstl/functions
- JSP 페이지에서 JSTL 라이브러리의 모듈 사용하기
- JSTL 모듈의 네임스페이스를 가져온다.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
- JSTL 태그 사용
<접두어명:태그명 속성="값" 속성="값"/>
* I18N(Internationalization 의 약자)
=> 프로그램을 짤 때 여러 언어를 고려해서 코딩하는 것을 말한다.
=> 특히 화면에서 버튼에 제목이나 라벨을 출력할 때 특정 언어로 고정된 값을 출력하지 않고,
외부 파일(예: label_ko_KR.properties)에서 읽어 온 값을 출력하도록 프로그래밍 하는 것.
* L10N(Localization 의 약자)
=> 특정 언어에 대해 라벨 텍스트를 담은 프로퍼티 파일(예: label_ko_KR.properties)을
작성하는 것을 말한다.
--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<h2>오호라!!!</h2>
<%
out.println("<h2>오호라!!!</h2>");
%>
<%="<h2>오호라!!!</h2>"%>
${"<h2>오호라!!!</h2>"}
<c:out value="<h2>오호라!!!<h2>"/>
</body>
</html>
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:set
<%@ 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:set</h1>
<pre>
- 보관소에 값을 저장한다.
</pre>
<%
//request.setAttribute("name1", "홍길동");
%>
<c:set scope="request" var="name1" value="홍길동2"/>
1: ${requestScope.name1}<br>
2: ${pageScope.name1}<br>
3: ${name1}<br>
<hr>
<%--
scope을 생략하면 기본이 PageContext 이다.
--%>
<c:set var="name2" value="임꺽정"/>
1: ${requestScope.name2}<br>
2: ${pageScope.name2}<br>
3: ${name2}<br>
<hr>
<%--
시작 태그와 끝 태그 사이(content)에 값을 넣을 수 있다.
--%>
<c:set var="name3">유관순</c:set>
1: ${requestScope.name3}<br>
2: ${pageScope.name3}<br>
3: ${name3}<br>
<h2>객체의 프로퍼티 값 설정하기</h2>
<jsp:useBean id="m1" class="com.eomcs.web.vo.Member"/>
<%--
Member m1 = (Member) pageContext.getAttribute("m1");
if (m1 == null) {
m1 = new Member();
pageContext.setAttribute("m1", m1);
}
--%>
<jsp:setProperty name="m1" property="no" value="100"/>
<%--
m1.setNo(100);
--%>
<c:set target="${pageScope.m1}" property="email" value="hong@test.com"/>
<%--
Object obj = pageContext.getAttribute("m1");
Method m = obj.getClass().getMethod("setEmail", String.class);
m.invoke(obj, "hong@test.com");
=> m1.setEmail("hong@test.com");
--%>
${pageScope.m1.no}<br>
${pageScope.m1.email}<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:choose
<%@ 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:choose</h1>
<pre>
- 다중 조건문을 만든다.
- 자바의 switch와 유사하다.
</pre>
<c:set var="name" value="홍길동"/>
<c:set var="age" value="26"/>
<%--
pageContext.setAttribute("name", "홍길동");
pageContext.setAttribute("age", "16");
--%>
<c:choose>
<c:when test="${age < 19}">
<p>미성년입니다.</p>
</c:when>
<c:when test="${age >= 19 and age < 65}">
<p>성년입니다.</p>
</c:when>
<c:otherwise>
<p>노인입니다.</p>
</c:otherwise>
</c:choose>
</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>
ex10_sub.jsp
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
trimDirectiveWhitespaces="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
<h1>JSTL - c:import 테스트</h1>
name = ${param.name}<br>
age = ${param.age}<br>
gender = ${param.gender}<br>
</body>
</html>
JSTL - c:redirect
<%@ 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:redirect</h1>
<pre>
- redirect 응답하기
</pre>
<c:if test="${param.search == 'naver'}">
<c:redirect url="http://www.naver.com"/>
<%--
response.sendRedirect("http://www.naver.com");
--%>
</c:if>
<c:if test="${param.search == 'daum'}">
<c:redirect url="http://www.daum.net"/>
</c:if>
<p>search 라는 이름으로 검색 엔진을 지정하세요!<br>
유효한 엔진은 'naver', 'daum' 입니다.</p>
</body>
</html>
JSTL - fmt:parseDate
<%@page import="java.util.Date"%>
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
trimDirectiveWhitespaces="true"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
<h1>JSTL - fmt:parseDate</h1>
<pre>
- 문자열로 지정된 날짜 값을 java.util.Date 객체로 만들기
</pre>
<fmt:parseDate value="2020-04-14" pattern="yyyy-MM-dd" var="d1"/>
<fmt:parseDate value="04/14/2020" pattern="MM/dd/yyyy" var="d2"/>
<%
Date date1 = (Date)pageContext.getAttribute("d1");
Date date2 = (Date)pageContext.getAttribute("d2");
out.println(date1.toString() + "<br>");
out.println(date2.toString() + "<br>");
%>
</body>
</html>
JSTL - fmt:formatDate
<%@page import="java.util.Date"%>
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
trimDirectiveWhitespaces="true"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
<h1>JSTL - fmt:formatDate</h1>
<pre>
- java.util.Date 객체의 값을 문자열로 만들기
</pre>
<%
pageContext.setAttribute("today", new Date());
%>
<fmt:formatDate value="${pageScope.today}"
pattern="yyyy-MM-dd"/><br>
<fmt:formatDate value="${pageScope.today}"
pattern="MM/dd/yyyy"/><br>
<fmt:formatDate value="${pageScope.today}"
pattern="yyyy-MM-dd hh:mm:ss"/><br>
<hr>
<fmt:formatDate value="${pageScope.today}"
pattern="yyyy-MM-dd"
var="str1"/>
<p>오늘 날짜는 '${pageScope.str1}'입니다.</p>
</body>
</html>
'네이버클라우드 AIaaS 개발자 양성과정 1기 > DBMS, SQL, JDBC, Servlet' 카테고리의 다른 글
[비트캠프] 77일차(16주차4일) - Servlet(파일 업로드, 멀티파트), myapp-50(파일 업로드) (0) | 2023.02.23 |
---|---|
[비트캠프] 76일차(16주차3일) - Servlet(세션, 쿠키, 리다이렉트), myapp-49(로그인, 권한별 기능 제한) (0) | 2023.02.22 |
[비트캠프] 75일차(16주차2일) - Servlet(MVC 모델II, EL, JSTL), myapp-47~48 (0) | 2023.02.21 |
[Java] 예제 소스 정리 - JSP (0) | 2023.02.20 |
[비트캠프] 74일차(16주차1일) - Servlet(보관소, 필터, 리스너, MVC 모델I), JSP(기초), myapp-44~46 (0) | 2023.02.20 |