** ๐ PART 3.1 JSP โ ์๋ธ๋ฆฟ ๋ณํ ๊ณผ์ + ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ ๋ถ์ **
๐ข 1๋จ๊ณ. JSP๋ ์ด๋ป๊ฒ ์๋ํ ๊น? (๊ธฐ์ด ์ค๋ช )
๐ JSP๋ ๊ทธ๋ฅ HTML ํ์ผ์ฒ๋ผ ๋ณด์ด์ง๋ง, ์ฌ์ค์
๋ฐฑ์๋์์ ๋์ ์ผ๋ก HTML์ ๋ง๋๋ โ์๋ฐ ์ฝ๋โ๋ก ๋ณํ๋ผ.
โ JSP ์คํ ์์ ์์ฝ
[JSP ํ์ผ ์์ฒญ]
โ [์๋ฒ๊ฐ JSP๋ฅผ "์๋ธ๋ฆฟ"์ผ๋ก ๋ฐ๊ฟ (.java ํ์ผ ์์ฑ)]
โ [๊ทธ .java๋ฅผ ์ปดํ์ผํด์ .class๋ก ๋ง๋ฆ]
โ [๊ทธ .class ํ์ผ์ ์คํํด์ HTML์ ์ถ๋ ฅ]
๐ ์์
JSP ์ฝ๋:
<% out.println("์๋
ํ์ธ์!"); %>
โ ๋ด๋ถ์์๋ ๋ค์๊ณผ ๊ฐ์ด ์๋ธ๋ฆฟ ์ฝ๋๋ก ๋ณํ๋จ:
public void _jspService(HttpServletRequest request, HttpServletResponse response) {
response.getWriter().write("์๋
ํ์ธ์!");
}
๐ง 2๋จ๊ณ. JSP โ ์๋ธ๋ฆฟ ๋ณํ ํ์ด๋ฐ (2๊ฐ์ง ๋ฐฉ์)
๋ฐฉ์ | ์ค๋ช | ์ค๋ฌด ํฌ์ธํธ |
---|---|---|
์ต์ด ์์ฒญ ์ | JSP๋ฅผ ์ฒ์ ์์ฒญํ ๋ โ ๋ณํ๋จ | ๊ธฐ๋ณธ ์ค์ |
์๋ฒ ๋ฐฐํฌ ์ (precompile) | WAR ๋ฐฐํฌํ ๋ ๋ฏธ๋ฆฌ ์๋ธ๋ฆฟ์ผ๋ก ๋ณํ | ๋๊ท๋ชจ ์๋น์ค์์ ์ถ์ฒ |
๐ก ์ precompile์ด ์ข์๊น?
์ฒซ ์ฌ์ฉ์๊ฐ ๋๋ฆฌ์ง ์๊ฒ ํ๊ธฐ ์ํด, ๋ฏธ๋ฆฌ ์ปดํ์ผํด๋๋ ์ ๋ต
โ ์์ฒญ ํญ์ฃผ ์ด๊ธฐ ์ง์ฐ์ ๋ฐฉ์ง
๐งฌ 3๋จ๊ณ. _jspService() ๊ตฌ์กฐ ๋ถ์
JSP๊ฐ ์๋ธ๋ฆฟ์ผ๋ก ๋ฐ๋๋ฉด ๋ด๋ถ์ _jspService() ๋ฉ์๋๊ฐ ์๋ ์์ฑ๋จ.
โ ์์ ๊ตฌ์กฐ
public final class test_jsp extends HttpJspBase {
public void _jspService(HttpServletRequest request, HttpServletResponse response) {
response.setContentType("text/html;charset=UTF-8");
JspWriter out = response.getWriter();
out.write("<html><body>");
out.write("์๋
ํ์ธ์!");
out.write("</body></html>");
}
}
๐ก ํน์ง
ํญ๋ชฉ | ์ค๋ช |
---|---|
๋ฉ์๋ ์ด๋ฆ | _jspService() (JSP ์ ์ฉ ๋ฉ์๋) |
ํธ์ถ ๋ฐฉ์ | ์ฌ์ฉ์๊ฐ JSP๋ฅผ ์์ฒญํ ๋๋ง๋ค ์๋ ํธ์ถ |
์ฌ์ฉ ๊ฐ์ฒด | request , response , out , session ๋ฑ JSP ๋ด์ฅ ๊ฐ์ฒด ์ ๋ถ ์ฌ์ฉ ๊ฐ๋ฅ |
์ฌ์ ์ ๋ถ๊ฐ | ์ด ๋ฉ์๋๋ ์ค๋ฒ๋ผ์ด๋ํ ์ ์์ (JSP ์ปจํ ์ด๋์์ ์๋ ์์ฑ๋จ) |
๐พ 4๋จ๊ณ. JSP๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋ป๊ฒ ๋ณด๊ด๋ ๊น?
โ ์คํ ํ์ผ ์์ฑ ์์น
ํ์ผ | ์์น (Tomcat ๊ธฐ์ค) |
---|---|
.java |
/work/Catalina/localhost/ํ๋ก์ ํธ๋ช
/org/apache/jsp/ |
.class |
๊ฐ์ ๊ฒฝ๋ก, ์ปดํ์ผ๋ ํ์ผ (.class) |
โ ์ด ํ์ผ์ Tomcat์ด JSP๋ฅผ ๋ณํํด์ ์๋์ผ๋ก ์์ฑํจ
โ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
๊ตฌ์กฐ | ์ค๋ช |
---|---|
ํด๋์ค ์์ญ | _jspService() ๋ฉ์๋๋ฅผ ๊ฐ์ง ํด๋์ค๊ฐ ์ฌ๋ผ๊ฐ |
ํ ์์ญ | request , session , out ๊ฐ์ฒด๊ฐ ์์ฑ๋จ |
์คํ ์์ญ | ๊ฐ ์์ฒญ๋ณ๋ก ์ง์ญ๋ณ์ ์ ์ฅ (JSP ์คํ ์) |
๐ GC ๊ด์
_jspService()
๋ ์์ฒญ์ด ๋๋๋ฉด ์ฐธ์กฐ๊ฐ ์ฌ๋ผ์ง โ GC ๋์- ๋จ, JSP ์์ฒด ํด๋์ค๋ ์๋ฒ๊ฐ ๋ด๋ ค๊ฐ ๋๊น์ง ์ ์ง๋จ
-
์ด ํด๋์ค๊ฐ ๋๋ฌด ๋ง์ผ๋ฉด PermGen ๋๋ Metaspace ์์ญ ์ฌ์ฉ๋ ์ฆ๊ฐ
โ ๋ฉ๋ชจ๋ฆฌ ๋์ ์ํ
โ ์์ฝ: JSP ์คํ ํ๋ฆ ํ๋์ ๋ณด๊ธฐ
[JSP ์์ฒญ]
โ [JSP โ ์๋ธ๋ฆฟ์ผ๋ก ๋ณํ (.java)]
โ [.java โ .class ์ปดํ์ผ]
โ [ํด๋์ค ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ]
โ [_jspService() ์คํ โ HTML ์ถ๋ ฅ]
โ [์๋ต ์ข
๋ฃ โ ์ผ๋ถ ๊ฐ์ฒด๋ GC ๋์]
๐ฏ ์ค๋ฌด ์ฑ๋ฅ ๊ณ ๋ ค์ฌํญ
ํญ๋ชฉ | ์ค๋ช |
---|---|
JSP precompile ์ฌ์ฉ | ๋๋ ํธ๋ํฝ ๋๋น ๊ฐ๋ฅ |
๋๋ฌด ๋ง์ JSP ํ์ผ | ํด๋์ค ํ์ผ์ด ๋ง์์ ธ PermGen/Metaspace ๋์ ๊ฐ๋ฅ |
out.write() ๋ฐ๋ณต |
BufferedWriter ๊ธฐ๋ฐ์ด๋ฏ๋ก flush ์๊ธฐ ์ค์ |
HTML์ด ๋ณต์กํ ์๋ก | _jspService() ์ ์ฝ๋๊ฐ ๊ธธ์ด์ง๊ณ , ์ฑ๋ฅ ์ ํ ์ฐ๋ ค ์์ |
๐ก ๋ฉด์ ์์ ์ง๋ฌธ
- JSP๋ ์ด๋ป๊ฒ ์๋ธ๋ฆฟ์ผ๋ก ๋ฐ๋๋์?
- JSP๊ฐ ์๋ธ๋ฆฟ์ผ๋ก ๋ณํ๋๋ ํ์ด๋ฐ์ ์ธ์ ์ธ๊ฐ์?
- JSP ๋ด์
<% %>
์ฝ๋๋ ์ด๋ค ์๋ฐ ๋ฉ์๋๋ก ๋ค์ด๊ฐ๋์? - JSP ํ์ผ์ด ๋ง์ ๋ ์๋ฒ ์ฑ๋ฅ์ ์ด๋ค ์ํฅ์ด ์๋์?
- JSP๋ฅผ precompileํ๋ฉด ์ด๋ค ์ฅ์ ์ด ์๋์?
โ ๋ง๋ฌด๋ฆฌ ์์ฝํ
ํญ๋ชฉ | ์ค๋ช |
---|---|
JSP ๋ณํ ์์ | ์ต์ด ์์ฒญ ์ or ๋ฐฐํฌ ์ (precompile) |
ํต์ฌ ๋ฉ์๋ | _jspService() (JSP๊ฐ ์๋ธ๋ฆฟ์ด ๋๋ฉด ์๋ ์์ฑ) |
๋ฉ๋ชจ๋ฆฌ ์์น | ํด๋์ค ์์ญ(์ฝ๋), ํ ์์ญ(๊ฐ์ฒด), ์คํ ์์ญ(์ง์ญ ๋ณ์) |
GC ๋์ | ์์ฒญ ์ข ๋ฃ ํ, request/response ๊ฐ์ฒด ๋ฑ์ GC ์๊ฑฐ๋จ |
โ PART 3.2 ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(JSTL)์ ๋ฉ๋ชจ๋ฆฌ ํน์ง
๐ข 1๋จ๊ณ. ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ญ์ผ?
๐ฌ ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ JSP์์ ์ฌ์ฉํ๋ ์ฝ๋ ๋์ ์ฐ๋ ๋๊ตฌ์ผ.
์ด๋ ค์ด Java ์ฝ๋๋ฅผ ์ ์ฐ๊ณ ,
<c:if>
๊ฐ์ HTML์ฒ๋ผ ์๊ธด ๋ช ๋ น์ด๋ฅผ ์ฐ๋ ๊ฑฐ์ง!
โ ์์: JSTL ํ๊ทธ
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:if test="${loginId != null}">
<p>${loginId}๋ ํ์ํฉ๋๋ค!</p>
</c:if>
์ด๊ฑด ์๋ฐ ์ฝ๋๋ก ์ฐ๋ฉด if(loginId != null) { โฆ } ์ ๊ฐ์ ์ญํ ์ด์ผ.
๐ง JSTL ํ๊ทธ๋ ๊ฒฐ๊ตญ์ Java ๊ฐ์ฒด๋ค!
<c:if>
๋ ๋ด๋ถ์ ์ผ๋กIfTag
๋ผ๋ Java ํด๋์ค ๊ฐ์ฒด์ผ.- ์ด ๊ฐ์ฒด๊ฐ JSP ์คํ ์ ์์ฑ๋๊ณ โ ์กฐ๊ฑด ์ฒดํฌ โ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํจ.
๐ 2๋จ๊ณ. ํ๊ทธ ๊ฐ์ฒด๊ฐ ๋งค ์์ฒญ๋ง๋ค ์์ฑ๋๋ ๊ตฌ์กฐ ์ค๋ช
๐ฆ JSP ์คํ ํ๋ฆ ์์ฝ
[์ฌ์ฉ์๊ฐ JSP๋ฅผ ์์ฒญํจ]
โ JSP ๋ด๋ถ์ `<c:if>`, `<c:forEach>` ๋ฑ ํ๊ทธ ๋ฐ๊ฒฌ๋จ
โ ๊ฐ๊ฐ์ ๋์ํ๋ Java ํ๊ทธ ํด๋์ค๊ฐ ์์ฑ๋จ (Tag ๊ฐ์ฒด)
โ ์กฐ๊ฑด ์ฒ๋ฆฌ ๋๋ ๋ฐ๋ณต ์ํ ํ, HTML๋ก ๋ณํ๋จ
โ ๊ตฌ์กฐ๋ ์์
<jsp>
<c:forEach> โ ForEachTag ๊ฐ์ฒด ์์ฑ๋จ
<c:if> โ IfTag ๊ฐ์ฒด ์์ฑ๋จ
...
</c:if>
</c:forEach>
</jsp>
๐ง ๋ฉ๋ชจ๋ฆฌ์ ์ผ๋ก ์ค์ํ ์
ํญ๋ชฉ | ์ค๋ช |
---|---|
ํ๊ทธ ๊ฐ์ฒด | JSP ์คํ ์ ๋งค๋ฒ ์์ฑ๋จ |
๋ฒ์ | request ๊ฐ ๋๋ ๋ ์ฌ๋ผ์ง |
GC ๋์ | JSP ์๋ต์ด ๋๋๋ฉด GC๊ฐ ํ์ํจ |
โ ์ฆ, ๋ชจ๋ JSTL ํ๊ทธ ๊ฐ์ฒด๋ ์์ฒญ๋ง๋ค ์์ฑ๋จ โ GC๊ฐ ์๋ ํ์
โจ 3๋จ๊ณ. ์ฌ์ฉ์ ์ ์ ํ๊ทธ(TagLib)์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฌ์ฉ ์ ๋ต
โ ์ฌ์ฉ์ ์ ์ ํ๊ทธ๋?
๐ฌ ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ง๋ ํ๊ทธ์ผ!
์๋ฅผ ๋ค์ด,
<my:dateFormat />
๊ฐ์ ๊ฑธ ๋ง๋ค ์ ์์ด.
โ ๋ง๋๋ ๋ฐฉ๋ฒ (๊ธฐ์ด ๊ตฌ์กฐ)
- ํ๊ทธ ํธ๋ค๋ฌ ํด๋์ค ๋ง๋ค๊ธฐ (
TagSupport
์์) doStartTag()
,doEndTag()
๋ฑ ๋ฉ์๋ ๊ตฌํ.tld
ํ์ผ๋ก ํ๊ทธ ์ ์- JSP์์
@taglib
์ผ๋ก ๋ถ๋ฌ์์ ์ฌ์ฉ
๐ฆ ์์
1. Java ํด๋์ค
public class HelloTag extends TagSupport {
public int doStartTag() {
try {
pageContext.getOut().println("์๋
ํ์ธ์!");
} catch(Exception e) {}
return SKIP_BODY;
}
}
2. JSP์์ ์ฌ์ฉ
<%@ taglib prefix="my" uri="/WEB-INF/tlds/mytag.tld" %>
<my:hello />
๐ง ์ฌ์ฉ์ ํ๊ทธ๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊น?
์ ๋ต: JSP ์ปจํ ์ด๋์ ๋ฐ๋ผ ๋ค๋ฆ!
๊ตฌ์กฐ | ์ค๋ช |
---|---|
๊ธฐ๋ณธ ๋์ | ๋งค ์์ฒญ๋ง๋ค ํ๊ทธ ๊ฐ์ฒด๊ฐ ์์ฑ๋จ |
์ต์ ํ ์ ๋ต | ํ๊ทธ ๊ฐ์ฒด๋ฅผ ํ(Pool) ๋ก ๊ด๋ฆฌํด์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ (Tomcat ๊ธฐ๋ณธ ์ต์ ํ) |
์กฐ๊ฑด | ํ๊ทธ๊ฐ ์ํ(state)๋ฅผ ๊ฐ์ง์ง ์์์ผ ํจ (์ฆ, ์ฐ๋ ๋ ์ธ์ดํ) |
โ ์ค๋ฌด ์ ๋ต
์ ๋ต | ์ค๋ช |
---|---|
ํ๊ทธ ํธ๋ค๋ฌ์ ์ธ์คํด์ค ๋ณ์ ์ฌ์ฉ ๊ธ์ง | ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์ ๊ฐ์ด ์์ผ ์ ์์ |
์ํ ์๋ ํ๊ทธ ๊ตฌํ | ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํด์ ๋ฉ๋ชจ๋ฆฌ ํจ์จโ |
๋ณต์กํ ํ๊ทธ๋ SimpleTagSupport ์ฌ์ฉ |
๋ ๊ฐ๋ณ๊ณ ๊น๋ํ ๊ตฌ์กฐ ์ ๊ณต |
๐ง 4๋จ๊ณ. ๋ฉด์ ํฌ์ธํธ ์ ๋ฆฌ
์ง๋ฌธ | ์ข์ ๋ต๋ณ ํฌ์ธํธ |
---|---|
JSTL ํ๊ทธ ๊ฐ์ฒด๋ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋ป๊ฒ ๊ด๋ฆฌ๋๋์? | ๋งค ์์ฒญ๋ง๋ค ์์ฑ๋๊ณ , ์์ฒญ ์ข ๋ฃ ํ GC ๋์์ ๋๋ค. |
์ฌ์ฉ์ ์ ์ ํ๊ทธ ๊ฐ์ฒด๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฐ์? | ์ํ๊ฐ ์๋ค๋ฉด, ์ปจํ ์ด๋๊ฐ ํ๊ทธ ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค. |
ํ๊ทธ ๊ฐ์ฒด๊ฐ ๋ง์์ง๋ฉด ์ฑ๋ฅ์ ์ํฅ ์๋์? | ๋ง์์๋ก GC ๋ถ๋ด์ด ์ฆ๊ฐํ๋ฉฐ, ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ตฌ์กฐ๊ฐ ์ข์ต๋๋ค. |
์ฌ์ฉ์ ํ๊ทธ๋ฅผ ๋ง๋ค ๋ ์ฃผ์์ ์? | ์ฐ๋ ๋ ์์ ์ฑ ํ๋ณด (์ธ์คํด์ค ๋ณ์ ์ฌ์ฉ ๊ธ์ง) |
โ ๋ง๋ฌด๋ฆฌ ์์ฝํ
ํญ๋ชฉ | ์ค๋ช | ๋ฉ๋ชจ๋ฆฌ ์ํฅ |
---|---|---|
JSTL ํ๊ทธ | ๋งค ์์ฒญ ์ ์ ๊ฐ์ฒด ์์ฑ | GC ๋์ (์งง์ ์๋ช ์ฃผ๊ธฐ) |
์ฌ์ฉ์ ํ๊ทธ | ๊ธฐ๋ณธ์ ๋งค ์์ฒญ๋ง๋ค ์์ฑ | ํ๋ก ์ฌ์ฌ์ฉ ๊ฐ๋ฅ (์ต์ ํ ์) |
ํ๊ทธ ์ฌ์ฌ์ฉ ์กฐ๊ฑด | ์ํ ์์ (stateless) | ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ & ์ฑ๋ฅ ํฅ์ |
โ PART 3.3 EL ํํ์๊ณผ ๋ฉ๋ชจ๋ฆฌ (์คํ์๋ ์ดํดํ๋ ๊ต์๊ธ ์ค๋ช )
๐ข 1๋จ๊ณ. EL(Expression Language)์ด ๋ญ์ผ?
๐ฌ EL์ JSP์์ ${๋ณ์๋ช }์ฒ๋ผ ๊ฐ๋จํ ํํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๊ฑฐ๋ ๋น๊ตํ๋ ์ธ์ด์ผ.
request.getAttribute("id")
๋์${id}
๋ง ์ฐ๋ฉด ๋จ!
โ ์์
<% request.setAttribute("name", "ํ๊ธธ๋"); %>
<p>์ด๋ฆ: ${name}</p>
๐ EL์ ์์์ request
, session
๋ฑ์ ๋ด์ฅ ๊ฐ์ฒด์์ ๊ฐ์ ์๋์ผ๋ก ์ฐพ์์ค!
๐ ์ฐพ๋ ์์(์ฐ์ ์์): EL ์ค์ฝํ ํ์ ์์
์ฐ์ ์์ | ์ค์ฝํ | ์ค๋ช |
---|---|---|
1 | PageScope | ํ์ฌ ํ์ด์ง ์์์๋ง |
2 | RequestScope | ์์ฒญ(request) ๋์๋ง |
3 | SessionScope | ๋ก๊ทธ์ธ ์ ์ง์ฉ |
4 | ApplicationScope | ์๋ฒ ์ ์ฒด ๊ณต์ฉ |
โ ์ด ์์๋๋ก ๋ณ์ ์ฐพ๊ณ , ๋จผ์ ์ฐพ์ ๊ฑธ ์ฌ์ฉํจ!
๐ง 2๋จ๊ณ. EL ๋ด๋ถ ๋์๊ณผ ์บ์ฑ ๊ตฌ์กฐ
๐ฌ ์ฌ์ฉ์๊ฐ ${member.name}
์ฒ๋ผ EL์ ์ผ์ ๋ ์๋ฒ ์์์๋?
๐ฆ ๋ด๋ถ ๋์ ์์ฝ
1. EL ํ์๊ฐ EL ํํ์ ํ์
ํจ โ "${member.name}"
2. PageScope โ RequestScope โ Session โ ApplicationScope ์ฐจ๋ก๋ก ํ์
3. member ๊ฐ์ฒด๊ฐ ๋ฐ๊ฒฌ๋๋ฉด โ getName() ๋ฉ์๋ ํธ์ถ
4. ๊ฒฐ๊ณผ ๊ฐ์ HTML๋ก ์ถ๋ ฅ
๐ง EL์ ๋งค ์์ฒญ๋ง๋ค ํ์ฑํ์ง ์๋๋ค!
EL์ ์ฑ๋ฅ์ ์ํด ๋ด๋ถ์ ์ผ๋ก ํํ์์ ์บ์ฑํจ.
โ ์์ฃผ ์ฐ๋
${member.name}
๊ฐ์ ํํ์ ๋ฏธ๋ฆฌ ๋ถ์ํด๋๊ณ ์ฌ์ฌ์ฉํจ.
โ ์บ์ฑ ๊ตฌ์กฐ์ ํจ๊ณผ
ํญ๋ชฉ | ์ค๋ช |
---|---|
๋น ๋ฆ | ๊ฐ์ ํํ์์ ์ฌ๋ฌ ๋ฒ ์ฐ๋ฉด ํ์ฑ ์๋ต |
๋ฉ๋ชจ๋ฆฌ ํจ์จ โ | ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ฒด๋ก ๋ง๋ค์ด ์ฌ์ฌ์ฉ |
์ค๋ฌด ํ | ๋ณต์กํ EL์ ๋ณ์๋ก ๋ถ๋ฆฌํด์ ์บ์ฑ ํจ๊ณผ ๊ทน๋ํ ๊ฐ๋ฅ |
๐ง GC ๊ด์ ์ค๋ช
- ์บ์๋ ํํ์์ JSP์ ์๋ธ๋ฆฟ ํด๋์ค์ ์ ์ฅ๋จ โ ์๋ฒ๊ฐ ์ข ๋ฃ๋๊ธฐ ์ ๊น์ง ์ด์์์
- ๋จ, EL์ด ์ฐธ์กฐํ๋ ๊ฐ์ฒด(
request
,session
)๊ฐ ์ฌ๋ผ์ง๋ฉด โ EL ๊ฒฐ๊ณผ๋ ๋ฌ๋ผ์ง - EL ์บ์ ์์ฒด๋ GC๊ฐ ์ ์ ๋ฆฌ ๋ชป ํ๋ฏ๋ก ๊ณผ๋ํ ํํ์ ๋จ์ฉ์ ์ฃผ์
๐ 3๋จ๊ณ. <c:forEach>
vs ์ผ๋ฐ for๋ฌธ ๋ฉ๋ชจ๋ฆฌ ์ฐจ์ด
โ ์์ ๋น๊ต
1. JSTL ๋ฐฉ์ (<c:forEach>
)
<c:forEach var="item" items="${list}">
<p>${item.name}</p>
</c:forEach>
2. ์คํฌ๋ฆฝํ๋ฆฟ ๋ฐฉ์ (for
๋ฌธ)
<%
for(Member m : list) {
%>
<p><%= m.getName() %></p>
<%
}
%>
โ ๋ฉ๋ชจ๋ฆฌ ๋น๊ต
ํญ๋ชฉ | <c:forEach> |
์๋ฐ for๋ฌธ (<% %> ) |
---|---|---|
ํ๊ทธ ๊ฐ์ฒด ์์ฑ | ForEachTag ๊ฐ์ฒด ์์ฑ | ์์ (๋จ์ ๋ฃจํ) |
์๋ | ์ฝ๊ฐ ๋๋ฆผ (๋ฐ๋ณต๋ง๋ค ํ๊ทธ ๋ฉ์๋ ํธ์ถ) | ๋น ๋ฆ |
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ | JSP ๋ด์์ ํ๊ทธ ๊ฐ์ฒด, ๋ฐ๋ณต ๋ณ์๋ฅผ ๋งค๋ฒ ์์ฑ | ์ง์ญ ๋ณ์๋ง ์ฌ์ฉ |
GC ์ํฅ | ๊ฐ์ฒด ์ ๋ง์ผ๋ฉด GC ์๋ฐ โ | ๊ฑฐ์ ์์ |
๊ฐ๋ ์ฑ | ๋์ (HTML์ ๊ฐ๊น๊ณ ๋ช ํ) | ๋ฎ์ (Java ์ฝ๋ ์์) |
๋ฉํฐ ๊ฐ๋ฐ์ ํ๊ฒฝ | ๐ ๋์์ด๋์ ํ์ ์ฌ์ | ์ด๋ ค์ |
๐ง ์ค๋ฌด ์ต์ ํ ์ ๋ต
-
1000๊ฐ ์ด์์ ๋ฐ๋ณต ์ถ๋ ฅ์ฒ๋ผ ์ฑ๋ฅ์ด ์ค์ํ ๊ฒฝ์ฐ
โ Java ์ฝ๋ for๋ฌธ(์คํฌ๋ฆฝํ๋ฆฟ) ๋๋ Ajax ๋ ๋๋ง์ผ๋ก ๋์ฒด ๊ณ ๋ ค
-
๋จ์ํ ๋ฐ๋ณต(10~100๊ฑด ์ดํ)์
<c:forEach>
๊ฐ ๊ฐ๋ ์ฑ + ์ ์ง๋ณด์์ ์ข์
๐ 4๋จ๊ณ. ๋ฉด์ ํฌ์ธํธ ์ ๋ฆฌ
์ง๋ฌธ | ์ข์ ๋ต๋ณ ํฌ์ธํธ |
---|---|
EL์ ์ด๋ป๊ฒ ๋์ํ๋์? | 4๋จ๊ณ ์ค์ฝํ ํ์ โ getter ์คํ โ HTML ์ถ๋ ฅ |
EL์ ๋งค๋ฒ ์๋ก ํ์ฑํ๋์? | ์๋๋ค. ๋ด๋ถ์ ์ผ๋ก ํ์ฑ ์บ์ฑ ๊ตฌ์กฐ๊ฐ ์์ |
<c:forEach> ๋ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ด ์ข์๊ฐ์? |
๊ฐ๋ ์ฑ์ ์ข์ง๋ง ๋ฐ๋ณต ์ ๊ฐ์ฒด๊ฐ ์์ฑ๋์ด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์์ |
forEach ์ for ์ค ์ฑ๋ฅ ์ข์ ๊ฑด? |
์์ Java for๋ฌธ์ด ๋น ๋ฆ. ๋๋ ๋ฐ์ดํฐ ์ถ๋ ฅ ์ ๊ณ ๋ ค |
EL์ด GC์ ๋ฏธ์น๋ ์ํฅ์? | EL ์์ฒด๋ JSP ํด๋์ค์ ๋จ์์๊ณ , ์ฐธ์กฐ ๊ฐ์ฒด๊ฐ ์ฌ๋ผ์ง๋ฉด GC ๊ฐ๋ฅ |
โ ๋ง๋ฌด๋ฆฌ ์์ฝํ
ํญ๋ชฉ | ์ค๋ช |
---|---|
EL ์บ์ฑ ๊ตฌ์กฐ | ์์ฃผ ์ฐ๋ ํํ์ ํ์ฑ ๊ฒฐ๊ณผ ์ฌ์ฌ์ฉ |
EL ํ์ ์์ | Page โ Request โ Session โ Application |
<c:forEach> |
๋ฐ๋ณต ์ ํ๊ทธ ๊ฐ์ฒด ๋งค๋ฒ ์์ฑ (๊ฐ๋ ์ฑ ๐, ์ฑ๋ฅ์ ๋๋ฆด ์ ์์) |
์ผ๋ฐ for๋ฌธ | ๋น ๋ฅด์ง๋ง ์ฝ๋๊ฐ ๋ณต์กํ๊ณ ์ ์ง๋ณด์ ์ด๋ ค์ |