๐ ์น์๋น์ค ํ๋ก๊ทธ๋๋ฐ 7์ฅ JSP ์์ฉ
CHAP.07 JSP ์์ฉ
1. ์ก์ ํ ๊ทธ
์ก์ ํ ๊ทธ๋?
- ์ก์
(Action) ํ
๊ทธ
- JSP์์ ๊ฐ์ฒด ์์ฑ๊ณผ ๊ณต์ , ํ์ด์ง ์ด๋๊ณผ ์ ๋ฌ, ํ๊ทธ ํ์ผ ์์ฑ ๋ฑ์ ํ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ผ์ข ์ ์ปค์คํ ํ ๊ทธ
- ํ์ค ์ก์
(standard action)
- ์ปค์คํ ํ ๊ทธ ๊ธฐ๋ฐ์ด์ง๋ง ๋ณ๋์ taglib ์ง์์ด ์์ด jsp ์ ๋์ด ์ฌ์ฉ
- ์ปค์คํ
์ก์
(custion action)
- ๋ณ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น ํ์
ํ์ค ์ก์
- JSP์์ ํ๋ก๊ทธ๋จ์ ์ธ ์์๋ฅผ ๋ง์ด ๊ตฌํํ๊ฑฐ๋ ์ปจํธ๋กค๋ฌ๋ก ํ์ฉ ํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ
-
JSP ํ์ผ์์ ์ปค์คํ ํ ๊ทธ์ ๊ตฌ์กฐ์ ์ธ ํน์ง์ ์ด๋ ค HTML ํํ๋ก ํ๋ก๊ทธ๋จ ์์๋ฅผ ์ฒ๋ฆฌ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐํธํจ
-
ํ์ค ์ก์ ํ ๊ทธ์ ์ข ๋ฅ
์ก์ ํ๊ทธ ์ค๋ช jsp:forward
request์ response ๊ฐ์ฒด๋ฅผ ํฌํจํด ๋ค๋ฅธ ํ์ด์ง๋ก ํฌ์๋ํจ jsp:include
๋ค๋ฅธ ํ์ด์ง์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ํฌํจ์ํด jsp:useBean
์๋ฐ ๋น์ฆ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ๋ถ๋ฌ์ด jsp:setProperty
์๋ฐ ๋น์ฆ ๊ฐ์ฒด์ ์์ฑ(๋ฉค๋ฒ ๋ณ์)์ ๊ฐ์ ํ ๋นํจ jsp:getProperty
์๋ฐ ๋น์ฆ ๊ฐ์ฒด์ ์์ฑ๊ฐ์ ์ถ๋ ฅํจ jsp:param
include, forward ์ก์ ์ฌ์ฉ ์ ํ๋ผ๋ฏธํฐ ๊ฐ์ ์์ ํ๊ฑฐ๋ ์ถ๊ฐํจ
include ์ก์
- ๋ค๋ฅธ ํ์ด์ง๋ฅผ ํฌํจํ๋ค๋ ์ ์์
include
์ง์์ด์ ๋์ผํ์ง๋ง, ์ฒ๋ฆฌ ๊ณผ์ ์ ์ฐจ์ด๊ฐ ์์- include ์ง์์ด
- include๋ ํ์ผ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ ํฌํจํด ํ๋์ ํ์ผ๋ก ์ปดํ์ผ ํ ํ ๋ค์ ์ฒ๋ฆฌ, file ์์ฑ ์ฌ์ฉ
- include ์ก์
- include ๋ ํ์ผ์ ํธ์ถํด ์ฒ๋ฆฌ๋ ๊ฒฐ๊ณผ๋ง ํฌํจํด ๋ณด์ฌ์ค, page ์์ฑ ์ฌ์ฉ
- include ์ง์์ด
- include ์ก์
์ ์ฌ์ฉํ์ฌ
main.jsp
์header.jsp
๋ฅผ ํฌํจ์ํจ ๊ฒฝ์ฐmain.jsp
๋ฅผ ํธ์ถํ๋ฉดheader.jsp
์ ์ํ ๊ฒฐ๊ณผ๊ฐ ํฌํจ๋์ด ์ถ๋ ฅ
// main.jsp
<jsp:inlcude page="header.jsp">
<jsp:param name="title" value="My Homepage"/>
</jsp:inlcude>
// header.jsp
<h2>
<%= request.getParameter("title") %>
</h2>
foward ์ก์
- ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ค๋ฅธ ํ์ด์ง๋ก ์ ํํ๋ ์ก์
- ๋ฆฌ๋๋ ์
response.sendRedirect())
๊ณผ ๊ธฐ๋ฅ์ ์ผ๋ก ์ ์ฌํ์ง๋ง ๋ด๋ถ์ ์ผ๋ก๋ ์ฐจ์ด๊ฐ ์์- ๋ฆฌ๋๋ ์
- ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ก์ด ํ์ด์ง๋ก ๋ค์ ์ ์ํ๋๋ก ์๋ต์ ๋ณด๋ด๊ณ , ์๋ต์ ๋ฐ์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ก์ด ํ์ด์ง๋ก ์ ์ํ๋ ๋ฐฉ์
- foward ์ก์
- ํด๋ผ์ด์ธํธ๊ฐ ์๋กญ๊ฒ ์ ์ํ๋ ๊ฒ์ด ์๋ ์๋ฒ์์ ๋ด๋ถ์ ์ผ๋ก ์๋ก์ด ํ์ด์ง๋ก ์ด๋ํ๊ณ , ๊ทธ ํ์ด์ง์ ๋ด์ฉ์ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ต์ผ๋ก ์ ๋ฌํ๋ ๋ฐฉ์
- ๋ฆฌ๋๋ ์
- ๋จ์ํ ํ์ด์ง ์ด๋ : ๋ฆฌ๋๋ ์
-
์ต์ด request๋ฅผ ์ ์งํ๊ฑฐ๋ request์
setAttribute()
๋ก ์์ฑ๊ฐ์ ์ ์ฅํ๊ณ ์ด๋ฅผ ์ ์งํ๋ฉด์ ํ์ด์ง๋ฅผ ์ด๋ํ๋ ๊ฒฝ์ฐ : forward ์ก์ ์ด ์ ํฉ - include ์ก์
๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋ผ๋ฏธํฐ ์ถ๊ฐ ๊ธฐ๋ฅ
// main.jsp <jsp:forward page="result.jsp"> <jsp:param name="title" value="My Homepage"/> </jsp:include>
// result.jsp <h2> <%= request.getParameter("title") %> </h2>
Java bean
- ์๋ฐ ๋น(Java Bean)
- ์๋ฐ์ ์ฌํ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ ๋ชจ๋ธ
- ์น ๊ฐ๋ฐ์์๋ง ๊ตญํ๋ ๊ฐ๋
์ด ์๋๋ฉฐ POJO๋ผ๊ณ ํ๋ ๋จ์ํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง
- POJO(Plain Old Java Object)
- ํน์ ๊ธฐ์ ์ด๋ ํ๋ ์์ํฌ์ ์ข ์ํ์ง ์๊ณ ๊ธฐ๋ณธ ์์ฑ์์ ๋งด๋ฒ ๋ณ์์ ๋ํ getter/setter ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ฉฐ ์ง๋ ฌํ ํ ์ ์๋ ์๋ฐ ํด๋์ค
- ex) ์ํฐํฐ ํด๋์ค or DO(Data Object)๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ ์ด๋ธ ์นผ๋ผ์ ํด๋นํ๋ private ๋ฉค๋ฒ ๋ณ์์ getter/setter ๋ฉ์๋๋ก ๊ตฌ์ฑ ๊ฐ๋ฅ
- POJO(Plain Old Java Object)
- ์๋ฐ ๋น ๊ตฌ์กฐ์ ํน์ง
- ์ธ์๊ฐ ์๋ ์์ฑ์(๊ธฐ๋ณธ ์์ฑ์)ํฌํจ
- ํ์ผ ํน์ ๋คํธ์ํฌ๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ์ง๋ ฌํ ๊ตฌ์กฐ
getter/setter ๋ฉ์๋
๋ฅผ ํตํด ๋งด๋ฒ ๋ณ์(์์ฑ)์ ์ ๊ทผ
- ๋ง์ฝ ๋งด๋ฒ ๋ณ์ ์ด๋ฆ์ ๋ค๋ฅด๊ฒ ์ค์ ํ๋ค๋ฉด?
- ex)
member, setPerson
๋งด๋ฒ๋ณ์: member, ํ๋กํผํฐ: Person
- ex)
- ํ์ ๊ด๋ฆฌ๋ฅผ ์ํ
Member
ํด๋์ค๋ฅผ ์๋ฐ ๋น ๊ตฌ์กฐ๋ก ๋ํ๋ด๋ฉด- getter/setter ๋ฉ์๋์ ์ด๋ฆ: โget/set + ๋๋ฌธ์๋ก ์์ํ๋ ๋ณ์๋ช โ ํํ
- ์ธ์๋ฅผ ๋ฐ์ ํ์ฌ ๋งด๋ฒ๋ณ์์ ๊ฐ์ ๋์ ํ๊ฑฐ๋ ํ์ฌ ๊ฐ ๋ฐํ
- ๋งค์๋ ๋ด์์ ์ถ๊ฐ์ ์ผ๋ก ํ์ํ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์์ผ๋ฉฐ ์ด๋ฌํ ๊ตฌ์กฐ๋ ๊ฐ์ฒด์งํฅ์์ ์บก์ํ์ ํ ํํ์ด๊ธฐ๋ ํจ
class Member{ private int id; private String name; private String email; ... // setter ๋งค์๋ ์ ์ธ public void setId(int id){ this.id = id; } // getter ๋งค์๋ ์ ์ธ public int getId(){ return this.id; } ... }
useBean ์ก์
- useBean ์ก์
- JSP์์ ์๋ฐ ๋น ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ์ฐธ์กฐํ๊ธฐ ์ํ ์ก์
- ๋งค์ฐ ์ ์ฉํ๋, JSP๋ฅผ ๋จ์ํ ๋ทฐ ์ญํ ๋ก๋ง ์ฌ์ฉํ๋ค๋ฉด ์ฌ์ฉํ ์ผ์ ์์
- useBean์ ๊ธฐ๋ณธ์ ์ธ ๋์ ๋ฐฉ์
- useBean์ ์ด์ฉํด ๋ง๋ ๊ฐ์ฒด์ ๋ฒ์๋ ์ง์ ํ๋ ์์ฑ์ธ scope์ ์ฃผ์ด์ง id์ ๊ฐ์ฒด๊ฐ ์๋์ง ํ์ธํ๋ค.
- ๊ฐ์ฒด๊ฐ ์๋ค๋ฉด ์๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ํด๋น scope์ ์ ์ฅํ๋ค.
- useBean ์ก์
์ ๊ธฐ๋ณธ ๊ตฌ๋ฌธ๊ณผ ์ฌ์ฉ ์
<jsp:useBean id="instanceName" scope="page | request | session | application" class="packageName.className" type="pakageName.className" beanName="packageName.className"> </jsp:useBean>
- id: ์๋ฐ ๋น์ ํน์ ์ค์ฝํ์ ์ ์ฅํ๊ฑฐ๋ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉํ๋ ์ด๋ฆ
- ํ์ฌ ํ์ด์ง์๋ ํด๋น ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๊ธฐ ์ํ ๋ณ์๋ช ์ด ๋จ
- scope: ํด๋น ํด๋์ค ํ์ ์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๊ฑฐ๋ ๊ฐ์ง๊ณ ์ค๋ ๋ฒ์
- class: ์์ฑํ๊ฑฐ๋ ์ฐธ์กฐํ๋ ค๋ ๊ฐ์ฒด์ ํด๋์ค๋ช
- ๋ฐ๋์ ํจํค์ง๋ช ๊น์ง ๋ช ์ํด์ผ ํ๋ฉฐ, ์ถ์ํด๋์ค๋ ์ธํฐํ์ด์ค๋ ์ฌ์ฉํ ์ ์์
- type: ํน์ ํ์
์ ํด๋์ค๋ฅผ ๋ช
์ ํ ๋ ์ฌ์ฉ
- ์ถ์ํด๋์ค๋ ์ธํฐํ์ด์ค, ์ผ๋ฐ ํด๋์ค๊ฐ ๋ ์ ์์ผ๋ฉฐ class ์์ฑ์ ํด๋์ค์์ ์์ ํน์ ๊ตฌํ์ด ์ด๋ฃจ์ด์ ธ์ผ ํจ
- beanName: type๊ณผ beanName์ ์ฌ์ฉํด class ์์ฑ์ ๋์ฒด ํ ์ ์์
java.beans.Beans.instantiate()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ Bean์ ์ธ์คํด์คํ
- id: ์๋ฐ ๋น์ ํน์ ์ค์ฝํ์ ์ ์ฅํ๊ฑฐ๋ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉํ๋ ์ด๋ฆ
useBean์ ํ์ฉ
- useBean์ ์ฃผ๋ก ํ์ฉํ๋ ๊ฒฝ์ฐ
- HTMLํผ์์ ์
๋ ฅํ ๊ฐ์ ์๋ฐ ๊ฐ์ฒด๋ก ์ฐ๋ ํ ๋ ์ฃผ๋ก ํ์ฉ
- ex) ํ์ ๊ฐ์ ํ์ด์ง์์ ์์ด๋, ์ด๋ฆ, ์ ํ๋ฒํธ, ์ฃผ์ ๋ฑ ์ฌ๋ฌ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๊ณ ๊ฐ์ ํ๋ ๊ฒฝ์ฐ
- ์ ๋ ฅ๊ฐ์ ๋ฐ์ Member ๊ฐ์ฒด์ ๋ฃ๊ณ ์ด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋ฉ์๋ ํธ์ถ์ ์ธ์๋ฅผ ์ ๋ฌ
<jsp:useBean id="m" class="com.my.Member"/> <jsp:setProperty name="m" property="*"/> <% MemberDAO dad = new MemberDAO(); dao.insertDB(m); %>
- HTMLํผ์์ ์
๋ ฅํ ๊ฐ์ ์๋ฐ ๊ฐ์ฒด๋ก ์ฐ๋ ํ ๋ ์ฃผ๋ก ํ์ฉ
setProperty์ getProperty ํ์ค ์ก์
- setProperty ํ์ค ์ก์
์ฌ์ฉ
- ์๋ฐ๋น ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค์์๋ set-๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด์ ํ๋กํผํฐ ๊ฐ ์ค์ ๊ฐ๋ฅ
<jsp:setProperty>
ํ์ค ์ก์ ์ ์ด์ฉํ๋ฉด set-๋ฉ์๋๋ฅผ ์ง์ ํธ์ถ ํ์ง ์์๋ ํ๋กํผํฐ ๊ฐ์ ์ค์
<% obj.setAge("27") %> // -> <jsp:setProperty name="obj" property="age" value="27"/>
- getProperty ํ์ค ์ก์
์ฌ์ฉ
- ์๋ฐ๋น ๊ฐ์ฒด์ ํ๋กํผํฐ ๊ฐ์ ์ฝ์ด ์ค๊ธฐ ์ํด get-๋ฉ์๋ ์ด์ฉ
jsp:getProperty>
ํ์ค ์ก์ ์ ์ฌ์ฉํ๋ฉด get-๋ฉ์๋๋ฅผ ์ง์ ํธ์ถํ์ง ์๊ณ ๋ ํ๋กํผํฐ ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์์
<% int age = obj.getAge(); %> // -> <jsp:getProperty name="obj" property="age"/>
- ์น ๋ธ๋ผ์ฐ์ ๋ก๋ถํฐ ์
๋ ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฐ๋น ํ๋กํผํฐ๋ก ์ค์ ํ๋ ๋ฐฉ๋ฒ
<jsp:setProperty/>
์ก์ ์ value ์ดํธ๋ฆฌ๋ทฐํธ ๋์param
์ด๋ผ๋ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ์ ์ด๋ฆ์ ์ง์ ์ง์ ๊ฐ๋ฅ
<jsp:useBean class="mall.PersonalInfo" id="pinfo" /> <jsp:setProperty name="pinfo" property="name" param="NAME"/> <jsp:setProperty name="pinfo" property="gender" param="GENDER"/> <jsp:setProperty name="pinfo" property="age" param="AGE"/>
- ์น ๋ธ๋ผ์ฐ์ ๋ก๋ถํฐ ์ ๋ ฅ๋ ๋ฐ์ดํฐ์ ํ๋กํผํฐ ์ด๋ฆ์ด ๋์ผํ ๊ฒฝ์ฐ ํ๋ฒ์ ๊ฐ ์ค์ ๊ฐ๋ฅ
<jsp:setProperty name="info" property="*"/>
์๋ฐ๋น์ ๋คํ์ฑ ํ์ฉ
์ฐธ๊ณ ํ์ธ์
2. [์ค์ต 7-1] ์ก์ ์ข ํฉ ์์ : ๊ณ์ฐ๊ธฐ ๊ตฌํ
3. ์ปค์คํ ํ ๊ทธ์ EL
์ปค์คํ ํ ๊ทธ๋?
- ์ปค์คํ
ํ
๊ทธ(Custom Tag)
- ์ฌ์ฉ์ ์ ์ ํ ๊ทธ
- ์คํฌ๋ฆฝํธ๋ฆฟ ์ฌ์ฉ์ ์ค์ด๊ณ ํ ๊ทธ์ ๊ฐ์ ํํ๋ก ํ๋ก๊ทธ๋จ ์ฝ๋๋ฅผ ๋์ฒดํ๊ฑฐ๋ ์ฌํ์ฉ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ฅผ ํตํด ํ ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ํ์ฉํ๊ณ ์ ๊ฐ๋ฐ๋ ๊ท๊ฒฉ
- ์ธํ์ ์ธ ํํ๋ XML(HTML) ํ ๊ทธ ๊ตฌ์กฐ์ด์ง๋ง ์๋ธ๋ฆฟ ํํ๋ก ๋ณํ๋ ๋ ์๋ฐ ์ฝ๋๋ก ๋ณ๊ฒฝ๋์ด ํตํฉ๋จ
- ์ปค์คํ
ํ
๊ทธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋
taglib
์ง์์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ปค์คํ ํ ๊ทธ๊ฐ ์ด๋์ ์ ์๋์ด ์๋์ง๋ฅผ ๋จผ์ ์ ์ธํด์ผ ํ๋ฉฐ ํ ๊ทธ์ ์ฌ์ฉํ ์ ๋์ด ์ง์ - ์ปค์คํ
ํ
๊ทธ ์์ฒด๊ฐ ์๋ฒ์์ ํด์๋๋ฉฐ, ํ๋ก์ ํธ๊ฐ ํน์ ์ปค์คํ
ํ
๊ทธ์ ์ข
์ ๋ ์ ์๋ค๋ ๋ฌธ์ ๋๋ฌธ์ ์ปค์คํ
ํ
๊ทธ๋ฅผ ์ง์ ๋ง๋๋ ๋ฐฉ์์ ์ ์ฐจ ๊ฐ์
- ๋์ ์ปค์คํ ํ ๊ทธ ๊ธฐ์ ๋ก ๋ง๋ค์ด์ง JSTL(JSP Standard Tag Libirary)์ด ์๋ฐ ์น๊ฐ๋ฐ์ ๊ผญ ํ์ํ ์์๊ฐ ๋จ
- ์ปค์คํ
ํ
๊ทธ์ ์์
- ํน์ ์ํ ์ฝ๋๋ฅผ ์ ๋ฌํ๋ฉด ํด๋น ์ํ์ ๋ํ ์ธ๋ถ ์ ๋ณด ์ถ๋ ฅ
<%@ taglib tagdir="/WEB-INF/tags" prefix="m" %> <m:printData pid="8127832"/>
- ํ ๊ทธ ํ์ผ๋ก ์ ์๋ ์ปค์คํ ํ ๊ทธ ์ฌ์ฉ
WEB-INF/tags/printData.tag
ํ์ผ๋ก๋ถํฐ ํ ๊ทธ ์ ์๋ฅผ ๊ฐ์ง๊ณ ์ด- m์ ํ ๊ทธ ์์ ๋ถ์ผ ์ ๋์ด๋ก ํ ๊ทธ ํ์ผ๋ช ์ด ํ ๊ทธ ์ด๋ฆ์ด ๋จ
- ํ์ค ์ก์
๊ณผ ์ปค์คํ
ํ
๊ทธ
- ์ปค์คํ ํ ๊ทธ๋ ํ ๊ทธ ๊ตฌ์กฐ๋ก ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋ฐฉ์
- ๊ฐ๋ฐ์๊ฐ ํ์์ ๋ฐ๋ผ ์ปค์คํ ํ ๊ทธ๋ฅผ ๊ตฌํํด ํ๋ก๊ทธ๋ ์ ํ์ฉ
<jsp:setPropert>
์ญ์ ์ปค์คํ ํ ๊ทธ๋ก jsp์ ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํจ๋์ด ์์ด ํ์ค ์ก์ ์ด๋ผ ๋ถ๋ฅด๊ณtaglib
์ง์์ด ์์ด ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค.
์ปค์คํ ํ ๊ทธ ๋ง๋ค๊ธฐ
- ๋ง๋๋ 2๊ฐ์ง ๋ฐฉ๋ฒ
- ํ ๊ทธ ํ์ผ์ ์์ฑํ์ฌ ๋ง๋๋ ๋ฐฉ๋ฒ
- ํ ๊ทธ ํด๋์ค๋ฅผ ์์ฑํ์ฌ ๋ง๋๋ ๋ฐฉ๋ฒ
- ํ
๊ทธ ํ์ผ(tag file)์ด๋ JSP ํ์ด์ง์ ๋น์ทํ ๋ฌธ๋ฒ์ผ๋ก ์์ฑํ๋ ํ
์คํธ ํ์ผ๋ก, ํน์ ๋๋ ํ ๋ฆฌ์ ์ ์ฅํ๊ณ
taglib
์ง์์ด๋ก ์ง์ <%@tag body-content="scriptless" %> <table border=1 cellpadding=20> <tr> <td> <jsp:doBody/> </td> </tr> </table>
- ํ
๊ทธ ํด๋์ค(tag class)๋ ํ
๊ทธ ํ์ผ๊ณผ ๋ฌ๋ฆฌ ์๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฌธ๋ฒ์ ๋ฐ๋ผ ์์ ํ ์๋ฐ ํด๋์ค ํํ๋ก ์์ฑ
- ์ปดํ์ผ ํ
.tld
ํ์ผ์ ํ๊ทธ ํด๋์ค ๋ฑ๋ก .tld
ํ์ผ์ web.xml ํ์ผ์ ๋ฑ๋ก
package util; import java.io.*; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; public class BoxTag extends SimpleTagSupport { public void doTag() throws JspException, IOException { JspContext context = getJspContext(); JspWriter out = context.getOut(); JspFragment body = getJspBody(); out.println("<TABLE border=1 cellpadding=20><TR><TD>"); body.invoke(out); out.println("</TD></TR></TABLE>"); return; } }
- ์ปดํ์ผ ํ
ํ ๊ทธ ํ์ผ ๋ง๋ค๊ธฐ
- ์์ฃผ ๊ฐ๋จํ ํ๊ทธ ํ์ผ
- ํ๊ทธ ํ์ผ์ ์ด์ฉํ์ฌ ๋ง๋ ์ปค์คํ ์ก์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณธ์ฒด๋ฅผ ๊ฐ์ง ์ ์๋ค.
- ์ปค์คํ
์ก์
์ ๋ณธ์ฒด๋ ์์ ํ
๊ทธ์ ๋ ํ
๊ทธ ์ฌ์ด์ ์ค๋ ๋ถ๋ถ์ ๋งํ๋ค
<util:box>์ผ์ ํ๊ฐ ์ทจ์๋์์ต๋๋ค.</util:box>
- ์ปค์คํ
์ก์
์ด ๋ณธ์ฒด๋ฅผ ๊ฐ์ง ์๋๋ก ๋ง๋ค๊ธฐ ์ํด์๋ ํ๊ทธ ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ tag์ง์์๋ฅผ ์จ์ผ ํ๋ค
<%@ tag body-content="empty" %>
-
ํ ๊ทธ ํ์ผ์๋ ๋ช๊ฐ์ง ์ง์์ด๋ฅผ ๋ ์ฌ์ฉํ ์ ์์ | ์ด๋ฆ | ์ญํ | | :โโโโโ: | :โโโโโโโโโโโโโโโโโโโโโโโโโโโโ: | | tag์ง์์ด | ์น ์ปจํ ์ด๋๊ฐ ํ๊ทธ ํ์ผ์ ์ฒ๋ฆฌํ ๋ ํ์ํ ์ ๋ณด๋ฅผ ๊ธฐ์ | | include ์ง์์ด | ๋ค๋ฅธ ํ๊ทธ ํ์ผ์ ํฌํจ | | taglib ์ง์์ด | ํ๊ทธ ํ์ผ์์ ์ฌ์ฉํ ๋ค๋ฅธ ์ปค์คํ ์ก์ ์ ํ ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(tag libary)์ ๋ํ ์ ๋ณด๋ฅผ ๊ธฐ์ | | attribute ์ง์์ด | ์ปค์คํ ์ก์ ์ ์ดํธ๋ฆฌ๋ทฐํธ์ ๋ํ ์ ๋ณด๋ฅผ ๊ธฐ์ | | variable ์ง์์ด | ์ปค์คํ ์ก์ฐ์ด ๋ณ์์ ๋ํ ์ ๋ณด๋ฅผ ๊ธฐ์ |
-
include ์ง์์ด์ taglib์ง์์ด๋ jspํ์ด์ง์์์ ๋๊ฐ์ ์ญํ ์ ํ๊ณ ๋๋จธ์ง ์ธ ์ง์์ด๋ ํ๊ทธํ์ผ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- ์ ์ ์ถ๋ ฅํ๋ ์ปค์คํ
ํ๊ทธ ํ์ผ
-
WEB-INF/tags/line.tag
๋ก ์ ์ฅ<!-- line.tag --> <%@ tag body-content="empty" %> --------------------- <br>
- jsp ํ์ด์ง์์ ์ปค์คํ
ํ๊ทธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด taglib์ง์์ด ์ฌ์ฉ
<%@taglib prefix="util" tagdir="/WEB-INF/tags" %>
- jspํ์ด์ง ๋ด์์ ์ ๋์ด์ ํ
๊ทธ ํ์ผ์ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ํ
๊ทธ ์ฌ์ฉ
<util:line/>
<%@page contentType="text/html"; charset=euc-kr %> <%@taglib prefix="util" tagdir="/WEB-INF/tags" %> <html> <head> <title>์ค๋์ ๋ฉ๋ด</title> </head> <body> <h3>์ค๋์ ์ ์ฌ ๋ฉ๋ด์ ๋๋ค.</h3> <util:line/> ์ผ๊ณํ<br> ๋ณถ์๋ฐฅ<br> ํ๊น์ฐ๋<br> <util:line/> </body> </html>
-
- ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ง์ํ๋ ํ
๊ทธ ํ์ผ
<!-- newLine.tag --> <%@tag body-content="empty" %> <%@attribute name="color"%> <%@attribute name="size" type="java.lang.Integer" %> <FONT color=${color} > <% for (int cnt = 0; cnt < size; cnt++) out.print("-"); %> </FONT><BR>
<%@page contentType="text/html; charset=euc-kr"%> <%@taglib prefix="util" tagdir="/WEB-INF/tags/util" %> <HTML> <HEAD><TITLE>์ค๋์ ๋ฉ๋ด</TITLE></HEAD> <BODY> <util:newLine color="blue" size="25" /> ์ ๋ ๋ฉ๋ด <BR> <util:newLine color="red" size="20" /> ๋ถ๊ณ ๊ธฐ ๋ฎ๋ฐฅ <BR> ์นด๋ ๋ผ์ด์ค <BR> ์ซ๋ฉด <BR> <util:newLine color="blue" size="25" /> </BODY> </HTML>
- ์ปค์คํ
์ก์
์ ๋ณธ์ฒด๋ฅผ ์ฒ๋ฆฌํ๋ ํ
๊ทธ ํ์ผ
<!-- box.tag --> <%@tag body-content= "scriptless" %> <TABLE border=1 cellpadding=20> <TR> <TD> <jsp:doBody/> </TD> </TR> </TABLE>
<%@page contentType=โtext/html; charset="euc-kr"%> <%@taglib prefix="util" tagdir="/WEB-INF/tags/util" %> <HTML> <HEAD><TITLE>๊ณต์ง์ฌํญ</TITLE></HEAD> <BODY> ๊ตฌ๋ด ์๋น์์ ์๋ ค๋๋ฆฝ๋๋ค. <util:box> ๊ณต์ฌ ๊ด๊ณ๋ก ๊ธ์์ ์ผ์ ์ค๋จํฉ๋๋ค. <BR> </util:box> </BODY> </HTML>
- ๋ณ์๋ฅผ ์ง์ํ๋ ์ปค์คํ
์ก์
01
<%@tag pageEncoding="euc-kr"%> <%@tag body-content="empty" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@attribute name="num1" type="java.lang.Integer"%> <%@attribute name="num2" type="java.lang.Integer"%> <%@variable name-given="maximum" variable-class="java.lang.Integer" scope="AT_END"%> <!-- AT_END ํ ๊ทธ๊ฐ ๋๋ ๋ --> <!-- AT_BEGIN ํ ๊ทธ๊ฐ ์์ํ ๋ --> <!-- ์๋ฌดํผ ๋จธ ํ๋ ๋ ์์ --> <% int result; if (num1 > num2) result = num1; else result = num2; %> <c:set var="maximum" value="<%= result %>" />
<%@page contentType="text/html; charset=euc-kr"%> <%@taglib prefix="util" tagdir="/WEB-INF/tags/util" %> <HTML> <HEAD><TITLE>์ต๋๊ฐ ๊ตฌํ๊ธฐ</TITLE></HEAD> <BODY> <H3>์ต๋๊ฐ ๊ตฌํ๊ธฐ</H3> <util:max num1="${param.NUM1}" num2="${param.NUM2}" /> ์ต๋๊ฐ: ${maximum} </BODY> </HTML>
- ๋ณ์๋ฅผ ์ง์ํ๋ ์ปค์คํ
์ก์
01
<%@tag pageEncoding="euc-kr"%> <%@tag body-content="empty" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@attribute name="var" required="true" rtexprvalue="false"%> <!-- required -> null check --> <!--runtime expression value? -> expression or EL์ ์ฌ์ฉํ์ฌ ์ ์ฅํ๋ฉด ์๋จ --> <%@attribute name="num1" type="java.lang.Integer"%> <%@attribute name="num2" type="java.lang.Integer"%> <%@variable name-from-attribute="var" alias="maximum" variable-class="java.lang.Integer" scope="AT_END"%> <% int result; if (num1 > num2) result = num1; else result = num2; %> <c:set var="maximum" value="<%= result %>" />
<%@page contentType="text/html; charset=euc-kr"%> <%@taglib prefix="util" tagdir="/WEB-INF/tags/util" %> <HTML> <HEAD><TITLE>์ต๋๊ฐ ๊ตฌํ๊ธฐ</TITLE></HEAD> <BODY> <H3>์ต๋๊ฐ ๊ตฌํ๊ธฐ</H3> <util:newMax var="MAX" num1="${param.NUM1}" num2="${param.NUM2}" /> ์ต๋๊ฐ: ${MAX} </BODY> </HTML>
EL์ด๋?
- ํํ ์ธ์ด(Expression Language, EL)
- ํ์ฌ ํ์ด์ง์ ์๋ฐ ๊ฐ์ฒด ํน์ scope object์ ์ ์ฅ๋ ์๋ฐ ๋น ๊ฐ์ฒด๋ฅผ ์์ฝ๊ฒ ์ ๊ทผํ๊ณ ์ฌ์ฉํ ์ ์๊ฒ ํจ
- ๋ฐ์ดํฐ๋ฅผ ํํํ๊ธฐ ์ํ ์ฉ๋๋ก ์ค๊ณ๋์์ง๋ง, ์ ํ๋ ๊ฐ์ฒด ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ๋ฉฐ ํด๋น ๊ฐ์ฒด์ ๋ฉ์๋ ํธ์ถ๋ ๊ฐ๋ฅ
- EL์ ๋จ์ํ ์ถ๋ ฅ ์ธ์๋ ์ฌ์น์ฐ์ฐ, ๋น๊ต์ฐ์ฐ, ๋
ผ๋ฆฌ์ฐ์ฐ, 3ํญ ์ฐ์ฐ ๋ฑ์ ์ง์
- ์ฐ์ฐ๊ธฐ๋ฅ์ ํต์ฌ ๋ก์ง์ ๊ตฌํ๋ณด๋ค๋ ์ํฉ์ ๋ฐ๋ผ ์ถ๋ ฅ ๊ฐ์ ๋ณ๊ฒฝํ๋ ์ ๋์ ์ฉ๋๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์
- EL์ ์ฅ์
- ๊ฐ๋จํ ๊ตฌ๋ฌธ์ผ๋ก ์์ฝ๊ฒ ๋ณ์/๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ ํ ์ ์์
- ๋ฐ์ดํฐ๊ฐ ์๊ฑฐ๋ null ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์
- ์๋ฐ ๋น ์ ๊ทผ
- EL์ ํตํด scope object์ ์ ์ฅ๋ ์๋ฐ ๋น ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๋ฐฉ๋ฒ
${์ ์ฅ์ด๋ฆ.๋ณ์๋ช }
- ์๋ฐ ๋น ์ค๋ช
์์ ๋ง๋ Memberํด๋์ค์ ๋ฉค๋ฒ ์ ๋ณด์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ
- ์ปจํธ๋กค๋ฌ์ ์ํด seesion์ ์ ์ฅ๋๋ ๊ณผ์ ์ด ์์๋ค๊ณ ๊ฐ์
<h2>๋งด๋ฒ ์ ๋ณด</h2> ์ด๋ฆ: ${m.name} <br>
- ์ปจํธ๋กค๋ฌ์ ์ํด seesion์ ์ ์ฅ๋๋ ๊ณผ์ ์ด ์์๋ค๊ณ ๊ฐ์
- EL์ ํตํด scope object์ ์ ์ฅ๋ ์๋ฐ ๋น ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๋ฐฉ๋ฒ
- EL์ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ
- ํํ์์ ์ฌ์ฉํ๊ฑฐ๋
<jsp:getProperty>
์ก์ ์ผ๋ก ์ถ๋ ฅ ํ ์ ์์<!--ํํ์ ์ฌ์ฉ--> ์ด๋ฆ: <%= m.name %> <br> <!--์ก์ ์ฌ์ฉ--> ์ด๋ฆ: <jsp:getProperty name="m" property="nname"/> <br>
- ํํ์์ ์ฌ์ฉํ๊ฑฐ๋
- EL ์ฐ์ฐ
- ๊ธฐ๋ณธ์ ์ธ ์ฌ์น์ฐ์ฐ, ๋น๊ต์ฐ์ฐ, ๋ ผ๋ฆฌ์ฐ์ฐ, 3ํญ์ฐ์ฐ ๋ฑ์ด ๊ฐ๋ฅ
- ๋ฐฐ์ด, ๋งต ๋ฐ์ดํฐ ์ฐ๋
- ์ฐธ์กฐํ๋ ๊ฐ์ฒด๊ฐ ๋ฐฐ์ด์ด๋ ๋งต ํํ์ธ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉ
${myList[0]} // ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ ${myMap["name"]} // ๋งต์ธ ๊ฒฝ์ฐ
- Scope Object ์ ๊ทผ
- EL์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ scope์์ ์๋ฐ ๋น ๊ฐ์ฒด๋ฅผ ์ฐพ์
- ํน์ scope๋ง์ ๋์์ผ๋ก ์ฐธ์กฐํ๋ ค๋ฉด
๋ด์ฅ๊ฐ์ฒด๋ช Scope.์์ฑ์ด๋ฆ
์ฌ์ฉ- ex)
session
๊ณผrequest
๋ชจ๋์m
์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ์ฅ๋ ๊ฐ์ฒด๊ฐ ์๋ค๊ณ ํ ๋,request scope
์ ์๋ ๊ฐ์ฒด๋ฅผ ์ฐธ๊ณ ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉ์ด๋ฆ : ${requestScope.m.name}
- ex)
- ์ฐธ์กฐํ๋ ๊ฐ์ฒด๊ฐ ๋ฐฐ์ด์ด๋ ๋งต ํํ์ธ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉ
4. JSTL
JSTL์ด๋?
- JSTL(JSP Standard Tag Library)
- JSP์์ ์คํฌ๋ฆฝํธ๋ฆฟ(์๋ฐ ์ฝ๋ ๋ธ๋ก)์ ์ฌ์ฉํ์ง ์๊ณ HTMLํ์์ ์ ์งํ๋ฉด์ ์กฐ๊ฑด๋ฌธ, ๋ฐ๋ณต๋ฌธ, ๊ฐ๋จํ ์ฐ์ฐ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ง์ํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ํ์ค ์ปค์คํ ํ ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์๋ฒ์์๋ง ํด์ํ ์ ์์ผ๋ฏ๋ก ๋์์ด๋์์ ํ์ ์ ๋ถํธํ ๋ถ๋ถ ์กด์ฌ
- ๊ฐ๋ฐ ๊ณผ์ ์์ UI ํ์ธ์ ์ํด ์๋ฒ๋ฅผ ํตํด์ผ๋ง ํ๋ ๋นํจ์จ์ ์ธ ๋ฌธ์
- ๋ชจ๋ฐ์ผ ํ๊ฒฝ ์ค์ฌ์ ํ๋ฐํธ์ค๋ ๊ฐ๋ฐ ํธ๋๋์๋ ๋ค์ ๊ฑฐ๋ฆฌ๊ฐ ์์
- ๋ทฐ ์ค์ฌ์ JSP ๊ตฌํ์๋ core ์ ๋๋ง ์ฌ์ฉ
JSTL ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
- JSTL ์ฌ์ฉํ๊ธฐ
- JSTL์ JSP์์ ์ฌ์ฉํ๊ธฐ ์ํด taglib์ง์์ด๋ฅผ ์ถ๊ฐ
- ํ๋ก๊ทธ๋จ ๊ตฌ์กฐ๋ฅผ ์ํด ์ฌ์ฉํ๋ core๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ ์ํด๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฑ
<%@ taglib prefix="c" url="http://java.sun.com/jsp/jstl/core" %>
core ๋ผ์ด๋ธ๋ฌ๋ฆฌ
-
๋ณ์ ์ฒ๋ฆฌ, ํ๋ฆ ์ ์ด, URL ๊ด๋ฆฌ, ์ถ๋ ฅ ๋ฑ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๊ธฐ๋ฅ ํ๊ทธ ์ฌ์ฉ์ ๋ณ์ ๊ด๋ จ remove, set ๋ณ์ ์ง์ ๊ณผ ์ญ์ ํ๋ฆ ์ ์ด if, choose when otherwise, forEach, forTokens ์กฐ๊ฑด ์ฒ๋ฆฌ, ๋ฐ๋ณต, ํ ํฐ ํ์ฑ URL ๊ด๋ฆฌ import, redirect, url, param URL ํธ๋ค๋ง ๊ธฐํ catch, out ์๋ฌ์ฒ๋ฆฌ, ์ถ๋ ฅ -
<c:set></c:set>
- ํน์ scope์ ๊ฐ์ ์ ์ฅํ๋ ๊ธฐ๋ฅ
- scope ๋ด์ฅ ๊ฐ์ฒด์
setAttribute()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋๊ฒ๊ณผ ๋์ผ - ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌธ์์ด ํํ๋ก ์ ์ฅํ์ง๋ง, EL์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฐฐ์ด๊ณผ ๊ฐ์ ๊ฐ์ฒด๋ ์ ์ฅ ๊ฐ๋ฅ
- target์์ฑ์ผ๋ก ํน์ ํ์ ์ ๊ฐ์ฒด์ setter ๋ฉ์๋๋ฅผ ํตํ ์์ฑ ์ ์ฅ ๊ฐ๋ฅ
<c:set var="product1" value="<b>์ ํ ์์ดํฐ</b>"/> <c:set var="product2" value="์ผ์ฑ ๊ฒ๋ญ์ ๋ ธํธ"/> <c:set var="intArray" value="${[1,2,3,4,5]}"/>
-
<c:out></c:out>
- ์ถ๋ ฅ์ ์ํ ํ
๊ทธ๋ก ๋๋ถ๋ถ์ EL๋ก ๋์ฒด๋จ
- ๋์ ๋ฐ๋ผ์๋ ์กฐ๊ฑด๋ฌธ ์ฌ์ฉ์ ์ค์ด๋ ์ฉ๋๋ก ํ์ฉ ํ ์ ์์
<!-- <c:set/> ์์ ์ ์ธํ product1, intArray ์ถ๋ ฅ --> <c:out value="${product1}" default="Not registered" escapeXml="true"/> <!-- ์ ํ ์์ดํฐ์ด ํ ๊ทธ๋ฅผ ํฌํจํ์ฌ ์ถ๋ ฅ ex) ์ ํ ์์ดํฐ --> <p>${product1}</p> <!-- intArray[2]์ ๊ฐ์ด ์ถ๋ ฅ๋จ ex) 3 --> <p>${intArray[2]}</p>
default
: ์ถ๋ ฅํ๊ณ ์ ํ๋ ๊ฐ์ฒด๊ฐ ์์ ๋ ์ถ๋ ฅํ ๊ฐ์ ์๋ฏธ- ex) product1์ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ โNot registeredโ๋ฅผ ๋์ ์ถ๋ ฅ
- excapeXml: true์ธ ๊ฒฝ์ฐ ํ
๊ทธ๋ฅผ ์ผ๋ฐ ๋ฌธ์์ด๋ก ์ฒ๋ฆฌ
- ๊ธฐ๋ณธ๊ฐ: false, ํ ๊ทธ๊ฐ ๋ฐ์๋์ด ์ถ๋ ฅ
<c:set/>
์ผ๋ก ์ ์ฅ๋ ๊ฐ์ EL๋ก ์ถ๋ ฅํ ์ ์์ผ๋ฉฐ ๊ฐ์ฅ ์ ํธ๋๋ ๋ฐฉ๋ฒ์- ๋ฐฐ์ด ์ญ์ EL์ ์ด์ฉํด ์ธ๋ฑ์ค๊ฐ ์ถ๋ ฅ ๊ฐ๋ฅ
- ์ถ๋ ฅ์ ์ํ ํ
๊ทธ๋ก ๋๋ถ๋ถ์ EL๋ก ๋์ฒด๋จ
<c:if></c:if>
- ์๋ฐ์ if ๋ฌธ๊ณผ ์ ์ฌํ์ง๋ง else๋ ์ง์ํ์ง ์์
- ์กฐ๊ฑด ํ ์คํธ๋ฅผ ์ํด ์์ฑ์ ์ฐธ์กฐํ ๋ฒ์(scope)๋ฅผ ์ง์ ํ ์ ๋ ์์ง๋ง ํ์ ์ฌํญ์ ์๋
- ์ฌ์ฉํ์
<c:if test="์กฐ๊ฑด" [var="๊ฒฐ๊ณผ ๋ณ์"] [scope="{page|request|seesion|application}"]> ์กฐ๊ฑด์ด true์ธ ๊ฒฝ์ฐ๋ง ์ถ๋ ฅ๋๋ ๋ถ๋ถ </c:if>
- ์ฌ์ฉ ์์
<c:if test="${msg == 'user1}" var="result"> test result: ${result} </c:if> <!-- !empty๋ ๋ค์ ๋ณ์๊ฐ null์ธ์ง ์ฒดํฌ ํ true false ๋ฐํ --> <c:if test="${!empty product2}"> <p> <b>${product2} ์ด๋ฏธ ์ถ๊ฐ๋จ</b> </p> </c:if>
-
<c:choose/>, <c:when/>, <c:otherwise/>
- if, else์ ๋น์ทํ ์ฝ๋
<!-- choose, when, otherwise --> <c:set var="checkout" value="true"/> <c:choose> <c:when test="${checkout}"> <p>์ฃผ๋ฌธ์ ํ: ${product2}</p> </c:when> <c:otherwise> <p>์ฃผ๋ฌธ์ ํ์ด ์๋!!</p> </c:otherwise> </c:choose>
<c:forEach></c:forEach>
- ํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณตํด์ ์ถ๋ ฅํ ๋ ์ฃผ๋ก ์ฌ์ฉ
- ์๋ฐ์ for ๋ฌธ๊ณผ ๊ฐ์ ๊ฐ๋ ์ด์ง๋ง ์ปค์คํ ํ ๊ทธ ํน์ฑ์ ์ ๋ฐํ ์ค์ ์ด ๊ฐ๋ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ๊ณต๋๋ ์์ฑ์ ์ ํ์ฉํด์ผ ํจ
- ์งํ์ํ๋ฅผ ํ์ธํ๊ธฐ ์ํด
index,count
๋ฑ์ ์ง์ํ๋varStatus
์ ๊ณต - ์ฌ์ฉ ํ์
<c:forEach [var="์ฐธ์กฐ ๊ฐ์ฒด"] [varStatus="์ํ ์ ๋ณด ๋ณ์"] begin="์์" end="์ข ๋ฃ" [step="๋ฐ๋ณต ๋จ๊ณ ์ฆ๊ฐ ๊ฐ, 1์ด ๊ธฐ๋ณธ"]> ๋ฐ๋ณต ์ถ๋ ฅ๋๋ ๋ถ๋ถ </c:forEach>
- var: ๋ฐฐ์ด, ๋ฆฌ์คํธ ๋ฑ ์งํฉํ ๊ฐ์ฒด
-
varStatus: ๋ฐ๋ณต ์งํ ์ํฉ์ ์ฐธ์กฐํ๊ธฐ ์ํ ๊ฐ์ฑ
- ์ฌ์ฉ ์์
<c:forEach var="m" items="${members}" begins="0" varStatus="status" end="5"> index: ${status.index} <br> <!-- 0๋ถํฐ --> count: ${status.count}<br> <!-- 1๋ถํฐ --> name: ${m.name} <br> email: ${m.email} <br> <hr> </c:forEach>
<c:forTokens></c:forTokens>
- ์๋ฐ์ StringTokenizer์ ์ ์ฌํ๊ฒ ๊ตฌ๋ถ์๋ก ๋ฌธ์์ด์ ํ์ฑํ๋ ํ ๊ทธ
- ์ถ๋ ฅํ ๋ฌธ์์ด์ด ๊ตฌ๋ถ์๋ก ๋ถ๋ฆฌ๋์ด ์์ ๋, ๋ชจ๋ ๊ฐ์ ๋ฐ๋ณตํด์ ์ถ๋ ฅํ๋ ๊ฒฝ์ฐ์ ์ ์ฉํ๊ฒ ์ฌ์ฉ
<!-- forTokens --> <c:forTokens var="city" items="Seoul/Tokyo/NewYork/Toronto" delims="/" varStatus="status"> <c:if test="${status.first}"> ๋์ ๋ชฉ๋ก: </c:if> ${city} <c:if test="${!status.last}"> , </c:if> </c:forTokens>
๋๊ธ๋จ๊ธฐ๊ธฐ