JSTL์ ์ฌ์ฉํ๋ ค๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํ๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ค์ด๋ก๋ ๋ฐ ํ๋ก์ ํธ ์ธํ ์ ์ด ํฌ์คํธ๋ฅผ ์ฐธ๊ณ ํ๋ค.
ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ธ
์๋ฐ์์ import๋ฌธ์ ์ ์ธํ๋ฏ JSP์์๋ JSTL ํ์ฅ ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด taglib ์ง์์๋ก ๋ผ์ด๋ฒ๋ฆฌ๋ฅผ ์ ์ธํด์ผ ํ๋ค.
JSP ์ง์์ ํ๊ทธ <%@ taglib %>๋ฅผ ์ฌ์ฉํด์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ธํ๋ค.
<%@ taglib prefix="์ ๋์ฌ" uri="URI" %>
uri : ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ค์ ์คํ์ด์ค URI ์๋ณ์
prefix : JSTL ํ๊ทธ๋ฅผ ์ฌ์ฉํ ๋ ํ๊ทธ ์ด๋ฆ ์์ ๋ถ์ผ ์ ๋์ฌ
๋ค์์ ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ณ ํ์ค ์ ์ธ๋ฌธ์ด๋ค.
ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ | ์ ์ธ๋ฌธ |
Core | <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> |
XML | <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> |
I18N | <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> |
Database | <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %> |
Functions | <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> |
prefix๋ฅผ ๊ผญ ์ ๋ ๊ฒ ์ง์ ํด์ผํ๋๊ฑด ์๋์ง๋ง JSTL์์ ์ ์ํ๋ ํ์ค ์ ๋์ฌ์ด๋ฏ๋ก ๋๊ฐ์ด ์ฌ์ฉํ๋๊ฒ ์ข๋ค.
ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ณ ํ๊ทธ ์ ๋ฆฌ
ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ | ๊ธฐ๋ฅ | ํ๊ทธ - ๋ถ๋ชจํ๊ทธ(์์ํ๊ทธ) |
Core(๊ธฐ๋ณธ) | ๋ณ์ | remove, set |
ํ๋ฆ ์ ์ด | choose(when, otherwise) forEach forTokens if |
|
URL ๊ด๋ฆฌ | import(param) redirect(param) url(param) |
|
๊ธฐํ | catch, out | |
XML | ๊ธฐ๋ณธ | out, parse, set |
ํ๋ฆ ์ ์ด | choose(when, otherwise) forEach if |
|
๋ณํ | transform(param) | |
I18N(๊ตญ์ ํ) | ๋ก์ผ์ผ | setLocale, requestEncoding |
๋ฉ์์ง ํฌ๋งท | bundle message(param) setBundle |
|
Database | ๋ฐ์ดํฐ ์์ค ์ค์ | setDataSource |
SQL | query(dateParam, param) transaction update(dateParam, param) |
|
Functions(๊ธฐํ ํจ์) | ์งํฉ์ ์์ ๊ฐ์ | length |
๋ฌธ์์ด ์ฒ๋ฆฌ | toUpperCase toLowerCase substring substringAfter substringBefore trim replace indexOf startsWith endsWith contains containsIgnoreCase split join escapeXml |
<c:out> ํ๊ทธ
์ถ๋ ฅ๋ฌธ์ ๋ง๋๋ ํ๊ทธ์ด๋ค.
<c:out value="์ถ๋ ฅ๊ฐ" default="๊ธฐ๋ณธ๊ฐ" />
<c:out value="์ถ๋ ฅ๊ฐ">๊ธฐ๋ณธ๊ฐ</c:out>
value์ EL ํํ์์ ์ธ ์ ์๋ค.
value ๊ฐ์ด null์ด๋ฉด ๊ธฐ๋ณธ๊ฐ์ด ์ถ๋ ฅ๋๊ณ ๊ธฐ๋ณธ๊ฐ์ด ์์ผ๋ฉด ๋น ๋ฌธ์์ด์ด ์ถ๋ ฅ๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<c:out value="Hello World" /><br>
<c:out value="${null}">JSTL</c:out><br>
<c:out value="Hello">World</c:out><br>
<c:out value="${null}" />
</body>
</html>
|
cs |
<c:set> ํ๊ทธ
๋ณ์๋ฅผ ๋ค๋ฃฐ๋ ์ฌ์ฉํ๋ค.
์ด ํ๊ทธ๋ก ์์ฑํ ๋ณ์๋ JSP์ ๋ก์ปฌ ๋ณ์๊ฐ ์๋๋ผ ์๋ธ๋ฆฟ ๋ณด๊ด์(JspContext, ServletRequest, HttpSession, ServletContext)์ ์ ์ฅ๋๋ค.
<c:set var="๋ณ์๋ช " value="๊ฐ" scope="page(๊ธฐ๋ณธ๊ฐ)|request|session|application" />
<c:set var="๋ณ์๋ช " scope="page(๊ธฐ๋ณธ๊ฐ)|request|session|application">๊ฐ</c:set>
scope์ ๊ธฐ๋ณธ๊ฐ์ page์ด๋ค. ๋ฐ๋ผ์ scope๋ฅผ ์๋ตํ๋ฉด JspContext์ ์ ์ฅ๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<%--<c:set> ๊ธฐ๋ณธ ์ฌ์ฉ ๋ฐฉ๋ฒ--%>
<c:set var="username1" value="๊น์ฐ์" />
<c:set var="username2">๋ฐ์ง์ฑ</c:set>
${username1}<br>
${username2}<br>
${pageScope.username1}<br>
${pageScope.username2}<br>
<p></p>
<%--๋ณด๊ด์ ์ง์ (ServletRequest)--%>
<c:set var="username3" scope="request">๋ง์ผ๋ฆฌ ์ฌ์ด๋ฌ์ค</c:set>
${pageScope.username3}<br>
${requestScope.username3}<br>
<p></p>
<%--๊ธฐ์กด ๊ฐ ๋ฎ์ด์--%>
<% pageContext.setAttribute("username4", "๋ง๊ณ ๋ก๋น"); %>
๊ธฐ์กด username4 : ${username4}<br>
<c:set var="username4" value="๋ ์ค๋๋ฅด๋ ๋์นดํ๋ฆฌ์ค" />
๋ณ๊ฒฝ username4 : ${username4}<br>
|
cs |
scope๋ฅผ ์๋ตํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก JspContext(page)์ ์ ์ฅ๋จ์ ์ ์ ์๋ค.
scope="request"์ ๊ฐ์ด scope๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํ ์๋ ์๋ค.
<c:set>์ผ๋ก ์ด๋ฏธ ์กด์ฌํ๋ ๋ณ์์ ๊ฐ์ ํ ๋นํ ๊ฒฝ์ฐ ๊ธฐ์กด ๊ฐ์ ๋ฎ์ด์ด๋ค.
<c:set>์ ์ด์ฉํ ๊ฐ์ฒด์ ํ๋กํผํฐ ๊ฐ ์ค์
<c:set target="๋์ ๊ฐ์ฒด" property="์ค์ ํ ํ๋กํผํฐ" value="ํ๋กํผํฐ ๊ฐ" />
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
<%!
public static class MyMember {
int no;
String name;
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
%>
<%
MyMember member = new MyMember();
member.setNo(100);
member.setName("๊น์ฐ์");
pageContext.setAttribute("member", member);
%>
${member.name}<br>
<c:set target="${member}" property="name" value="๋ฐ์ง์ฑ" />
${member.name}<br>
|
cs |
Innter class MyMember์ ์ธ์คํด์ค member๋ฅผ ์์ฑํ๊ณ member์ name์ <c:set> ํ๊ทธ๋ฅผ ์ฌ์ฉํด์ ๋ณ๊ฒฝํ๋ ์ฝ๋์ด๋ค.
<c:set>์ผ๋ก ๊ฐ์ฒด์ ํ๋กํผํฐ ๊ฐ์ ์ค์ ํ ๋๋ setter()์ ๋ฆฌํด ํ์ ์ด ๋ฐ๋์ void์ฌ์ผ ํ๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์์ธ๊ฐ ๋ฐ์ํ๋ค.
<c:remove> ํ๊ทธ
๋ณด๊ด์์ ์ ์ฅ๋ ๊ฐ์ ์ ๊ฑฐํ๋ค.
<c:remove var="๋ณ์๋ช " scope="page(๊ธฐ๋ณธ๊ฐ) | request | session | application" />
<c:set>๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก scope ์์ฑ์ผ๋ก ๋ณด๊ด์๋ฅผ ๋ช ์ํ ์ ์๊ณ ๋ณด๊ด์์ ๊ธฐ๋ณธ๊ฐ์ page์ด๋ค.
1
2
3
4
|
<% pageContext.setAttribute("username1", "๋ด์คํธ"); %>
${username1}<br>
<c:remove var="username1" />
${username1}<br>
|
cs |
<c:remove> ์ฌ์ฉ ํ JspContext์์ username1์ ๊ฐ์ ์ญ์ ํด์ ๊ฐ์ด ์ถ๋ ฅ๋์ง ์๋๋ค.
<c:if> ํ๊ทธ
<c:if test="์กฐ๊ฑด์" var="๋ณ์๋ช " scope="page(๊ธฐ๋ณธ๊ฐ) | request | session | application">๋ด์ฉ</c:if>
test์ ์กฐ๊ฑด์์ด true์ด๋ฉด '๋ด์ฉ'์ด ์คํ๋๋ค.
var, scope ์์ฑ์ test ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ๋ ์ฌ์ฉํ๋ค.
1
2
3
4
5
6
7
8
9
|
<c:if test="${10 > 20}" var="result1">
10์ 20๋ณด๋ค ํฌ๋ค.<br>
</c:if>
result1 : ${result1}<br>
<c:if test="${10 < 20}" var="result2">
20์ 10๋ณด๋ค ํฌ๋ค.<br>
</c:if>
result2 : ${result2}
|
cs |
${10 > 20}์ false์ด๋ฏ๋ก '10์ 20๋ณด๋ค ํฌ๋ค'๋ ์ถ๋ ฅ๋์ง ์๋๋ค.
${10 < 20}์ true์ด๋ฏ๋ก '20์ 10๋ณด๋ค ํฌ๋ค'๊ฐ ์ถ๋ ฅ๋์๋ค.
<c:if> - List๊ฐ empty(๋น์ด์๋์ง) ์ฒดํฌ
<c:if test="${empty myList}">
<div>
<!-- myList๊ฐ ๋น์ด์์ผ๋ฉด -->
</div>
</c:if>
<c:if test="${not empty myList}">
<div>
<!-- myList๊ฐ ๋น์ด์์ง ์์ผ๋ฉด -->
</div>
</c:if>
List์ empty ์ฌ๋ถ๋ empty operator๋ฅผ ์ฌ์ฉํ์ฌ testํ ์ ์๋ค.
<c:choose> ํ๊ทธ
์๋ฐ์ switch-case์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ํํ๋ค.
์ฌ๋ฌ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ์์ ์ ํ ํ์๊ฐ ์์๋ ์ฌ์ฉํ๋ค.
<c:choose>
<c:when test="์กฐ๊ฑด์"></c:when>
<c:when test="์กฐ๊ฑด์"></c:when>
...
<c:otherwise></c:when>
</c:choose>
<c:when> ํ๊ทธ๋ ํ ๊ฐ ์ด์ ์กด์ฌํด์ผํ๋ฉฐ <c:otherwise> ํ๊ทธ๋ 0๊ฐ ํน์ 1๊ฐ๊ฐ ์ฌ ์ ์๋ค.
<c:when>์ ์กฐ๊ฑด์ ์ผ์นํ์ง ์์ผ๋ฉด <c:otherwise>๊ฐ ์คํ๋๋ค.
1
2
3
4
5
6
7
8
9
|
<c:set var="userid" value="hello123" />
<c:choose>
<c:when test="${userid == 'admin'}">
๊ด๋ฆฌ์ ํ์ด์ง
</c:when>
<c:otherwise>
${userid}๋ ๋ฐ๊ฐ์ต๋๋ค.
</c:otherwise>
</c:choose>
|
cs |
<c:forEach> ํ๊ทธ
๋ฐ๋ณต ์์ ์ ์ฌ์ฉํ๋ค. ํนํ ๋ชฉ๋ก์์ ๊ฐ์ ๊บผ๋ด์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉํ๋ค.
<c:forEach var="๋ณ์๋ช " items="๋ชฉ๋ก ๋ฐ์ดํฐ" begin="์์ ์ธ๋ฑ์ค" end="์ข ๋ฃ ์ธ๋ฑ์ค">์ฝํ ์ธ </c:forEach>
items์๋ ๋ค์์ ์ง์ ํ ์ ์๋ค.
- ๋ฐฐ์ด
- java.util.Collection ๊ตฌํ์ฒด(ArrayList, LinkedList, EnumSet, ...)
- java.util.Iterator ๊ตฌํ์ฒด
- java.util.Enumeration ๊ตฌํ์ฒด
- java.util.Map ๊ตฌํ์ฒด
- ์ฝค๋ง(,) ๊ตฌ๋ถ์๋ก ๋์ด๋ ๋ฌธ์์ด
var๋ ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด์ items์์ ๊บผ๋ธ ํญ๋ชฉ ๊ฐ์ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ ๋ณ์์ด๋ค.
<c:forEach> - ๋ฐฐ์ด
๋ค์์ items์ ๋ฐฐ์ด์ ์ง์ ํ forEach ์์ด๋ค.
1
2
3
4
5
6
|
<% pageContext.setAttribute("numList", new String[]{"1", "2", "3", "4", "5"}); %>
<ul>
<c:forEach var="num" items="${numList}">
<li>${num}</li>
</c:forEach>
</ul>
|
cs |
๋ค์๊ณผ ๊ฐ์ด ์์ ์ธ๋ฑ์ค์ ์ข ๋ฃ ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ ์ ์๋ค.
1
2
3
4
5
6
|
<% pageContext.setAttribute("numList", new String[]{"1", "2", "3", "4", "5"}); %>
<ul>
<c:forEach var="num" items="${numList}" begin="1" end="3">
<li>${num}</li>
</c:forEach>
</ul>
|
cs |
<c:forEach> - ArrayList
๋ค์์ items์ ArrayList๋ฅผ ์ง์ ํ forEach ์์ด๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<%
List<String> fruits = new ArrayList<>();
fruits.add("apple");
fruits.add("banana");
fruits.add("pineapple");
fruits.add("kiwi");
fruits.add("melon");
pageContext.setAttribute("fruits", fruits);
%>
<ul>
<c:forEach var="fruit" items="${fruits}">
<li>${fruit}</li>
</c:forEach>
</ul>
|
cs |
<c:forEach> - ๋ฌธ์์ด
๋ค์์ ์ฝค๋ง(,)๋ก ์ฐ๊ฒฐ๋ ๋ฌธ์์ด์ ๋ํ forEach ์์ ์ด๋ค.
1
2
3
4
5
6
|
<% pageContext.setAttribute("maleActors", "๋ฆฌ๋ฒ ํผ๋์ค, ์ฅ๋์ค, ์ฐจ์ธํ, ๋จ๊ถ๋ฏผ, ๊ณต์ "); %>
<ul>
<c:forEach var="name" items="${maleActors}">
<li>${name}</li>
</c:forEach>
</ul>
|
cs |
<c:forEach> - ํ์ ๋ฐ๋ณต
items ์ง์ ์์ด begin๊ณผ end ์์ฑ์ ์ฌ์ฉํด์ ์ผ์ ํ์ ๋ฐ๋ณตํ ์ ์๋ค.
1
2
3
4
5
|
<ul>
<c:forEach var="no" begin="1" end="10">
<li>forEach ์์ ${no}</li>
</c:forEach>
</ul>
|
cs |
<c:forTokens> ํ๊ทธ
๋ฌธ์์ด์ delimiter(๊ตฌ๋ถ์)๋ก ๋ถ๋ฆฌํด์ ๋ฐ๋ณต๋ฌธ์ ๋๋ฆฌ๋๋ฐ ์ฌ์ฉํ๋ค.
<c:forTokens var="๋ณ์๋ช " items="๋ฌธ์์ด" delims="๊ตฌ๋ถ์">์ฝํ ์ธ </c:forTokens>
1
2
3
4
5
6
|
<% pageContext.setAttribute("tokens", "v1=20&v2=20&op=+"); %>
<ul>
<c:forTokens var="item" items="${tokens}" delims="&">
<li>${item}</li>
</c:forTokens>
</ul>
|
cs |
<c:url> ํ๊ทธ
URL์ ๋ง๋ค๋ ์ฌ์ฉํ๋ค.
์ด ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋งค๊ฐ๋ณ์๋ฅผ ํฌํจํ URL์ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ค.
<c:url var="๋ณ์๋ช " value="url">
<c:param name="ํ๋ผ๋ฏธํฐ๋ช " value="๊ฐ" />
<c:param name="ํ๋ผ๋ฏธํฐ๋ช " value="๊ฐ" />
<c:param name="ํ๋ผ๋ฏธํฐ๋ช " value="๊ฐ" />
</c:url>
1
2
3
4
5
6
|
<c:url var="calcUrl" value="http://localhost:8080/calc">
<c:param name="v1" value="10" />
<c:param name="v2" value="20" />
<c:param name="op" value="+" />
</c:url>
${calcUrl}
|
cs |
<c:import> ํ๊ทธ
url ์์ฑ์ ์ฝํ ์ธ ๊ฐ ์๋ ์ฃผ์๋ฅผ ์ง์ ํ๋ฉด ํด๋น ์ฃผ์๋ก ์์ฒญํ๊ณ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ ๋ฐํํ๋ค.
<c:import url="url" var="๋ณ์๋ช " scope="page(๊ธฐ๋ณธ๊ฐ) | request | session | application" />
๋ค์์ url์ ๋ก๋ 800ํ์ฐจ ๋น์ฒจ ๊ฒฐ๊ณผ๋ฅผ JSON์ผ๋ก ๋ฐํ๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ์์ ์ด๋ค.
1
2
3
|
<textarea rows="10" cols="80">
<c:import url="https://www.nlotto.co.kr/common.do?method=getLottoNumber&drwNo=800" />
</textarea>
|
cs |
var, scope ์์ฑ์ ์ฌ์ฉํด์ ๋ณด๊ด์์ ์ ์ฅํ๋ค๊ฐ ์ถ๋ ฅํ ์ ์๋ค.
1
2
3
4
|
<c:import var="lottoResult" url="https://www.nlotto.co.kr/common.do?method=getLottoNumber&drwNo=800" />
<textarea rows="10" cols="80">
${lottoResult}
</textarea>
|
cs |
์คํ ๊ฒฐ๊ณผ๋ ์์ ๋์ผํ๋ค.
์ด๋ ๊ฒ ๋ณด๊ด์์ ์ ์ฅํด๋๋ฉด ํ์ํ ๋๋ง๋ค ๊ฐ์ ธ์์ ์ฐ๊ฑฐ๋ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๋ ๋ฑ์ ์์ ์ ํ ์ ์๋ค.
<c:redirect> ํ๊ทธ
๋ฆฌ๋ค์ด๋ ํธ ์ฒ๋ฆฌ๋ฅผ ํ ๋ ์ฌ์ฉํ๋ค. ๋ด๋ถ์ ์ผ๋ก HttpServletResponse์ sendRedirect()๋ฅผ ํธ์ถํ๋ค.
<c:redirect url="url" />
<fmt:parseDate> ํ๊ทธ
๋ ์ง ํ์์ผ๋ก ์์ฑ๋ ๋ฌธ์์ด๋ก java.util.Date ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ง์ ๋ ๋ณด๊ด์์ ์ ์ฅํ๋ค.
<fmt:parseDate var="๋ณ์๋ช " value="๋ ์ง ํ์ ๋ฌธ์์ด" pattern="ํจํด" scope="page(๊ธฐ๋ณธ๊ฐ) | request | session | application" />
1
|
<fmt:parseDate var="date1" value="2020-02-15" pattern="yyyy-MM-dd" />
|
cs |
<fmt:formatDate> ํ๊ทธ
๋ ์ง ๊ฐ์ฒด๋ก๋ถํฐ ์ํ๋ ํ์์ผ๋ก ๋ ์ง๋ฅผ ํํํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ค.
<fmt:formatDate value="java.util.Date ๊ฐ์ฒด ์ง์ " pattern="ํจํด" />
1
2
|
<fmt:parseDate var="date1" value="2020-02-15" pattern="yyyy-MM-dd" />
<fmt:formatDate value="${date1}" pattern="MM/dd/yy" />
|
cs |
'Javaยท๏ปฟServletยท๏ปฟJSP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[IntelliJ] ํ์๊ฐ์ ์์ (MVC) - (7) DAO ๋ถ๋ฆฌํ๊ธฐ (0) | 2020.02.15 |
---|---|
[JSP] JSTL ํ์ฉ ๋ฐฉ๋ฒ - JSP์์ ์๋ฐ ์ฝ๋ ์ ๊ฑฐ (0) | 2020.02.15 |
JSP - EL ํํ์ ๋ฌธ๋ฒ๊ณผ ์ฌ์ฉ ๋ฐฉ๋ฒ (3) | 2020.02.13 |
์๋ธ๋ฆฟ ๋ฐ์ดํฐ ๋ณด๊ด์ - ServletContext, HttpSession, ServletRequest, JspContext (0) | 2020.02.13 |
[IntelliJ] ํ์๊ฐ์ ์์ (MVC) - (6) ํ์ ์ญ์ (0) | 2020.02.13 |
๋๊ธ