HttpServlet์ GET/POST ๋ฑ์ ๋ง๊ฒ doGet()
, doPost()
๋ฑ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค. ๊ฐ๋ฐ์๋ค์ ๋ณธ์ธ์๊ฒ ํ์ํ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ๋ ๊ฒ๋ง์ผ๋ก GET/POST ๋ฐฉ์ ์ฒ๋ฆฌ๋ฅผ ๋๋์ด์ ์ฒ๋ฆฌํ ์ ์๋ค.
HttpServlet์ ์์๋ฐ์ ํด๋์ค ๊ฐ์ฒด(์๋ธ๋ฆฟ)๋ ํฐ์บฃ๊ณผ ๊ฐ์ WAS์ ๋ด๋ถ์์ ์๋์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฒด ๊ด๋ฆฌ์ ์ ๊ฒฝ ์ธ ํ์๊ฐ ์๋ค.
HttpServlet
์ ๋ฉํฐ ์ค๋ ๋์ ์ํด์ ๋์์ ์คํ๋ ์ ์๋๋ก ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๋ ๋์์ ๋ง์ ์ฌ์ฉ์๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผ ํ๋์ง์ ๋ํ ๊ณ ๋ฏผ์ ์ค์ผ ์ ์๋ค.
์ถ์ ํด๋์ค GenericServlet
๋ HTTP ํ๋กํ ์ฝ์ ํนํ๋์ง ์๋ ์์ฒญ(Request)๊ณผ ์๋ต(Response)์ ๋ํ ๊ธฐ๋ฅ์ ์ ์ํ๋ค.
- ๐์น ๋ฐ์ดํฐ ํต์ ๊ท์ฝ์ ์ ์ธํ๊ณ ๋ ์ฌ๋ฌ ํ๋กํ ์ฝ์ ๋ํ ๋ฐํ์ด ๋๋ ๊ธฐ๋ณธ ์๋ธ๋ฆฟ์ด ์๊ฒ ์ฃ !
์๋ธ๋ฆฟ์ ์์ฒญ(Request)์ ์ฒ๋ฆฌํด์ ์๋ต(Response)ํ ๋ชฉ์ ์ผ๋ก ์ค๊ณ ๋์๋ค. ๋ค๋ง ์ด ์๋ธ๋ฆฟ ๊ฐ์ฒด์ ์์ฑ๊ณผ ์๋ฉธ์ ๊ฐ๋ฐ์๊ฐ ์๋ ํฐ์บฃ ๋ฑ์ ์๋ธ๋ฆฟ ์ปจํ
์ด๋๊ฐ ๊ด๋ฆฌํ๋ค.
- ๋ธ๋ผ์ฐ์ โ ์๋ธ๋ฆฟ ํน์ ๊ฒฝ๋ก(URI) ํธ์ถ
- ํฐ์บฃ : ํด๋น ๊ฒฝ๋ก์ ์ ํฉํ ์๋ธ๋ฆฟ ํด๋์ค ๋ก๋ฉ, ๊ฐ์ฒด ์์ฑ
(init()
๋ฉ์๋๋ก ์๋ธ๋ฆฟ ๊ฐ์ฒด ๋์ ์ ์ํํ ๋ด์ฉ ์ ํ ์ ์๋ค.)- ์๋ธ๋ฆฟ ๊ฐ์ฒด : ๋ธ๋ผ์ฐ์ ์์ฒญ์ ๋ํ ์ ๋ณด ๋ถ์ํ์ฌ GET/POST ๋ฑ์ ์ ๋ณด์ ํจ๊ป ๊ฐ์ด ์ ๋ฌ๋๋ ํ๋ผ๋ฏธํฐ(์ฟผ๋ฆฌ ์คํธ๋ง ๋ด์ฉ)๋ค์
HttpServletRequest
ํ์ ์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ฐ์.
(์๋ต์ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ๋ค์HttpServletResponse
๊ฐ ๋ด๋น)- ์๋ธ๋ฆฟ ๋ด๋ถ : GET/POST์ ๋ง๊ฒ
doGet()
/doPost()
๋ฑ์ ๋ฉ์๋ ์คํ. ์ดํ ๋์ผํ (์ฃผ์)ํธ์ถ์ด ์์ ๋๋ ์๋ธ๋ฆฟ์ ๋์ผํ ๊ฐ์ฒด ํ๋๋ง ์ด์ฉํ์ฌ ์ด๋ฅผ ์ฒ๋ฆฌ.- ํฐ์บฃ ์ข ๋ฃ : ์๋ธ๋ฆฟ
destroy()
โ ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ ๊ฒฝ๋ก์ ๋ง๊ฒ ํ๋๋ง ๋ง๋ค์ด์ง
โก ๋งค๋ฒ ํธ์ถ ์์๋ ์๋์ผ๋ก doGet()
/ doPost()
๋ฅผ ์ด์ฉํ์ฌ ์ฒ๋ฆฌ๋จ
doGet
์์ ํธ์ถ๋๋ ์๋ธ๋ฆฟ ๊ฐ์ฒด์ ์ฃผ์๊ฐ ๋์ผํ๋ค.
๐ ํ๋์ ์ฃผ์์ ์๋ธ๋ฆฟ ๊ฐ์ฒด๊ฐ ์์ฑ๋์ผ๋ฉด ๊ทธ ์ดํ๋ก ๋์ํ ์ฃผ์๋ฅผ ์์ฒญ ๋ฐ์์ ๋ ์๋ก์ด ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ๊ธฐ์กด์ ๋ง๋ค์ด ๋์๋ ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋๊ตฌ๋!
์๋ธ๋ฆฟ ๊ฐ์ฒด์์ ์ต์ข
์ ์ผ๋ก ์์ฒญ(Request)์ ์ฒ๋ฆฌํ๋ doGet()
/doPost()
๋ฑ์ HttpServletRequest์ HttpServletResponse๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋๋ค.
HttpServletRequestโญ๋ HTTP ๋ฉ์์ง ํํ๋ก ๋ค์ด์ค๋ ์์ฒญ(Request)์ ๋ํ ์ ๋ณด๋ฅผ ํ์ ํ๊ธฐ ์ํด์ ์ ๊ณต๋๋ค.
HTTPServletRequest ๋ฉ์๋ ์ ๋ฆฌ๐ฅ
HttpServletRequest ์ฃผ์ ๋ฉ์๋2
JavaEE7 : HttpServletRequest ๊ณต์๋ฌธ์
?name=AAA&age=20
request.getParameter(name)
== "AAA"
)
- getParameter()์ ๋ฐํํ์ ์ ํญ์ String์ด๋ค.
- ํ๋ผ๋ฏธํฐ๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด null๋ฐํ, null ์ฒดํฌ์ ์ฃผ์ํด์ผ ํ๋ค.
- ๋ฐํ ํ์ String[ ]
ํค(key)
์๊ฐ(value)
ํํ๋ก ๋ฐ์ดํฐ ์ ์ฅ- ํค(key)๋ ๋ฌธ์์ด๋ก ์ง์ , ๊ฐ(value)๋ ๋ชจ๋ ๊ฐ์ฒด ์ฌ์ฉ ๊ฐ๋ฅ
request.setAttribute("3๋" , 500)
์น MVC ๊ตฌ์กฐ์์๋ HttpServletRequest์ getRequestDispatcher(์ฃผ์)
๋ฅผ ์ด์ฉํด์ RequestDispatcher ํ์
์ ๊ฐ์ฒด๋ฅผ ๊ตฌํ ์ ์๋ค.
RequestDispatcher
๋ ํ์ฌ์ ์์ฒญ์ ๋ค๋ฅธ ์๋ฒ์ ์์(์๋ธ๋ฆฟ ํน์ JSP)์๊ฒ ์ ๋ฌํ๋ ์ฉ๋๋ก ์ฌ์ฉํ๋ค. 2๊ฐ์ ๋ฉ์๋๊ฐ ์กด์ฌํ๋ค.
forward()
โก : ํ์ฌ๊น์ง์ ๋ชจ๋ ์๋ต(Response) ๋ด์ฉ์ ๋ฌด์ํ๊ณ JSP๊ฐ ์์ฑํ๋ ๋ด์ฉ๋ง์ ๋ธ๋ผ์ฐ์ ๋ก ์ ๋ค.include()
: ์ง๊ธ๊น์ง ๋ง๋ค์ด์ง ์๋ต(Response) ๋ด์ฉ + JSP๊ฐ ๋ง๋ ๋ด์ฉ ๋ธ๋ผ์ฐ์ ๋ก ์ ๋ฌ.
[์๋ธ๋ฆฟ/JSP] REQUESTDISPATCHER๋. REQUESTDISPATCHER๋ก FORWARD() ํ๊ธฐ
[์๋ธ๋ฆฟ/JSP] REQUESTDISPATCHER๋ก INCLUDE() ํ๊ธฐ
์น MVC ๊ตฌ์กฐ์์ HttpServletResponse๋ JSP์์ ์ฃผ๋ก ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ์๋ธ๋ฆฟ ๋ด์์ ์ง์ ์ฌ์ฉ๋๋ ์ผ์ ๋ง์ง ์๊ณ ์ฃผ๋ก sendRedirect()
๋ฅผ ์ด์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
Servlet ์๋ต ์ ๋ณด ์ฒ๋ฆฌ (HttpServletResponse, ํ๊ธ ์๋ต)
์๋ฐ ์น ๊ฐ๋ฐ ์ํฌ๋ถ 66p
JavaEE 7 / HttpServletResponse ๊ณต์๋ฌธ์
sendRedirect()
๋ ๋ธ๋ผ์ฐ์ ์๊ฒ ๋ค๋ฅธ ์ฃผ์๋ก ๊ฐ๋ผ๋ ๋ช
๋ น์ ๋ด๋ฆฐ๋ค.
HttpServletResponse
๋ฅผ ์ฌ์ฉํ๋ฉดsendRedirect()
๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ์ง์ ํ ๊ฒฝ๋ก๋ก ์ ์ด๋ฅผ ์ด๋์ํฌ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ sendRedirect()๋ HTTP ๋ฆฌ๋ค์ด๋ ์ ์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ํ๋์ ์์ฒญ ๋ฒ์ ์์์ ์ฒ๋ฆฌ๋ฅผ ํ๋๊ฒ์ด ์๋๋ผ ๋ธ๋ผ์ฐ์ ์๊ฒ Response ํ ๋ธ๋ผ์ฐ์ ์ธก์์ ์ง์ ๋ฐ์ ์์ฒญ ๊ฒฝ๋ก๋ก ๋ค์ ์ฌ์์ฒญ์ ํ๋ ๋ฐฉ์์ด๊ธฐ์ ๋ ๋ฒ์ HTTP ํธ๋์ญ์ ์ด ๋ฐ์ํ๋ฉฐ, ์๋ฒ์ธก์์๋ ์ต์ด์ ๋ฐ์ ์์ฒญ์ค์ ์ฒ๋ฆฌํ ๋ด์ฉ์ ๋ฆฌ๋ค์ด๋ ํธ ๋ ์์ฒญ์์์ ๊ณต์ ํ ์ ์๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
- ๋ฌผ๋ก
sendRedirect()
์์๋ ์ฟ ํค๋ ์ธ์ ๋ฑ์ ์ด์ฉํด ํน์ ์ํ๋ฅผ ์ ์งํ์ฌ ๊ณต์ ํ ์๋ ์๊ฒ ์ผ๋, ์ํฉ์ ๋ฐ๋ผ ์ ํ์ ์ผ ์ ์์ผ๋ฉฐ, ์ฝ๋ ๋ ๋ฒจ ์์์ ์๊ณ ๋ฆฌ์ฆ ๋ฑ์ ๊ณง๋ฐ๋ก ์ด์ด๊ฐ๋๋ฐ์๋ ํ๊ณ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ข์ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ํ ์๋ ์์๊ฒ์ ๋๋ค.
๊ทธ๋์ HttpServletResponse๋ฅผ ํตํด ๋ฆฌ๋ค์ด๋ ํธ ํ๋ ๋ฐฉ์์ ํ์ฌ ์ดํ๋ฆฌ์ผ์ด์ ์ด์ธ์ ๋ค๋ฅธ ์์์ ๊ฒฝ๋ก๋ฅผ ์์ฒญํ ์ ์๋ ๋ฐ๋ฉด RequestDispatcher๋ ํ์ฌ ์ฒ๋ฆฌ์ค์ธ ์๋ธ๋ฆฟ์ด ์ํด ์๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ๋ฒ์ ๋ด์์๋ง ์์ฒญ์ ์ ์ดํ ์ ์์ต๋๋ค.
์ถ์ฒ : [์๋ธ๋ฆฟ/JSP] REQUESTDISPATCHER๋. REQUESTDISPATCHER๋ก FORWARD() ํ๊ธฐ
์์ด์ด ํ๋ ์ ๊ธฐ๋ฅ ์ ๋ฆฌ
GET/POST ์์ฒญ์ ๋ชจ๋ ์ฒ๋ฆฌํด์ผํ๋ ์ปจํธ๋กค๋ฌ๊ฐ ์กด์ฌํ๋ค.
DTO๋ ๋ฌด์์ธ๊ฐ์?
๋ฐ์ดํฐ ์ ์ก ๊ฐ์ฒด(DTO)๋ ํ๋ก์ธ์ค ์ฌ์ด์์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๊ฐ์ฒด๋ฅผ ๋งํฉ๋๋ค. DTO ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ค์ํ ์ ๋ณด๋ฅผ ๋
ธ์ถ์ํค์ง ์๊ณ ๋ ์์คํ
(API์ ์๋ฒ ๋ฑ) ๊ฐ ํต์ ์ ์ํํ๊ฒ ์ด์งํ ์ ์์ต๋๋ค.
3ํฐ์ด ๊ณ์ธต์ ๋ถ๋ฆฌํ๋ ๊ฒฝ์ฐ์๋ ๋ฐ๋์ ๊ณ์ธต์ด๋ ๊ฐ์ฒด๋ค ๊ฐ์ ๋ฐ์ดํฐ ๊ตํ์ด ์ด๋ฃจ์ด์ง๋ค. ์ด ๋ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฌถ์ด์ ํ๋์ ๊ฐ์ฒด๋ก ์ ๋ฌํ๋ ๊ฒ์ DTO(Data Transfer Object, ์ดํ DTO)โญ๋ผ๊ณ ํ๋ค.
DTO๋ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฌถ์ด์ ํ์ํ ๊ณณ์ ์ ๋ฌํ๊ฑฐ๋ ํธ์ถ์ ๊ฒฐ๊ณผ๋ก ๋ฐ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ค.
DTO๋ Java Beansโญ ํํ๋ก ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
- ์์ฑ์๊ฐ ์๊ฑฐ๋ ๋ฐ๋์ ํ๋ผ๋ฏธํฐ๊ฐ ์๋ ์์ฑ์ ํจ์๋ฅผ ๊ฐ์ง๋ ํํ (๊ธฐ๋ณธ ์์ฑ์)
- ์์ฑ(๋ฉค๋ฒ ๋ณ์)์ private์ผ๋ก ์์ฑ
- getter/setter๋ฅผ ์ ๊ณตํ ๊ฒ
- ์ด ์ธ์๋ Serializable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํ ๋ฑ...
public class CoffeeBEAN implements Serializable {
private String name;
private List<String> ingredients;
public CoffeeBEAN() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getIngredients() {
return ingredients;
}
public void setIngredients(List<String> ingredients) {
this.ingredients = ingredients;
}
}
DTO๋ ๋จ์ํ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฌถ์ด์ ํ๋์ ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํ๋ ์ฉ๋๋ก ์ฌ์ฉํ๋ฉฐ,
์ฃผ๋ก ์๋น์ค ๊ฐ์ฒด ๋ฉ์๋๋ค์ ํ๋ผ๋ฏธํฐ๋ ๋ฆฌํดํ์
์ผ๋ก ์ฌ์ฉ๋๋ค.
Service๋ ๋น์ง๋์ค ๋ก์ง์ด ๋ค์ด๊ฐ๋ ๋ถ๋ถ์ด๋ค. Controller๊ฐ Request๋ฅผ ๋ฐ์ผ๋ฉด ์ ์ ํ Service์ ์ ๋ฌํ๊ณ , ์ ๋ฌ ๋ฐ์ Service๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ค. DAO๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ๊ทผํ๊ณ , DTO๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ์ ๋ค์, ์ ์ ํ ์ฒ๋ฆฌ๋ฅผ ํด ๋ฐํํ๋ค.
์ถ์ฒ : DAO, DTO, Service
enum
ํ์
์ผ๋ก ๊ตฌ์ฑํ๋ค. public enum TodoService {
INSTANCE;
}
enum ํ์
์ผ๋ก ํด๋์ค๋ฅผ ์์ฑํ๋ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ์ ํด์ง ์ ๋งํผ๋ง ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค๋ ์ ์ด๋ค.
enum์ ์์๊ฐ INSTANCE
ํ ๊ฐ๋ง ์ง์ ๋์ด ์์ผ๋ฏ๋ก ํ๋์ ๊ฐ์ฒด๋ง์ ์์ฑํด์ ์ฌ์ฉํ๊ฒ ๋๋ค.
์ฑ๊ธํค ํจํด(singleton pattern)โญ์ ๊ฐ์ฒด๋ฅผ ํ๋๋ง ์์ฑํด์ ์ฌ์ฉํ๋ค.
์์ ์ ๊ฒฝ์ฐ ์ฌ๋ฌ ์ปจํธ๋กค๋ฌ๋ค์ด TodoService ๊ฐ์ฒด๋ฅผ ํตํด์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑํ๊ธฐ ๋๋ฌธ์ ์ฑ๊ธํค ํจํด์ผ๋ก ๊ตฌ์ฑํ๋ฐ.
TodoService์ ๋ฉ์๋๋ค :
TodoService ํด๋์ค๋ ์ฌ๋ฌ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ์ํ๊ณ ๊ตฌํํ๋ค. ์๋น์ค ๊ฐ์ฒด๋ ์์น์ ์ผ๋ก System.out.println()
๊ณผ ๊ฐ์ด ์ถ๋ ฅํ๋ฉด ์๋์ง๋ง, ๋๋ฒ๊น
์ฉ๋๋ก๋ ์ฌ์ฉ ๊ฐ๋ฅ
๋ฑ๋ก/๋ชฉ๋ก
์ ๊ตฌํํ ์ ์๋ค.
public List<TodoDTO> getList() {
List<TodoDTO> todoDTOs = IntStream.range(0, 10).mapToObj(i -> {
TodoDTO dto = new TodoDTO();
dto.setTno((long)i);
dto.setTitle("Todo..."+i);
dto.setDueDate(LocalDate.now());
return dto;
}).collect(Collectors.toList());
return todoDTOs;
}
์น MVC ๊ตฌ์กฐ์์๋ ํ๋ฉด์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ ์ปจํธ๋กค๋ฌ๋ (๋ชจ๋ธ์) ์๋น์ค ๊ฐ์ฒด์ ํ์ ๋น๋ ค์ ์ฒ๋ฆฌํ๋ค.
~Controller
->~Service
์ ๊ฒฐ๊ณผ ->JSP
์ด ๊ณผ์ ์์ HttpServletRequest
์ setAttribute()
๊ฐ ์ค์ํ๊ฒ ์ฌ์ฉ๋๋ค. 'ํค(key)'-'๊ฐ(value)' ํ์์ผ๋ก HttpServletRequest
์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๋ค. ์ด ์์ฒญ๊ฐ์ฒด๊ฐ forward์ ๋ด๊ฒจ jsp๋ก ์ด๋ํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
System.out.println("/todo/List");
List<TodoDTO> dtoList = TodoService.INSTANCE.getList();
req.setAttribute("List", dtoList); //setAttribute๋ก req ์์ฑ์ ๋ด์์
//ํฌ์๋ฉ
req.getRequestDispatcher("/WEB-INF/todo/list.jsp").forward(req, resp);
<h1>List Page</h1>
${List} //List ๊ฐ์ฒด์ toString์ด ์ถ๋ ฅ๋ ๊ฒ์ด๋ค.
</body>
${}
๋ EL(Expression Language)โญ์ ํํ์์ด๋ค.EL์ ์ด์ฉํ๋ ๊ฒฝ์ฐ ์๋์ผ๋ก getter๋ฅผ ํธ์ถํ๋ค.
${list[0].title}
== getTno().getTitle()
(Todo..O
)
EL์ ํํ์(expression)์ด๊ธฐ ๋๋ฌธ์ ${}
๋ด๋ถ ํํ์์ด ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด ๋ผ ์ ์๋ค๋ฉด ์ธ์ ๋ ์ง ์ฌ์ฉ ๊ฐ๋ฅ
${1 + 2 + 3}
== 6${"AAA" += "BBB"}
== "AAABBB"${"AAA".equals("AAA")}
== true
EL ๋ด๋ถ์์ ์๋ฐ ์ฝ๋๋ฅผ ๊ทธ๋๋ก ์ด์ฉํ๋ ๋ฐฉ์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ()
${list[0]โขgetTitle()}
๋จ, ์ ์ด๋ฌธ๊ณผ ๋ฐ๋ณต๋ฌธ๊ณผ ๊ฐ์ด '์(expression)'์ด ์๋ '๋ฌธ(statement)'๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด์๋ JSTL ๋ผ์ด๋ธ๋ฌ๋ฆฌโญ๊ฐ ํ์ํ๋ค.
JSTL(JavaServerPage Standard Tag Library)๋ JSP์์ ๋์ํ๋ ์๋ก์ด ํ๊ทธ๋ค์ ๋ฌถ์์ด๋ค.
์๋ฐ ๋ฌธ๋ฒ๋ณด๋ค ์กฐ๊ธ ๋ ๊ฐ๊ฒฐํ๊ฒ ์ ์ด๋ฌธ์ด๋ ๋ฐ๋ณต๋ฌธ, ์ ์ธ๋ฌธ ๋ฑ์ ์ฒ๋ฆฌํ ์ ์๊ณ , ํ์ฅ ๊ฐ๋ฅํ๋ค.
JSTL ์์กด์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ build.gradle
ํ์ผ์ ์ถ๊ฐํด์ผ ํ๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ ํ ํฐ์บฃ ์ค์ง ๋ฐ ๊ทธ๋์ด๋ค ์๋ก๊ณ ์นจ์ ํด์ฃผ์ด์ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์ด๋ฐ์.
dependencies {
compileOnly('javax.servlet:javax.servlet-api:4.0.1')
testImplementation("org.junit.jupiter:junit-jupiter-api:${junitVersion}")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")
implementation group: 'jstl', name: 'jstl', version: '1.2'
}
CORE๋ฅผ ์ ์ธํ ๋ <% taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
๋ฅผ ๋ฌธ์ ๊ฐ์ฅ ์ ๋จ์ ์
๋ ฅํด์ผ ํ๋ค.
JSP์์ <%@ %>
๋ก ์์ฑ๋๋ ์ฝ๋๋ฅผ ์ง์์(directives)โญ๋ผ๊ณ ํ๋ค.
์ถ๊ฐํ ์ค์ ์ ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์์๋ก JSTL์ ์ฌ์ฉํ ์ ์๊ฒ๋ ํ๋ค.
JSTL์์ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๋ค.
๋ฐฐ์ด์ด๋ผ ๋ฆฌ์คํธ ๋ฑ์ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
๋ค์๊ณผ ๊ฐ์ ์์ฑ์ด ์กด์ฌํ๋ค.
- var : EL์์ ์ฌ์ฉ๋ ๋ณ์ ์ด๋ฆ
- items : List, Set, Map, Enumeration, iterator ๋ฑ์ ์ปฌ๋ ์
- begin/end : ๋ฐ๋ณต์ ์์/๋ ใฑ๋ฐง
list.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
...
<ul>
<c:forEach var="dto" items="${List}">
<li>${dto}</Li>
</c:forEach>
</uL>
<c:forEach var="num" begin="1" end="10">
<li>${num}</li> //์ถ๋ ฅ๊ฐ์ EL ์ฌ์ฉ
</c:forEach>
<c:if>
๋ test๋ผ๋ ์์ฑ์ ์ฌ์ฉํ๋๋ฐ, test์ ์์ฑ๊ฐ์ผ๋ก boolean์ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ์ ์๋ ์์ด๋ ๋ณ์๊ฐ ๋ค์ด๊ฐ.
<c:choose>
๋ ์๋ฐ์ switch ๊ตฌ๋ฌธ๊ณผ ๋น์ท.
๋ด๋ถ์ <when test="">
, c:otherwise
๋ฅผ ์ด์ฉํด์ if~else if ~else
์ฒ๋ฆฌ๋ฅผ ํ๋ค.
//list ํ๋ผ๋ฏธํฐ๊ฐ ํ/์ง์ธ์ง ์ฌ๋ถ ์ถ๋ ฅ
<c:if test="${list.size()%2 == 0}">
์ง์
</c:if>
<c:if test="${list.size()%2 != 0}">
ํ์
</c:if>
<c:choose>
<c:when test="${List.size()%2 == 0}">
์ง์
</c:when>
<c:otherwise>
ํ์
</c:otherwise>
</c:choose>
var
์์ฑ์ผ๋ก ๋ณ์๋ช
์ง์ , value
์์ฑ์ผ๋ก ๊ฐ ์ง์ <ul>
<c:forEach var="num" begin="1" end="10">
<c:if test="${num == bigO}">
num is bigO
</c:if>
</c:forEach>
</ul>