๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
FOR SW ENGINEER๐Ÿ‘ฉ‍๐Ÿ’ป/JSP

JSP - ์ปค์Šคํ…€ ํƒœ๊ทธ(Custom Tag)

by ์”จ๋‹ˆ 2021. 12. 1.
728x90

์ปค์Šคํ…€ ํƒœ๊ทธ

- ์Šคํฌ๋ฆฝํŠธ ์š”์†Œ๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๋งŽ์•„์งˆ์ˆ˜๋ก JSP์ฝ”๋“œ๋Š” ๋ณต์žกํ•ด์ง„๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์  ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ JSP๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ์•ก์…˜ํƒœ๊ทธ, JSTL์ด ์ œ๊ณตํ•˜๋Š” ํƒœ๊ทธ, ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ ๊ทธ๋ฆฌ๊ณ  EL์„ ํ†ตํ•ด ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ์ฝ”๋“œ๋“ค๋กœ๋„ ์•„์‰ฌ์šธ๋•Œ๊ฐ€ ์žˆ์–ด, ๊ทธ๋Ÿด ๋•Œ ์‚ฌ์šฉ์ž ์ง€์ •ํƒœ๊ทธ๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•œ๋‹ค.

- ์›ํ•˜๋Š” ๋ชฉ์ ์— ๋งž๊ฒŒ ์ž‘์„ฑํ•œ ํƒœ๊ทธ๋ฅผ '์ปค์Šคํ…€ ํƒœ๊ทธ/์‚ฌ์šฉ์ž ์ง€์ • ํƒœ๊ทธ'๋ผ๊ณ ๋„ ๋ถ€๋ฆ„.

- JSTL ๋˜ํ•œ ์ปค์Šคํ…€ ํƒœ๊ทธ์˜ ์ผ์ข…์œผ๋กœ, JSTL์€ ๋‹ค์ˆ˜์˜ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ•„์š”๋กœ ํ•˜๋Š” ์ปค์Šคํ…€ ํƒœ๊ทธ๋ฅผ ๋ชจ์•„๋†“์€ ์ปค์Šคํ…€ ํƒœ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค

 

 

โ–ถ ์ปค์Šคํ…€ ํƒœ๊ทธ ์žฅ์ 

- ์žฌ์‚ฌ์šฉ :  ํ•œ๋ฒˆ ์ž‘์„ฑํ•œ ์ปค์Šคํ…€ ํƒœ๊ทธ๋Š” ์–ด๋–ค JSP์ปจํ…Œ์ด๋„ˆ์—์„œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

- ์‰ฝ๊ณ  ๋‹จ์ˆœํ•œ JSP์ฝ”๋“œ ์ž‘์„ฑ : ์ž๋ฐ”์ฝ”๋“œ์— ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๊ฐœ๋ฐœ์ž๋“ค๋„ ์ปค์Šคํ…€ ํƒœ๊ทธ๋ฅด ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ JSPํŽ˜์ด์ง€๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ.

- ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ : ์ปค์Šคํ…€ ํƒœ๊ทธ๋Š” ๋šœ๋ ทํ•œ ์˜๋„๋ฅผ ๊ฐ–๊ณ , ์ปค์Šคํ…€ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— JSP์ฝ”๋“œ์˜  ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Œ.

 

 

โ–ถ ํƒœ๊ทธ ํŒŒ์ผ์„ ์ด์šฉํ•œ ์ปค์Šคํ…€ ํƒœ๊ทธ ๊ตฌํ˜„

- ์ปค์Šคํ…€ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „ ํƒœ๊ทธ ์‚ฌ์šฉํ•œ๋‹ค ์„ ์–ธ

 

-๋‹จ์ˆœ ํƒœ๊ทธํŒŒ์ผ ๊ตฌํ˜„

์ปค์Šคํ…€ ํƒœ๊ทธ ์˜ˆ์‹œ : ํƒœ๊ทธํŒŒ์ผ์„ ์ฐธ์กฐํ•˜๊ณ , ๋ถˆ๋Ÿฌ์™€์„œ ์‹คํ–‰

 

 

โ–ถ ๋ชธ์ฒด ๋‚ด์šฉ ์ฒ˜๋ฆฌ

- <jsp: body>ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•ด ๋ชธ์ฒด ๋‚ด์šฉ ์ „๋‹ฌ

- <jsp:dobody>ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•ด ๋ชธ์ฒด๋กœ ์ „๋‹ฌ ๋ฐ›์€ ๋‚ด์šฉ์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

- ํƒœ๊ทธ ํŒŒ์ผ๋กœ ๊ตฌํ˜„ํ•œ ํƒœ๊ทธ์˜ ๋ชธ์ฒด์—๋Š” ์ผ๋ฐ˜ํ…์ŠคํŠธ, EL, <jsp:include>๋งŒ ์œ„์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

- <jsp:doBody>ํƒœ๊ทธ ๊ธฐ๋ณธ ์˜ˆ์‹œ

&amp;lt;jsp:doBody&amp;gt;์˜ˆ์‹œ

 

- ๋ชธ์ฒด ๋‚ด์šฉ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ

&amp;lt;jsp:doBody&amp;gt;๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• 2๊ฐ€์ง€

 

 

โ–ถ ํƒœ๊ทธ ํŒŒ์ผ ์†์„ฑ ์„ค์ •

- ํƒœ๊ทธ ํŒŒ์ผ๋„ ์†์„ฑ์„ ์ด์šฉํ•ด ํƒœ๊ทธ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ฐ’์„ ๋ฐ›๋Š”๋‹ค.

- ํƒœ๊ทธ ํŒŒ์ผ์€ attribute๋””๋ ‰ํ‹ฐ๋ธŒ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์†์„ฑ ์ •๋ณด๋ฅผ ์„ค์ •ํ•œ๋‹ค.

- attribute ๋””๋ ‰ํ‹ฐ๋ธŒ๋Š” ์ปค์Šคํ…€ ํƒœ๊ทธ๊ฐ€ ํ—ˆ์šฉํ•˜๋Š” ์†์„ฑ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์„ค์ •ํ•œ๋‹ค.

 

<JSP:attribute>ํ†ตํ•œ ์†์„ฑ ๊ฐ’ ์ „๋‹ฌ

- name : ์†์„ฑ์˜ ์ด๋ฆ„์ง€์ •(ํ•„์ˆ˜)

- type : ์†์„ฑ ํƒ€์ž…์ง€์ • (์ •ํ™•ํ•œ ๋ณ€์ˆ˜ ํƒ€์ž… ๊ธฐ์žฌํ•ด์•ผํ•จ)

 

-์†์„ฑ๊ฐ’ ์ „๋‹ฌํ•˜๋Š” ๊ธฐ๋ณธ๋ฐฉ์‹

ํƒœ๊ทธํŒŒ์ผ ์†์„ฑ ์‚ฌ์šฉ ์˜ˆ์‹œ

 

- ํƒœ๊ทธํŒŒ์ผ ์†์„ฑ๊ฐ’์„ ์„ค์ •ํ•ด css์กฐ์ž‘๋„ ๊ฐ€๋Šฅ

ํƒœ๊ทธํŒŒ์ผ ์†์„ฑ์‚ฌ์šฉ ์˜ˆ์‹œ2 : attribute์„ค์ •ํ†ตํ•ด font-style๋ณ€๊ฒฝ

 

- ์†์„ฑ ๋ณ€์ˆ˜ํƒ€์ž… ์ •ํ™•ํ•˜๊ฒŒ ์„ค์ •ํ• ๊ฒƒ

ํƒœ๊ทธ Attribute์‚ฌ์šฉํ•œ ๊ตฌ๊ตฌ๋‹จ ์˜ˆ์‹œ์ฝ”๋“œ

 

- ํƒœ๊ทธ ์†์„ฑ - ๋ฐฐ์—ด(array)

 

- ํƒœ๊ทธ ์†์„ฑ - ๋ฆฌ์ŠคํŠธ(List), ์ตœ์ƒ์œ„ ํƒ€์ž… Object

 

- ํƒœ๊ทธ ์†์„ฑ - ๋งต(Map), ์ตœ์ƒ์œ„ ํƒ€์ž… Object

 

- dynamic-attribute

- EL์—์„œ ๋ณ€์ˆ˜ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉ.

- ๊ธฐ๋ณธ์ ์œผ๋กœ attribute๋””๋ ‰ํ‹ฐ๋ธŒ๋กœ ์ •์˜ํ•˜์ง€ ์•Š์€ ์†์„ฑ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฒฝ์šฐ dynamic-attribute์‚ฌ์šฉ

  โ˜ž๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ž„์˜์˜ ์†์„ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ, ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ์†์„ฑ ๊ธฐ๋Šฅ ์‚ฌ์šฉํ•ด์•ผ ํ•จ.

- ๋ชจ๋“  ๋™์  ์†์„ฑ์€ java.util.Mapํƒ€์ž…์˜ EL๋ณ€์ˆ˜์— ์ €์žฅ๋˜๋ฏ€๋กœ, ๋™์ ์œผ๋กœ ์ง€์ •ํ•œ ์†์„ฑ๋“ค์€ Mapํƒ€์ž…์˜ EL๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ.

dynamic-attributes์‚ฌ์šฉํ•ด attr2๋ถˆ๋Ÿฌ์˜ด.

- attribute์ด๋ฆ„์ด key, attribute๊ฐ’์ด value๊ฐ€ ๋จ.

- attribute ์ฝ”๋“œ ์ž‘์„ฑ ์ˆœ์„œ์™€ ๊ด€๊ณ„์—†์ด tag์—์„œ ์ •์˜ํ•œ ์œ„์น˜์— ๋“ค์–ด๊ฐ.

dynamic-attributes์‚ฌ์šฉํ•ด attribute Map์ฒ˜๋Ÿผ ์‚ฌ์šฉ

- attribute ์ฝ”๋“œ ์ž‘์„ฑ ์ˆœ์„œ์™€ ๊ด€๊ณ„์—†์ด tag์—์„œ ์ •์˜ํ•œ ์œ„์น˜์— ๋“ค์–ด๊ฐ.(Map๊ธฐ๋Šฅ๊ณผ ๊ฐ™์Œ!!)

- Map์€ ์ˆœ์„œ๊ฐ€ ์—†์Œ!

 

++ pageContext์™€ tagํƒœ๊ทธํŽ˜์ด์ง€ ๊ด€๊ณ„

- pageํŠน์ง• : ํŽ˜์ด์ง€๋Š” ํ•œ ํŽ˜์ด์ง€ ๋‚ด์—์„œ๋งŒ ์ •๋ณด๋ฅผ ์‚ฌ์šฉ, ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๊ณ , ๋‹ค๋ฅธ ํŽ˜์ด์ง€์—์„œ๋Š” ์‚ฌ์šฉ๋ถˆ๊ฐ€๋Šฅํ•จ.

pageContext๋Š” ์ž‘์„ฑ๋œ page ์™ธ ๋‹ค๋ฅธํŽ˜์ด์ง€(tagํŒŒ์ผ)์— ์‚ฌ์šฉ๋  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ถœ๋ ฅ๋˜์ง€ ์•Š์Œ.

728x90