[EL/JSTL][๊ฐœ๋…] ๐Ÿ”ฅ EL(Expression Language) ์™„์ „ ์ •๋ณต โ€“ JSP ์ฝ”๋“œ๋ฅผ ๊ทนํ•œ์˜ ๊ฐ„๊ฒฐํ•จ์œผ๋กœ!

๊น€์ƒ์šฑยท2024๋…„ 10์›” 14์ผ
0
post-thumbnail

๐Ÿง‘โ€๐Ÿ’ป EL(Expression Language) - JSP์—์„œ ๋” ๊น”๋”ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜์ž!

๐Ÿš€ EL(Expression Language)๋ž€?

EL์€ JSP(Java Server Pages)์—์„œ <%= %>์™€ ๊ฐ™์€ ์Šคํฌ๋ฆฝํŠธ๋ฆฟ ํ‘œํ˜„์‹์„ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋œ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.
JSP ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ๋กœ์ง๊ณผ ๋ทฐ์˜ ๋ถ„๋ฆฌ๋ฅผ ๋•๋Š” ์ค‘์š”ํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

๐Ÿ” ์˜ˆ์ œ:

<%= user.getName() %>

์œ„ ์ฝ”๋“œ๋ฅผ EL๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

${user.name}

๐Ÿ“Œ EL์˜ ์ฃผ์š” ํŠน์ง•

  1. ๋„ํŠธ ์—ฐ์‚ฐ์ž(.) ์‚ฌ์šฉ ๊ทœ์น™

    • ์™ผ์ชฝ: java.util.Map ๊ฐ์ฒด ๋˜๋Š” Java Bean ๊ฐ์ฒด
    • ์˜ค๋ฅธ์ชฝ: Map์˜ ํ‚ค(key) ๋˜๋Š” Bean์˜ ํ”„๋กœํผํ‹ฐ(property)

    ๐Ÿ” ์˜ˆ์ œ:

    ${user.name}  // Java Bean ๊ฐ์ฒด์˜ name ์†์„ฑ
    ${order['id']}  // Map ๊ฐ์ฒด์˜ ํ‚ค id

๐Ÿ”ง EL์˜ ๊ธฐ๋Šฅ

  1. JSP์˜ ๋„ค ๊ฐ€์ง€ ๊ธฐ๋ณธ ์˜์—ญ์˜ ์†์„ฑ ์‚ฌ์šฉ

    • pageScope, requestScope, sessionScope, applicationScope์— ์ €์žฅ๋œ ์†์„ฑ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ.
    ${sessionScope.user}  // ์„ธ์…˜์— ์ €์žฅ๋œ user ๊ฐ์ฒด์— ์ ‘๊ทผ
  2. Java ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ๊ฐ€๋Šฅ

    • Java Bean์˜ getter ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ${user.getName()}  // user ๊ฐ์ฒด์˜ getName() ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
  3. EL๋งŒ์˜ ๋‚ด์žฅ ๊ฐ์ฒด ์ œ๊ณต

    • ์ˆ˜์น˜ ๋ฐ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ ๊ฐ์ฒด๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
    ${3 + 2}  // ๊ฒฐ๊ณผ: 5
    ${user.age > 18}  // ๊ฒฐ๊ณผ: true
  4. ์ˆ˜์น˜, ๊ด€๊ณ„, ๋…ผ๋ฆฌ ์—ฐ์‚ฐ ์ œ๊ณต

    • ์ˆ˜์น˜ ์—ฐ์‚ฐ: +, -, *, /
    • ๊ด€๊ณ„ ์—ฐ์‚ฐ: ==, !=, <, >
    • ๋…ผ๋ฆฌ ์—ฐ์‚ฐ: &&, ||, !

๐ŸŒŸ EL์˜ ์žฅ์ 

โœ… ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ: ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•˜๊ณ  ์ง๊ด€์ ์ž…๋‹ˆ๋‹ค.
โœ… ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด: ๋กœ์ง๊ณผ ๋ทฐ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ ์ˆ˜์ •์ด ์‰ฝ์Šต๋‹ˆ๋‹ค.
โœ… ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ๊ฐ„ํŽธ: EL์„ ์‚ฌ์šฉํ•˜๋ฉด JSP์—์„œ ๋ณต์žกํ•œ ์ฝ”๋“œ๋ฅผ ํ”ผํ•˜๊ณ  ์†์„ฑ์— ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿง‘โ€๐Ÿ’ป EL ๋ฌธ๋ฒ•: [ ] ์—ฐ์‚ฐ์ž

EL์—์„œ๋Š” .(Dot) ํ‘œ๊ธฐ๋ฒ• ์™ธ์—๋„ [ ](๋Œ€๊ด„ํ˜ธ) ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด์˜ ๊ฐ’์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ง€์›ํ•˜๋Š” ์ด์œ ๋Š” ๊ฐ์ฒด๋‚˜ ์ปฌ๋ ‰์…˜์— ๋” ์œ ์—ฐํ•˜๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.


๐Ÿ“Œ [ ] ์—ฐ์‚ฐ์ž์˜ ํŠน์ง•

  1. ๋ฌธ์ž์—ด ํ‚ค์— ์ ‘๊ทผํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • [ ] ์•ˆ์— ๋ฌธ์ž์—ด์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•ด๋‹น ๋ฌธ์ž์—ด์ด Map์˜ ํ‚ค๋‚˜ Bean์˜ ์†์„ฑ(ํ”„๋กœํผํ‹ฐ)์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ์˜ ์ธ๋ฑ์Šค ์ ‘๊ทผ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ฐฐ์—ด ๋˜๋Š” ๋ฆฌ์ŠคํŠธ์—์„œ๋Š” ๋ฌธ์žํ˜• ์ธ๋ฑ์Šค ๊ฐ’์„ ๋„ฃ์–ด๋„ ์ž๋™์œผ๋กœ ์ˆซ์žํ˜•์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

โœ… Dot ํ‘œ๊ธฐ๋ฒ•๊ณผ [ ] ์—ฐ์‚ฐ์ž์˜ ๋น„๊ต

[ ] ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผDot ํ‘œ๊ธฐ๋ฒ•์„ ์ด์šฉํ•œ ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ
${userinfo["name"]}${userinfo.name}

๋น„๊ต ์„ค๋ช…:

  • ๋‘ ๋ฐฉ๋ฒ• ๋ชจ๋‘ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ(์†์„ฑ)์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • [ ] ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ž์—ด ํ‚ค์— ์œ ์—ฐํ•˜๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ‚ค ์ด๋ฆ„์— ํŠน์ˆ˜ ๋ฌธ์ž๋‚˜ ๊ณต๋ฐฑ์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด .(Dot) ํ‘œ๊ธฐ๋ฒ•์€ ๋ณ€์ˆ˜ ์ด๋ฆ„์— ํŠน์ˆ˜ ๋ฌธ์ž๊ฐ€ ์—†์„ ๋•Œ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐ŸŽฏ ๋ฆฌ์ŠคํŠธ์™€ ๋ฐฐ์—ด ์š”์†Œ ์ ‘๊ทผ ์˜ˆ์ œ

๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ๋œ ๊ฐ’๋„ EL ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“ ์˜ˆ์ œ ์ฝ”๋“œ

Servlet ์ฝ”๋“œ:

String[] names = {"ํ™๊ธธ๋™", "์ด์ˆœ์‹ ", "์ž„๊บฝ์ •"};
request.setAttribute("userNames", names);

JSP ์ฝ”๋“œ:

${userNames[0]}  // ๊ฒฐ๊ณผ: ํ™๊ธธ๋™ ์ถœ๋ ฅ
${userNames["1"]}  // ๋ฌธ์ž์—ด ์ธ๋ฑ์Šค 1์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ด์ˆœ์‹  ์ถœ๋ ฅ

๐Ÿ› ๏ธ [ ] ์—ฐ์‚ฐ์ž์˜ ํŠน์ง• ์š”์•ฝ

  • [ ] ์•ˆ์˜ ๊ฐ’์ด ๋ฌธ์ž์—ด์ธ ๊ฒฝ์šฐ:
    • Map ๊ฐ์ฒด์˜ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, Java Bean์˜ ํ”„๋กœํผํ‹ฐ๋กœ ์ธ์‹๋ฉ๋‹ˆ๋‹ค.
  • [ ] ์•ˆ์˜ ๊ฐ’์ด ์ธ๋ฑ์Šค์ผ ๊ฒฝ์šฐ:
    • ๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ๋œ ๊ฐ’์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ฌธ์ž์—ด ํ˜•ํƒœ์˜ ์ˆซ์ž๋„ ์ •์ˆ˜ ์ธ๋ฑ์Šค๋กœ ์ž๋™ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์‚ฌ์šฉ ์˜ˆ์‹œ์™€ ์ •๋ฆฌ

  1. Map ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ๋•Œ:

    ${userInfo["name"]}  // Map ๊ฐ์ฒด์˜ ํ‚ค "name"์— ์ ‘๊ทผ
  2. ๋ฐฐ์—ด ์š”์†Œ์— ์ ‘๊ทผํ•  ๋•Œ:

    ${userNames[1]}  // ๋‘ ๋ฒˆ์งธ ์š”์†Œ '์ด์ˆœ์‹ ' ์ถœ๋ ฅ
    ${userNames["2"]}  // ์ˆซ์žํ˜• ๋ฌธ์ž์—ด๋„ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•ด '์ž„๊บฝ์ •' ์ถœ๋ ฅ

์ด์™€ ๊ฐ™์ด [ ] ์—ฐ์‚ฐ์ž๋Š” Map์˜ ํ‚ค, Bean์˜ ํ”„๋กœํผํ‹ฐ, ๋ฐฐ์—ด ๋˜๋Š” ๋ฆฌ์ŠคํŠธ์˜ ์ธ๋ฑ์Šค ์ ‘๊ทผ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. Dot ํ‘œ๊ธฐ๋ฒ•๊ณผ์˜ ์ฐจ์ด์ ์„ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•˜๋ฉด JSP ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ์„ ํฌ๊ฒŒ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜Š


๐Ÿง‘โ€๐Ÿ’ป EL ๋‚ด์žฅ ๊ฐ์ฒด(Implicit Objects)๋ž€?

EL(Expression Language)์—์„œ๋Š” JSP์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ช‡ ๊ฐ€์ง€ ๋‚ด์žฅ ๊ฐ์ฒด(implicit objects)๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ์ฒด๋“ค์€ JSP ํŽ˜์ด์ง€์˜ ๋‹ค์–‘ํ•œ ๋ฒ”์œ„(scope)์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.


๐Ÿ“Œ ๋‚ด์žฅ ๊ฐ์ฒด ๋ชฉ๋ก๊ณผ ์„ค๋ช…

CategoryIdentifierTypeDescription
JSPpageContextJava Beanํ˜„์žฌ JSP ํŽ˜์ด์ง€์˜ PageContext ์ธ์Šคํ„ด์Šค์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
๋ฒ”์œ„(scope)pageScopeMappage scope์— ์ €์žฅ๋œ ๊ฐ์ฒด๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
requestScopeMaprequest scope์— ์ €์žฅ๋œ ๊ฐ์ฒด๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
sessionScopeMapsession scope์— ์ €์žฅ๋œ ๊ฐ์ฒด๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
applicationScopeMapapplication scope์— ์ €์žฅ๋œ ๊ฐ์ฒด๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.

1. JSP ๊ด€๋ จ ๋‚ด์žฅ ๊ฐ์ฒด

  • pageContext
    • ํ˜„์žฌ ํŽ˜์ด์ง€์˜ ์ปจํ…์ŠคํŠธ์™€ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
    • JSP ๋‚ด์—์„œ ํŽ˜์ด์ง€์˜ ์„ค์ •, ์š”์ฒญ, ์‘๋‹ต, ์„ธ์…˜ ๋“ฑ์˜ ์—ฌ๋Ÿฌ ์ •๋ณด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ด ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•ด ์—ฌ๋Ÿฌ ๋ฒ”์œ„(scope)์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ๋ฒ”์œ„(Scope) ๊ด€๋ จ ๋‚ด์žฅ ๊ฐ์ฒด

JSP์—์„œ ๋ฐ์ดํ„ฐ๋Š” ๋ฒ”์œ„(scope)์— ๋”ฐ๋ผ ๊ด€๋ฆฌ๋˜๋ฉฐ, ๊ฐ ๋ฒ”์œ„์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” EL ๋‚ด์žฅ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. pageScope

    • ํ˜„์žฌ ํŽ˜์ด์ง€์—์„œ๋งŒ ์œ ํšจํ•œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
    • ํŽ˜์ด์ง€๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋ฐ์ดํ„ฐ๋Š” ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

    ์˜ˆ์ œ:

    ${pageScope.user}  // ํ˜„์žฌ ํŽ˜์ด์ง€ ๋ฒ”์œ„์— ์ €์žฅ๋œ user ๊ฐ์ฒด
  2. requestScope

    • HTTP ์š”์ฒญ(request) ๋™์•ˆ ์œ ํšจํ•œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฐ™์€ ์š”์ฒญ ๋‚ด์—์„œ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋ฏ€๋กœ, ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ํฌ์›Œ๋”ฉํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

    ์˜ˆ์ œ:

    ${requestScope.user}  // ์š”์ฒญ ๋ฒ”์œ„์— ์ €์žฅ๋œ user ๊ฐ์ฒด
  3. sessionScope

    • ์„ธ์…˜(session) ๋™์•ˆ ์œ ์ง€๋˜๋Š” ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฐ™์€ ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ฒ„์— ์ ‘์†ํ•ด ์žˆ๋Š” ๋™์•ˆ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

    ์˜ˆ์ œ:

    ${sessionScope.cart}  // ์„ธ์…˜ ๋ฒ”์œ„์— ์ €์žฅ๋œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ(cart) ๊ฐ์ฒด
  4. applicationScope

    • ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ๊ณต์œ ๋˜๋Š” ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
    • ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์œ ์ง€๋˜๋ฉฐ, ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

    ์˜ˆ์ œ:

    ${applicationScope.settings}  // ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ”์œ„์— ์ €์žฅ๋œ ์„ค์ • ์ •๋ณด

๐Ÿ› ๏ธ ์ •๋ฆฌ

  • pageContext: ํ˜„์žฌ ํŽ˜์ด์ง€์™€ ๊ด€๋ จ๋œ ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์€ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
  • pageScope: ํ˜„์žฌ ํŽ˜์ด์ง€์—์„œ๋งŒ ์œ ํšจํ•œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
  • requestScope: HTTP ์š”์ฒญ ๋™์•ˆ์— ์œ ํšจํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • sessionScope: ์‚ฌ์šฉ์ž ์„ธ์…˜ ๋™์•ˆ ์œ ์ง€๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • applicationScope: ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ๊ณต์œ ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์–ธ์ œ ์–ด๋–ค ๋ฒ”์œ„๋ฅผ ์‚ฌ์šฉํ• ๊นŒ?

  • pageScope: ํ˜„์žฌ ํŽ˜์ด์ง€ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ๋  ๋ฐ์ดํ„ฐ์ผ ๋•Œ.
  • requestScope: ์—ฌ๋Ÿฌ JSP ํŽ˜์ด์ง€์—์„œ ๋™์ผํ•œ ์š”์ฒญ(request) ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•  ๋•Œ.
  • sessionScope: ๋กœ๊ทธ์ธ ์ •๋ณด๋‚˜ ์‚ฌ์šฉ์ž๋ณ„ ๋ฐ์ดํ„ฐ๋ฅผ ์„ธ์…˜ ๋™์•ˆ ์œ ์ง€ํ•  ๋•Œ.
  • applicationScope: ์„œ๋ฒ„ ์ „์ฒด์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ.

๐ŸŽฏ ๊ฒฐ๋ก 

์ด์™€ ๊ฐ™์ด EL ๋‚ด์žฅ ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•˜๋ฉด JSP์—์„œ ๋‹ค์–‘ํ•œ ๋ฒ”์œ„์˜ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด ๊ฐœ๋ฐœ์ด ํ›จ์”ฌ ๊ฐ„ํŽธํ•ด์ง‘๋‹ˆ๋‹ค. ๊ฐ ๋ฒ”์œ„์˜ ํŠน์ง•์„ ์ดํ•ดํ•˜๊ณ  ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜๋ฉด ํšจ์œจ์ ์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด JSP ํŽ˜์ด์ง€๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿš€


๐Ÿง‘โ€๐Ÿ’ป EL ๋‚ด์žฅ ๊ฐ์ฒด: JSP ํŽ˜์ด์ง€์—์„œ EL ํ‘œํ˜„์‹์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด

EL(Expression Language)์—์„œ๋Š” ์š”์ฒญ(request), ํ—ค๋”(header), ์ฟ ํ‚ค(cookie), ์ดˆ๊ธฐํ™” ๋งค๊ฐœ๋ณ€์ˆ˜(init parameter)์™€ ๊ฐ™์€ ์ •๋ณด๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋‚ด์žฅ ๊ฐ์ฒด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด JSP์—์„œ ๋ณต์žกํ•œ ์„œ๋ธ”๋ฆฟ API ์ฝ”๋“œ ์—†์ด๋„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“Œ EL ๋‚ด์žฅ ๊ฐ์ฒด์˜ ๊ตฌ์„ฑ ๋ฐ ์„ค๋ช…

CategoryIdentifierTypeDescription
์š”์ฒญ ๋งค๊ฐœ๋ณ€์ˆ˜paramMapServletRequest.getParameter(String)๋กœ ์š”์ฒญ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
paramValuesMapServletRequest.getParameterValues(String)๋กœ ์—ฌ๋Ÿฌ ๊ฐ’์˜ ์š”์ฒญ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
์š”์ฒญ ํ—ค๋”headerMapHttpServletRequest.getHeader(String)๋กœ ํ—ค๋” ์ •๋ณด๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
headerValuesMapHttpServletRequest.getHeaders(String)๋กœ ์—ฌ๋Ÿฌ ํ—ค๋” ์ •๋ณด๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
์ฟ ํ‚คcookieMapHttpServletRequest.getCookies()๋กœ ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
์ดˆ๊ธฐํ™” ๋งค๊ฐœ๋ณ€์ˆ˜initParamMapServletContext.getInitParameter(String)๋กœ ์ดˆ๊ธฐํ™” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.

1. ์š”์ฒญ ๋งค๊ฐœ๋ณ€์ˆ˜ (param, paramValues)

๐Ÿ“ ์„ค๋ช…:

  • param์€ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์—์„œ ์ „๋‹ฌ๋œ ๋‹จ์ผ ๊ฐ’์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • paramValues๋Š” ์—ฌ๋Ÿฌ ๊ฐ’์ด ์ „๋‹ฌ๋œ ๊ฒฝ์šฐ ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ” ์˜ˆ์ œ:

ํด๋ผ์ด์–ธํŠธ๊ฐ€ http://example.com/page?name=John&hobby=reading&hobby=swimming๊ณผ ๊ฐ™์€ URL๋กœ ์š”์ฒญํ•œ ๊ฒฝ์šฐ:

${param.name}  // ๊ฒฐ๊ณผ: John
${paramValues.hobby[0]}  // ๊ฒฐ๊ณผ: reading
${paramValues.hobby[1]}  // ๊ฒฐ๊ณผ: swimming

2. ์š”์ฒญ ํ—ค๋” (header, headerValues)

๐Ÿ“ ์„ค๋ช…:

  • header๋Š” ์š”์ฒญ์— ํฌํ•จ๋œ ๋‹จ์ผ ํ—ค๋” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • headerValues๋Š” ๋™์ผํ•œ ์ด๋ฆ„์˜ ์—ฌ๋Ÿฌ ํ—ค๋” ๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ” ์˜ˆ์ œ:

${header["User-Agent"]}  // ํด๋ผ์ด์–ธํŠธ์˜ ๋ธŒ๋ผ์šฐ์ € ์ •๋ณด(User-Agent) ์ถœ๋ ฅ
${headerValues["Accept-Language"][0]}  // ์ฒซ ๋ฒˆ์งธ ์–ธ์–ด ์ •๋ณด ์ถœ๋ ฅ

๐Ÿ“ ์„ค๋ช…:

  • cookie ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด ํด๋ผ์ด์–ธํŠธ์˜ ์ฟ ํ‚ค ์ •๋ณด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฟ ํ‚ค๋Š” ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์— ์ƒํƒœ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ” ์˜ˆ์ œ:

${cookie["userID"].value}  // userID ์ฟ ํ‚ค์˜ ๊ฐ’ ์ถœ๋ ฅ

4. ์ดˆ๊ธฐํ™” ๋งค๊ฐœ๋ณ€์ˆ˜ (initParam)

๐Ÿ“ ์„ค๋ช…:

  • initParam์€ ์„œ๋ธ”๋ฆฟ ์ดˆ๊ธฐํ™” ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋“ค์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ •์— ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ฐฐํฌ ์„œ์ˆ ์ž(web.xml)์—์„œ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ” ์˜ˆ์ œ:

${initParam["appName"]}  // ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฆ„ ์ดˆ๊ธฐํ™” ๋งค๊ฐœ๋ณ€์ˆ˜ ์ถœ๋ ฅ

๐Ÿ› ๏ธ ์ •๋ฆฌ

  • param๊ณผ paramValues: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
  • header์™€ headerValues: HTTP ์š”์ฒญ์˜ ํ—ค๋” ์ •๋ณด์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
  • cookie: ํด๋ผ์ด์–ธํŠธ์˜ ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค.
  • initParam: ์„œ๋ธ”๋ฆฟ ์ดˆ๊ธฐํ™” ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์–ธ์ œ ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ• ๊นŒ?

  • param: ๋‹จ์ผ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ์— ์ ‘๊ทผํ•  ๋•Œ.
  • paramValues: ์—ฌ๋Ÿฌ ๊ฐ’์ด ๋™์ผํ•œ ์ด๋ฆ„์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋‹ด๊ฒจ ์žˆ์„ ๋•Œ.
  • header: User-Agent๋‚˜ Content-Type ๊ฐ™์€ ์š”์ฒญ ํ—ค๋”์— ์ ‘๊ทผํ•  ๋•Œ.
  • cookie: ํด๋ผ์ด์–ธํŠธ์˜ ๋กœ๊ทธ์ธ ์ •๋ณด๋‚˜ ์„ธ์…˜ ์œ ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ.
  • initParam: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ดˆ๊ธฐ ์„ค์ • ๊ฐ’์„ ์‚ฌ์šฉํ•  ๋•Œ.

์ด์™€ ๊ฐ™์ด EL ๋‚ด์žฅ ๊ฐ์ฒด๋“ค์„ ์‚ฌ์šฉํ•˜๋ฉด JSP์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋” ์ง๊ด€์ ์ด๊ณ  ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ๋ณต์žกํ•œ ์ฝ”๋“œ ์—†์ด๋„ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ™œํ•˜๊ฒŒ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ๐Ÿš€


๐Ÿง‘โ€๐Ÿ’ป EL ์‚ฌ์šฉ ๊ฐœ์š”

EL(Expression Language)๋Š” JSP์—์„œ ๋ฐ์ดํ„ฐ์— ๊ฐ„ํŽธํ•˜๊ฒŒ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ํ‘œํ˜„ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. EL์„ ์‚ฌ์šฉํ•˜๋ฉด ํ‚ค-๊ฐ’ ์Œ(Map ๊ตฌ์กฐ)์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด JSP ์ฝ”๋“œ์—์„œ ๋ณต์žกํ•œ ํ‘œํ˜„์„ ๊ฐ„์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“Œ EL ๋‚ด์žฅ ๊ฐ์ฒด์™€ Map ๊ตฌ์กฐ

  • pageContext๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  EL ๋‚ด์žฅ ๊ฐ์ฒด๋Š” Map ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
    • Map ๊ตฌ์กฐ๋ž€ key(ํ‚ค)์™€ value(๊ฐ’)๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ, EL์—์„œ๋Š” ๊ฐ ๊ฐ์ฒด์˜ ํŠน์ • ํ‚ค(key)๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ๊ฐ’(value)์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ:

${param["name"]}  // param ๊ฐ์ฒด์˜ "name" ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ

์œ„ ์˜ˆ์ œ์—์„œ๋Š” param์ด๋ผ๋Š” ๋‚ด์žฅ ๊ฐ์ฒด์˜ "name" ํ‚ค๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋œ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“Œ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

  • EL ํ‘œํ˜„์‹์€ ${} ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ${ expr } ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” expr์€ ๋‹ค์–‘ํ•œ ๊ฐ์ฒด๋‚˜ ๋ณ€์ˆ˜, ์ˆ˜์‹, ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ๋“ฑ์„ ๋‹ด์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ:

<p>์‚ฌ์šฉ์ž ์ด๋ฆ„: ${user.name}</p>  
  • ์œ„ ์ฝ”๋“œ์—์„œ ${user.name}์€ user ๊ฐ์ฒด์˜ name ์†์„ฑ์— ์ ‘๊ทผํ•ด ํ•ด๋‹น ๊ฐ’์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ› ๏ธ ์ •๋ฆฌ: EL ์‚ฌ์šฉ์˜ ํ•ต์‹ฌ ํฌ์ธํŠธ

  1. pageContext๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  EL ๊ฐ์ฒด๋Š” Map ํ˜•ํƒœ๋กœ ๊ฐ’์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ, key์™€ value์˜ ์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
  2. ${} ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด๋‚˜ ์†์„ฑ, ๋งค๊ฐœ๋ณ€์ˆ˜, ํ—ค๋”, ์ฟ ํ‚ค ๋“ฑ์˜ ๊ฐ’์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
  3. EL์„ ์‚ฌ์šฉํ•˜๋ฉด JSP ํŽ˜์ด์ง€์—์„œ ๋ณต์žกํ•œ ์ฝ”๋“œ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก EL ์‚ฌ์šฉ์˜ ์žฅ์ 

  • ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ: ์Šคํฌ๋ฆฝํŠธ๋ฆฟ(<% %>)์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋กœ์ง๊ณผ ๋ทฐ ๋ถ„๋ฆฌ: ๋ณต์žกํ•œ ๋กœ์ง์„ ๋ฐฐ์ œํ•˜๊ณ , ๋ทฐ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ฐ„ํŽธํ™”: Map ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ํ‚ค๋กœ ๊ฐ’์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

์ด์™€ ๊ฐ™์ด EL์„ ์‚ฌ์šฉํ•˜๋ฉด JSP ํŽ˜์ด์ง€์—์„œ ์ง๊ด€์ ์ด๊ณ  ๊น”๋”ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜Š


๐Ÿง‘โ€๐Ÿ’ป EL์—์„œ ๊ฐ์ฒด ์ ‘๊ทผ

JSP ํŽ˜์ด์ง€์—์„œ EL(Expression Language)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ๋ฒ”์œ„(scope)์— ์ €์žฅ๋œ ๊ฐ์ฒด์— ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. EL์—์„œ๋Š” pageScope, requestScope, sessionScope, applicationScope์™€ ๊ฐ™์€ ์Šค์ฝ”ํ”„๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋ฉฐ, ํŠน์ • ๊ฐ์ฒด๊ฐ€ ์–ด๋А ๋ฒ”์œ„์— ์กด์žฌํ•˜๋Š”์ง€์— ๋”ฐ๋ผ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.


๐Ÿ“Œ ๊ฐ์ฒด ์ ‘๊ทผ ์ˆœ์„œ

  • EL์€ ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„๋งŒ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ, ๋‹ค์Œ ์šฐ์„ ์ˆœ์œ„๋กœ ๊ฐ์ฒด๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค:
    1. pageScope
    2. requestScope
    3. sessionScope
    4. applicationScope

๐Ÿ“Œ ์˜ˆ์ œ 1: request ๋ฒ”์œ„์— ์ €์žฅ๋œ ์†์„ฑ ์ ‘๊ทผ

์„œ๋ธ”๋ฆฟ์—์„œ ๊ฐ์ฒด ์ €์žฅํ•˜๊ธฐ:

// Servlet
request.setAttribute("userInfo", "ํ™๊ธธ๋™");

JSP์—์„œ EL๋กœ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ:

${requestScope.userInfo}  // ๊ฒฐ๊ณผ: ํ™๊ธธ๋™
${pageContext.request.userInfo}  // ๊ฒฐ๊ณผ: ํ™๊ธธ๋™
${userInfo}  // ๊ฒฐ๊ณผ: ํ™๊ธธ๋™ (์ž๋™์œผ๋กœ requestScope์—์„œ ์ฐพ์Œ)

์„ค๋ช…:

  • ์„œ๋ธ”๋ฆฟ์—์„œ "userInfo"๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ "ํ™๊ธธ๋™"์„ request ์Šค์ฝ”ํ”„์— ์ €์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.
  • EL์—์„œ๋Š” requestScope๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๋‹จ์ˆœํžˆ ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„(userInfo)๋งŒ ์ ์–ด๋„ ์ž๋™์œผ๋กœ ์˜ฌ๋ฐ”๋ฅธ ์Šค์ฝ”ํ”„์—์„œ ์ฐพ์•„๋ƒ…๋‹ˆ๋‹ค.

๐Ÿ“Œ ์˜ˆ์ œ 2: URL ํŒŒ๋ผ๋ฏธํ„ฐ ์ ‘๊ทผ

URL:

http://example.com/page?name=Alice&fruit=apple&fruit=banana

JSP์—์„œ EL๋กœ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ:

${param.name}  // ๊ฒฐ๊ณผ: Alice
${paramValues.fruit[0]}  // ๊ฒฐ๊ณผ: apple
${paramValues.fruit[1]}  // ๊ฒฐ๊ณผ: banana

์„ค๋ช…:

  • param๊ณผ paramValues๋Š” URL ํŒŒ๋ผ๋ฏธํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • param์€ ๋‹จ์ผ ๊ฐ’์— ์ ‘๊ทผํ•˜๊ณ , paramValues๋Š” ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐ’์„ ๋ฐ›์„ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ ์˜ˆ์ œ 3: request ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ ์ ‘๊ทผ

JSP์—์„œ request ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœํ•˜๊ธฐ:

Method is: ${pageContext.request.method}

์„ค๋ช…:

  • pageContext ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋ธ”๋ฆฟ API์˜ request ๊ฐ์ฒด์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์œ„ ์ฝ”๋“œ๋Š” ํ˜„์žฌ HTTP ์š”์ฒญ์˜ ๋ฉ”์†Œ๋“œ(GET, POST ๋“ฑ)๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ ์˜ˆ์ œ 4: ์†์„ฑ ์ด๋ฆ„์— ์ (.)์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ

์„œ๋ธ”๋ฆฟ์—์„œ ๊ฐ์ฒด ์ €์žฅํ•˜๊ธฐ:

// Servlet
request.setAttribute("user.profile", memberDto);

JSP์—์„œ EL๋กœ ์†์„ฑ์— ์ ‘๊ทผํ•˜๊ธฐ:

${requestScope["user.profile"].name}  // ๊ฐ์ฒด์˜ name ์†์„ฑ์— ์ ‘๊ทผ

์„ค๋ช…:

  • EL์—์„œ๋Š” ์†์„ฑ ์ด๋ฆ„์— ์ (.)์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ [ ] ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ํ•ด๋‹น ์†์„ฑ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ (.)์„ Bean ๊ฐ์ฒด์˜ ์†์„ฑ์œผ๋กœ ์ž˜๋ชป ์ธ์‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ Case #1: ์ž˜๋ชป๋œ ์ ‘๊ทผ์œผ๋กœ ์ธํ•œ ์˜ค๋ฅ˜

${user.profile.name}  // ์˜ค๋ฅ˜ ๋ฐœ์ƒ: user.profile์ด๋ผ๋Š” ์†์„ฑ ์—†์Œ
  • ์›์ธ: EL์—์„œ๋Š” ์ (.)์„ Bean ๊ฐ์ฒด์˜ ์†์„ฑ ์ ‘๊ทผ์œผ๋กœ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” ์†์„ฑ ์ด๋ฆ„ ์ž์ฒด๊ฐ€ "user.profile"์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ› ๏ธ ์ •๋ฆฌ

  • EL์—์„œ๋Š” ์  ํ‘œ๊ธฐ๋ฒ•๊ณผ ๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ•์„ ํ™œ์šฉํ•ด ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์Šค์ฝ”ํ”„ ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ, ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„๋งŒ ์ ์œผ๋ฉด ์ž๋™์œผ๋กœ pageScope โ†’ requestScope โ†’ sessionScope โ†’ applicationScope ์ˆœ์„œ๋กœ ๊ฐ์ฒด๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
  • ์ (.)์ด ํฌํ•จ๋œ ์†์„ฑ ์ด๋ฆ„์€ ๋ฐ˜๋“œ์‹œ [ ] ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด ์ ‘๊ทผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • EL์„ ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋ธ”๋ฆฟ๊ณผ JSP ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์—ฐ๋™์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์™€ ๊ฐ™์ด EL์„ ํ™œ์šฉํ•˜๋ฉด ๊ฐ์ฒด์™€ ์†์„ฑ์— ์‰ฝ๊ณ  ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜Š


๐Ÿง‘โ€๐Ÿ’ป EL์—์„œ ์ฟ ํ‚ค ๊ฐ์ฒด ์ ‘๊ทผ์— ๋Œ€ํ•œ ์„ค๋ช…

EL(Expression Language)์—์„œ๋Š” ์ฟ ํ‚ค์— ๊ฐ„ํŽธํ•˜๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก cookie ๋‚ด์žฅ ๊ฐ์ฒด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฟ ํ‚ค๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋กœ, ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ“Œ ์ฟ ํ‚ค ์ ‘๊ทผ ์ˆœ์„œ์™€ ๋™์ž‘ ์›๋ฆฌ

${cookie.id.value}
  1. ์ฟ ํ‚ค๊ฐ€ null์ผ ๊ฒฝ์šฐ:

    • cookie ๊ฐ์ฒด๊ฐ€ ์—†์œผ๋ฉด null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ฟ ํ‚ค ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ id๋ผ๋Š” ์ฟ ํ‚ค๊ฐ€ ์—†์„ ๊ฒฝ์šฐ:

    • cookie.id๊ฐ€ ์—†์œผ๋ฉด null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  3. ์ฟ ํ‚ค์™€ id๊ฐ€ ๋ชจ๋‘ ์กด์žฌํ•  ๊ฒฝ์šฐ:

    • cookie.id.value์˜ value ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“ ์ฐธ๊ณ :

  • EL์€ null ๊ฐ’์ผ ๊ฒฝ์šฐ์—๋„ ๋นˆ ๋ฌธ์ž์—ด("")๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, null ๊ฐ’์„ ์ถœ๋ ฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋นˆ ๋ฌธ์ž์—ด๋กœ ํ‘œ์‹œ๋˜๋”๋ผ๋„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ ์ฟ ํ‚ค ๊ฐ’์„ ์Šคํฌ๋ฆฝํŠธ๋ฆฟ์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•

// Servlet์—์„œ ์ฟ ํ‚ค ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
    if (cookie.getName().equals("userId")) {
        out.println(cookie.getValue());  // userId ์ฟ ํ‚ค์˜ ๊ฐ’ ์ถœ๋ ฅ
    }
}

์„ค๋ช…:

  • ์„œ๋ธ”๋ฆฟ์—์„œ request.getCookies() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ฟ ํ‚ค๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ๊ฐ ์ฟ ํ‚ค๋ฅผ ํ™•์ธํ•˜๊ณ , ์ด๋ฆ„์ด "userId"์ธ ์ฟ ํ‚ค์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ๋ฐฉ๋ฒ•์€ ์Šคํฌ๋ฆฝํŠธ๋ฆฟ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ ์ฟ ํ‚ค ๊ฐ’์„ EL๋กœ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•

${cookie.userId.value}

์„ค๋ช…:

  • EL์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฟ ํ‚ค ์ด๋ฆ„์„ ์ง์ ‘ ์ฐธ์กฐํ•˜์—ฌ ๊ฐ’์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • "userId"๋ผ๋Š” ์ด๋ฆ„์˜ ์ฟ ํ‚ค๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•ด๋‹น value ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • EL์„ ์‚ฌ์šฉํ•˜๋ฉด ์Šคํฌ๋ฆฝํŠธ๋ฆฟ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ๊ฐ„๋‹จํ•˜๊ฒŒ JSP ํŽ˜์ด์ง€์—์„œ ์ฟ ํ‚ค๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ› ๏ธ ์ •๋ฆฌ: ์Šคํฌ๋ฆฝํŠธ๋ฆฟ๊ณผ EL ๋น„๊ต

์Šคํฌ๋ฆฝํŠธ๋ฆฟEL
์ฝ”๋“œ๊ฐ€ ๊ธธ๊ณ  ๋ณต์žกํ•จ์ฝ”๋“œ๊ฐ€ ์งง๊ณ  ๊ฐ„๊ฒฐํ•จ
๋ฐ˜๋ณต๋ฌธ๊ณผ ์กฐ๊ฑด๋ฌธ์œผ๋กœ ์ฟ ํ‚ค๋ฅผ ํƒ์ƒ‰ํ•ด์•ผ ํ•จ์ฟ ํ‚ค ์ด๋ฆ„์œผ๋กœ ๋ฐ”๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ
์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์ŒEL์€ null ๊ฐ’์„ ๋นˆ ๋ฌธ์ž์—ด๋กœ ์ฒ˜๋ฆฌ

๐Ÿ’ก ๊ฒฐ๋ก 

EL์„ ์‚ฌ์šฉํ•˜๋ฉด JSP ํŽ˜์ด์ง€์—์„œ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ฟ ํ‚ค ๊ฐ’์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฆฟ์„ ์‚ฌ์šฉํ•  ํ•„์š” ์—†์ด, cookie ๋‚ด์žฅ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ์ฟ ํ‚ค ๊ฐ’์„ ์‰ฝ๊ฒŒ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, null ๊ฐ’์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ์žฅ์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜Š


๐Ÿง‘โ€๐Ÿ’ป EL Operator(์—ฐ์‚ฐ์ž) โ€“ JSP EL์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์—ฐ์‚ฐ์ž๋“ค

EL(Expression Language)์—์„œ๋Š” ์‚ฐ์ˆ , ๊ด€๊ณ„, ๋…ผ๋ฆฌ, ์‚ผํ•ญ ์—ฐ์‚ฐ์ž ๋“ฑ์„ ์ œ๊ณตํ•˜์—ฌ ์กฐ๊ฑด๋ฌธ, ๋น„๊ต, ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. EL์˜ ์—ฐ์‚ฐ์ž๋“ค์€ ๋Œ€๋ถ€๋ถ„ Java์™€ ๋™์ผํ•œ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๋ฉฐ, JSP ํŽ˜์ด์ง€์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฆฟ ์—†์ด๋„ ๋ณต์žกํ•œ ๋กœ์ง์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.


๐Ÿ“Œ EL ์—ฐ์‚ฐ์ž ์ข…๋ฅ˜์™€ ์„ค๋ช…

1. ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž

  • ์—ฐ์‚ฐ์ž: +, -, *, / (div), % (mod)
  • ์„ค๋ช…: ์‚ฐ์ˆ  ์—ฐ์‚ฐ์€ ๋ง์…ˆ, ๋บ„์…ˆ, ๊ณฑ์…ˆ, ๋‚˜๋ˆ—์…ˆ, ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์ œ:
    ${10 + 5}  // ๊ฒฐ๊ณผ: 15
    ${10 mod 3}  // ๊ฒฐ๊ณผ: 1 (๋‚˜๋จธ์ง€)

2. ๊ด€๊ณ„ํ˜• ์—ฐ์‚ฐ์ž

  • ์—ฐ์‚ฐ์ž: == (eq), != (ne), < (lt), > (gt), <= (le), >= (ge)
  • ์„ค๋ช…: ๋‘ ๊ฐ’ ๊ฐ„์˜ ๋น„๊ต ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. EL์—์„œ๋Š” Java์˜ ๊ด€๊ณ„ ์—ฐ์‚ฐ์ž์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์ œ:
    ${5 gt 3}  // ๊ฒฐ๊ณผ: true (5๊ฐ€ 3๋ณด๋‹ค ํฌ๋‹ค)
    ${'apple' eq 'apple'}  // ๊ฒฐ๊ณผ: true

3. ์‚ผํ•ญ ์—ฐ์‚ฐ์ž

  • ๊ตฌ๋ฌธ: ์กฐ๊ฑด ? ๊ฐ’1 : ๊ฐ’2
  • ์„ค๋ช…: ์กฐ๊ฑด๋ฌธ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค. ์กฐ๊ฑด์ด ์ฐธ์ด๋ฉด ๊ฐ’1์„, ๊ฑฐ์ง“์ด๋ฉด ๊ฐ’2๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์ œ:
    ${5 > 3 ? 'ํฌ๋‹ค' : '์ž‘๋‹ค'}  // ๊ฒฐ๊ณผ: ํฌ๋‹ค

4. ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž

  • ์—ฐ์‚ฐ์ž: && (and), || (or), ! (not)
  • ์„ค๋ช…: ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์กฐ๊ฑด์„ AND, OR, NOT์œผ๋กœ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์ œ:
    ${5 > 3 && 3 > 1}  // ๊ฒฐ๊ณผ: true
    ${!(5 eq 3)}  // ๊ฒฐ๊ณผ: true

5. ํƒ€๋‹น์„ฑ ๊ฒ€์‚ฌ ์—ฐ์‚ฐ์ž: empty

  • ์„ค๋ช…: empty ์—ฐ์‚ฐ์ž๋Š” ๋ณ€์ˆ˜๋‚˜ ๊ฐ์ฒด๊ฐ€ ๋น„์—ˆ๋Š”์ง€(null, ๋นˆ ๊ฐ’์ธ์ง€)๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋น„์—ˆ๋‹ค๊ณ  ํŒ๋‹จ๋˜๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ตฌ๋ฌธ:

    ${empty var}
  • empty ์—ฐ์‚ฐ์ž์—์„œ true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ:

    1. ๊ฐ’์ด null์ผ ๋•Œ.
    2. ๊ฐ’์ด ๋นˆ ๋ฌธ์ž์—ด("")์ผ ๋•Œ.
    3. ๊ธธ์ด๊ฐ€ 0์ธ ๋ฐฐ์—ด์ผ ๋•Œ.
    4. ๋นˆ Map ๊ฐ์ฒด์ผ ๋•Œ.
    5. ๋นˆ Collection ๊ฐ์ฒด์ผ ๋•Œ.
  • ์˜ˆ์ œ:

    ${empty param.name}  // param.name์ด ์—†์œผ๋ฉด true ๋ฐ˜ํ™˜
    ${empty list}  // list๊ฐ€ ๋น„์–ด ์žˆ์œผ๋ฉด true ๋ฐ˜ํ™˜

๐Ÿ› ๏ธ ์ •๋ฆฌ

  • ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž: ์ˆ˜ํ•™์  ์—ฐ์‚ฐ ์ˆ˜ํ–‰ (+, -, *, /, %)
  • ๊ด€๊ณ„ํ˜• ์—ฐ์‚ฐ์ž: ๋‘ ๊ฐ’ ๋น„๊ต (==, !=, <, >)
  • ์‚ผํ•ญ ์—ฐ์‚ฐ์ž: ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‘ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ฐ˜ํ™˜ (์กฐ๊ฑด ? ๊ฐ’1 : ๊ฐ’2)
  • ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž: ์—ฌ๋Ÿฌ ์กฐ๊ฑด์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ฒฐํ•ฉ (&&, ||, !)
  • empty ์—ฐ์‚ฐ์ž: ๊ฐ’์ด ๋น„์—ˆ๋Š”์ง€ ๊ฒ€์‚ฌ (null, ๋นˆ ๋ฌธ์ž์—ด, ๋นˆ ๋ฐฐ์—ด ๋“ฑ)

๐Ÿ’ก EL ์—ฐ์‚ฐ์ž์˜ ์žฅ์ 

  • ์Šคํฌ๋ฆฝํŠธ๋ฆฟ ์—†์ด ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์กฐ๊ฑด๊ณผ ์—ฐ์‚ฐ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • empty ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ์•ˆ์ „ํ•˜๊ฒŒ null ๊ฐ’๊ณผ ๋นˆ ๊ฐ’๋“ค์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ง๊ด€์ ์ด๊ณ  ๊ฐ„๋‹จํ•œ ๋ฌธ๋ฒ•์œผ๋กœ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค.

์ด์™€ ๊ฐ™์ด EL ์—ฐ์‚ฐ์ž๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋ฉด JSP ์ฝ”๋“œ๊ฐ€ ๋” ๊ฐ„๊ฒฐํ•ด์ง€๊ณ  ์ง๊ด€์ ์ด ๋ฉ๋‹ˆ๋‹ค. ๐Ÿ˜Š


๐Ÿง‘โ€๐Ÿ’ป EL์—์„œ ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ

JSP์˜ Expression Language(EL)์—์„œ๋Š” ๋‹จ์ˆœํžˆ ๊ฐ์ฒด์˜ ์†์„ฑ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“Œ ์˜ˆ์ œ ์„ค๋ช…

  1. ์„œ๋ธ”๋ฆฟ์ด๋‚˜ DAO์—์„œ ๋ฐ์ดํ„ฐ ์„ค์ •:

    List<MemberDto> list = dao.getMembers();  // DAO์—์„œ ํšŒ์› ๋ชฉ๋ก ๊ฐ€์ ธ์˜ค๊ธฐ
    request.setAttribute("users", list);  // "users"๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ request์— ์ €์žฅ
    • dao.getMembers() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ํšŒ์› ๊ฐ์ฒด์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์™€์„œ request ์Šค์ฝ”ํ”„์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  2. JSP์—์„œ EL๋กœ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ:

    ํšŒ์› ์ˆ˜: ${requestScope.users.size()}, ${users.size()}
    • EL์—์„œ๋Š” users๋ผ๋Š” ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๊ณ , .size() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ(ํšŒ์› ์ˆ˜)๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    • requestScope๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ users๊ฐ€ request ์Šค์ฝ”ํ”„์— ์žˆ๋‹ค๋ฉด ์ž๋™์œผ๋กœ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ๊ณผ ๋น„๊ต

EL์—์„œ์˜ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ:

${users.size()}
  • EL์—์„œ๋Š” users ๊ฐ์ฒด์˜ size() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํšŒ์› ์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • ์  ํ‘œ๊ธฐ๋ฒ•์„ ํ†ตํ•ด ์‰ฝ๊ฒŒ ๋ฉ”์†Œ๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ๋ฆฟ์—์„œ์˜ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ:

<%= request.getAttribute("users").size() %>
  • ์Šคํฌ๋ฆฝํŠธ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋ฉด, request.getAttribute()๋กœ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜จ ํ›„ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์Šคํฌ๋ฆฝํŠธ๋ฆฟ ๋ฐฉ์‹์€ ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ  ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค.

๐Ÿ“Œ ์ฃผ์˜ ์‚ฌํ•ญ

${users.size} == <%= request.getAttribute("users").size() %>
  • EL์—์„œ๋Š” users.size์™€ ๊ฐ™์€ ์ ‘๊ทผ์ด users.size() ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ๊ณผ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฆ‰, ์†์„ฑ ์ ‘๊ทผ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋ฌธ๋ฒ•์ด์ง€๋งŒ, ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” getter ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ› ๏ธ ์ •๋ฆฌ

  1. EL ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ:

    • EL์„ ์‚ฌ์šฉํ•˜๋ฉด ์  ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ์— ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๊ฐ€๋…์„ฑ์ด ๋†’๊ณ , ์Šคํฌ๋ฆฝํŠธ๋ฆฟ ์‚ฌ์šฉ ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์Šคํฌ๋ฆฝํŠธ๋ฆฟ ์‚ฌ์šฉ๊ณผ์˜ ๋น„๊ต:

    • ์Šคํฌ๋ฆฝํŠธ๋ฆฟ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ request.getAttribute()๋กœ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.
    • EL์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค.
  3. EL์—์„œ์˜ ์†์„ฑ๊ณผ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ:

    • EL์—์„œ๋Š” .size์ฒ˜๋Ÿผ ์†์„ฑ ์ ‘๊ทผ ํ˜•ํƒœ๋กœ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” getter ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ๊ฒฐ๋ก 

EL์„ ์‚ฌ์šฉํ•˜๋ฉด JSP์—์„œ ๊ฐ์ฒด์™€ ๋ฉ”์†Œ๋“œ์— ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜Š

0๊ฐœ์˜ ๋Œ“๊ธ€