[JSP] JSP, ์„œ๋ธ”๋ ›, EL, JSTL์— ๋Œ€ํ•œ ๊ฐœ๋… ์ •๋ฆฌ

SHORTCUT

    ๋ฐ˜์‘ํ˜•
    ๐Ÿ’ฌ
    Spring ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœ์„ ํ•ด์•ผํ•˜๋Š”๋ฐ โ€˜์•„.. ์ด๊ฑฐ๋ž‘ ์ด๊ฑฐ ์ฐจ์ด๊ฐ€ ๋ญ์˜€์ง€..?โ€™ ์‹ถ์€ ๊ฐœ๋…์„ ๋น ๋ฅด๊ฒŒ ์ ๋ฆฝํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ณ  ์‹ถ์€ ๋ถ„๋“ค์„ ์œ„ํ•ด ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค!

    ์ธํŠธ๋กœ

    ์ด์ „ ์‹ธํ”ผ ๊ต์œก ๊ณผ์ •์„ ํ†ตํ•ด Spring MVC์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด๋‚˜, ์Šคํ”„๋ง ๋ถ€ํŠธ ๋“ฑ์„ ๋ฐฐ์› ์ง€๋งŒ, ๊ทธ ์ดํ›„ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ์ชฝ์œผ๋กœ ๋”์šฑ ๊นŠ๊ฒŒ ๋“ค์–ด๊ฐ”์Šต๋‹ˆ๋‹ค.

    ํ•˜์ง€๋งŒ ํ˜„์žฌ ์ €๋Š” Spring Framework ํ™˜๊ฒฝ์—์„œ ์—…๋ฌด๋ฅผ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ’€์Šคํƒ..์ด๋ผ ํ•˜๋ฉด ๋ถ€๋„๋Ÿฝ์ง€๋งŒ, ์•„๋ฌดํŠผ ํ”„๋ก ํŠธ๋‹จ ๋ถ€ํ„ฐ ๋ฐฑ์—”๋“œ, SQL๊นŒ์ง€ ๊ฑด๋“œ๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    ์—…๋ฌด์— ๋น ๋ฅด๊ฒŒ ์ ์‘ํ•˜๊ณ  ์ œ ์—ญํ• ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„  ๋ฐฐ์› ๋˜ ๋‚ด์šฉ์ด๋‚˜ ์—…๋ฌด์— ํ™œ์šฉํ•˜๋Š” ๊ฐœ๋…๋“ค์„ ๋ฆฌ๋งˆ์ธ๋“œ ๋ฐ ์žฌ์ •๋ฆฝ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ณ , ๊ฐ„๋‹จํ•˜๊ฒŒ๋‚˜๋งˆ ๋‚ด์šฉ๋“ค์„ ์ •๋ฆฌํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

    ์ทจ์—… ์ดˆ๋ฐ˜์— ์ •๋ฆฌํ•œ ๋‚ด์šฉ๋“ค์„ ๋ณธ ๋ณธ๋ฌธ์—์„œ ๊ณต์œ ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

    JSP์™€ Sevlet

    • JSP์™€ ์„œ๋ธ”๋ ›์€ ๋—„์ˆ˜ ์—†์ด ํ•จ๊ป˜ ๋“ฑ์žฅํ•˜๋Š” ์šฉ์–ด์ž…๋‹ˆ๋‹ค.
    • ์šฐ์„  ์„œ๋ธ”๋ ›(Servlet)์€ ๊ฐ„๋‹จํžˆ ๋งํ•˜๋ฉด ์ž๋ฐ”์—์„œ ์‹คํ–‰ํ•˜๋Š” ์›น ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.
      • doGet ๋“ฑ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์ง„ํ–‰๋˜๋ฉฐ,
      • out.println(โ€<h1>์ƒˆ๋ฏธ์˜ ๋ธ”๋กœ๊ทธ</h1>โ€) ์˜ ํ˜•ํƒœ๋กœ HTML ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ฐ˜๋ฉด JSP๋Š” HTML ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๊ณ , ์‚ฌ์ด์‚ฌ์ด์— ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ๋„ฃ๋Š” ํ˜•์‹์ž…๋‹ˆ๋‹ค.
      • ๊ธฐ๋ณธ์ ์ธ ์ž‘์„ฑ์ด๋‚˜ ๋ฐฉ์‹์€ html ํŒŒ์ผ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
      • ์Šคํด๋ฆฝํ‹€๋ฆฟ(<% ~ %>) ์„ ํ†ตํ•ด html ํŒŒ์ผ ๋‚ด๋ถ€์— ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
        <h1>์ƒˆ๋ฏธ์˜ ๋ธ”๋กœ๊ทธ</h1>
        
        <%
        	String name = "์ƒˆ๋ฏธ";
        %>
    • ์™œ ๋‘๊ฐœ๋กœ ๋‚˜๋ˆ„์–ด์กŒ์„๊นŒ์š”?
      • ํ˜‘์—…์— ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.
        • ๊ธฐ์กด ์„œ๋ธ”๋ฆฟ์˜ ๊ฒฝ์šฐ Java ์ฝ”๋“œ์—์„œ ์ž‘์„ฑ๋˜๋ฏ€๋กœ, ๋””์ž์ด๋„ˆ๋‚˜ ํผ๋ธ”๋ฆฌ์…”๊ฐ€ HTML ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ์— ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค.
        • JSPํŒŒ์ผ๋กœ ๋‚˜๋ˆ ์งˆ ๊ฒฝ์šฐ, ํผ๋ธ”๋ฆฌ์…”๋Š” JSP ํŒŒ์ผ์—์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๋Š” Back๋‹จ ๋กœ์ง์—๋งŒ ์ง‘์ค‘ ํ•  ์ˆ˜ ์žˆ์–ด ํ˜‘์—…์— ์šฉ์ดํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
      • ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค.
        • Java ์ฝ”๋“œ์—์„œ HTML์„ out.println() ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๊ณผ, HTML ์ฝ”๋“œ ์‚ฌ์ด์— Java ์ฝ”๋“œ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์€ ์ฐจ์ด๊ฐ€ ํฌ๊ฒ ์ฃ ?
        • JSP๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค.
    • ์ด๋ฅผ ํ‘œ๋กœ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
      ํŒŒ์ผ ํ˜•์‹์„ค๋ช…๋ฐฉ๋ฒ•์ค‘์‹œํ•˜๋Š” ๊ฒƒ
      Servlet.java์ž๋ฐ”์—์„œ ์ž‘์„ฑํ•˜๋Š” HTML ์ฝ”๋“œout.println()Login (๋กœ์ง)
      JSP.jspHTML์— ๋„ฃ๋Š” ์ž๋ฐ” ์ฝ”๋“œ<% ~ %>Presentation (๋””์ž์ธ, ํ‘œํ˜„)

    ๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ JSP๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์ฃ ?

    ๊ทธ ์ด์œ ๋Š” JSP Contatiner์— ์˜ํ•ด, JSP๊ฐ€ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

    ๊ทธ๋ฆผ์ด ๋‹ค์†Œ ๐Ÿถย ํŒ์ด์ง€๋งŒ ใ…Žใ…Ž

    ์œ„์˜ ํ๋ฆ„์„ ๋ณด๋ฉด ํŠน์ • ์œ ์ €๊ฐ€ 23log.tistory.com/index ์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋ƒˆ๋‹ค๊ณ  ํ•ฉ์‹œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด JSP ์ปจํ…Œ์ด๋„ˆ๋Š” Controller๊ฐ€ ์ง€์ •ํ•œ ํŒŒ์ผ(index.jsp) ํŒŒ์ผ์„ ์ฐพ์•„ ์ฝ๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

    ์ด๋•Œ index.jsp ํŒŒ์ผ ๋‚ด๋ถ€์— ๋‹ค์–‘ํ•œ if ์กฐ๊ฑด๋ฌธ ์ด๋‚˜ ๋ณ€์ˆ˜ ๋“ค์„ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด? JSP ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ๊ณ„์‚ฐํ•˜๊ฑฐ๋‚˜ ํ• ๋‹นํ•˜์—ฌ ๋‹ค์‹œ ํ•˜๋‚˜์˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๊ณ , ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์„œ๋ธ”๋ฆฟ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    ๋„ค! ๋ฐ”๋กœ java์ฝ”๋“œ๋กœ ์ž‘์„ฑ๋œ javaํŒŒ์ผ์„์š”! ๊ทธ๋Ÿผ ์ด์ œ ํ•ด๋‹น java ํŒŒ์ผ์„ ์ฝ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ž๋ฐ”๋Š” ์ปดํŒŒ์ผํ•œ ๋’ค ์‹คํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

    ์ค‘์š”ํ•œ ํฌ์ธํŠธ๋Š” JSP๋กœ ์ž‘์„ฑ๋œ ํŒŒ์ผ์€, JSP Container์— ์˜ํ•ด ์„œ๋ธ”๋ฆฟ(.java) ํŒŒ์ผ๋กœ ๋ณ€ํ™˜๋˜์–ด ์‹คํ–‰๋œ๋‹ค. ๋Š” ์ ์ž…๋‹ˆ๋‹ค!

    JSP ์ž‘์„ฑ์„ ๋„์™€์ฃผ๋Š” ๋…€์„๋“ค, EL, JSTL์— ๋Œ€ํ•˜์—ฌ

    EL(Expression language)

    • Expression language ๋กœ JSP 2.0๋ถ€ํ„ฐ ์ถ”๊ฐ€๋œ ๊ฐœ๋…
    • ์ž๋ฐ” ๋นˆ์˜ ์†์„ฑ ๊ฐ’์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ๊บผ๋‚ด ์“ธ ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ

    ์ข…๋ฅ˜

    • ${ } : JSP๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์ฆ‰์‹œ ๋ฐ˜์˜๋œ๋‹ค. (Immediate evaluation)
      • ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๊บผ๋‚ผ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ
      #{ }
      • ์‹œ์Šคํ…œ์—์„œ ํ•„์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จ๋  ๋•Œ ๊ทธ ๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค. (Deferred evaluation) ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’์„ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ์— ๋‹ด๋Š” ์šฉ๋„๋กœ ์ฃผ๋กœ ์‚ฌ์šฉ
    • ${๋ณ€์ˆ˜๋ช…}์œผ๋กœ ์„ ์–ธํ•˜์—ฌ, ๋‹ค์–‘ํ•œ ์—ฐ์‚ฐ์ž(์‚ฐ์ˆ , ๋น„๊ต, empty)๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ
      • ${fn:} ๋“ฑ์„ ํ†ตํ•ด ํ•จ์ˆ˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
      • HTML
        • <span>${prod.brndNm}</span> : ํ”„๋ก ํŠธ๋‹จ ๋…ธ์ถœ ์šฉ๋„
      • javascript
        • "${prod.brndNm}"
        • JS์—์„  โ€œโ€ ์•ˆ์— ๋„ฃ์–ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

    ์‚ฌ์šฉ์˜ ์ด์ ?

    • ์›๋ž˜์˜ ๊ฒฝ์šฐ ๋ฆฌํ€˜์ŠคํŠธ์™€ ์„ธ์…˜์•ˆ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ธฐ ์œ„ํ•ด, <% ์Šคํฌ๋ฆฝํ‹€๋ฆฟ %>์•ˆ์—์„œ ๋ฐ›์•„์˜ค๋Š” ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.
      // ์ตœ์ƒ๋‹จ์—์„œ ๊ฐ’์„ ํ• ๋‹นํ•˜๊ณ 
      <%
       ย  ย Student loginMember = (Student) session.getAttribute("student");
       ย  ย Student student = (Student) request.getAttribute("student");
      %>
      
      // ํ•„์š”ํ•  ๋•Œ ๊ฐ์ฒด๋กœ์„œ get๋ฉ”์†Œ๋“œ๋กœ ํ˜ธ์ถœ
      <input type='text' name='age' value='<%=student.getAge()%>' readonly>
      
      // ์Šคํฌ๋ฆฝํ‹€๋ฆฟ์„ ์ด์šฉํ•˜์—ฌ ์ž‘์„ฑํ•จ
      <%
      if(loginMember != null && "admin".equals(loginMember.getStudentNo())) {
      %>
          <p><%=student.getStudentNo()%></p>
      <%
          }
      %>
      • ์ฆ‰, EL์ด ์—†์œผ๋ฉด <% ์Šคํฌ๋ฆฝํ‹€๋ฆฟ %>์œผ๋กœ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ณ , ํ• ๋‹นํ•˜๊ณ  ํ•˜๋Š” ๋“ฑ์˜ ๊ณผ์ •์ด ํ•„์š”ํ•จ
    • EL์ด ๋„์ž…๋˜๋ฉด?
      • ๊ฐ์ฒด ํ• ๋‹น๊ณผ ๊ฐ™์€ ๊ณผ์ • ์—†์ด, ๋ฐ”๋กœ ${student.name} ๋งŒ ์ž‘์„ฑํ•˜์—ฌ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•จ
      • <%%> ๊ฐ์ฒด ํ• ๋‹น ๊ณผ์ •์ด๋‚˜, <%= ๋ณ€์ˆ˜๋ช… %>๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ํ•˜๋‚˜๋กœ ์••์ถ• ํ•  ์ˆ˜ ์žˆ๋‹ค.

    JSTL

    • JSTL (Jsp Standard Tag Library)
    • JSTL = JSTL + EL์˜ ์กฐํ•ฉ์„ ์˜๋ฏธํ•œ๋‹ค.
    • HTML๋‚ด์˜ ์Šคํฌ๋ฆฝํ‹€๋ฆฟ์„ ํŽธํ•˜๊ฒŒ ๋ณ€ํ™˜ํ•˜์—ฌ ์ค€๋‹ค.

      <%= value> โ†’ ${value}

      <%= if> โ†’ <c:if>

      <%= for> โ†’ <c:forEach>

    • JSTL์€ JSPํŽ˜์ด์ง€ ๋‚ด์—์„œ java์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋กœ์ง์„ ๋‚ด์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

    ์‚ฌ์šฉ์˜ ์ด์ ?

    • ์Šคํด๋ฆฝํ‹€๋ฆฟ์œผ๋กœ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด?
      <%
      	if(count > 10){
      %>
      		<h1>ํšŸ์ˆ˜๊ฐ€ ์ดˆ๊ณผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.</h1>
      <%
      	}
      %>
    • ์ด๋ฅผ JSTL๋กœ ํ‘œํ˜„ํ•˜๋ฉด?
      <c:if test="${count > 10}">
      		<h1>ํšŸ์ˆ˜๊ฐ€ ์ดˆ๊ณผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.</h1>
      </c:if>

    ์‚ฌ์šฉ๋ฒ•

    • core๋ฅผ header์— ์ถ”๊ฐ€ํ•œ๋‹ค.
      <% @taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
    • ํ•„์š”ํ•œ JSP ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
      <c:if test=""></c:if>
      <c:forEach items=""></c:forEach>
      ํƒœ๊ทธ๋ช…์„ค๋ช…
      <c:set>๋ณ€์ˆ˜๋ช…์— ๊ฐ’์„ ํ• ๋‹น
      <c:out>๊ฐ’์„ ์ถœ๋ ฅ
      <c:if>์กฐ๊ฑด์‹์— ํ•ด๋‹นํ•˜๋Š” ๋ธ”๋Ÿญ๊ณผ ์‚ฌ์šฉ๋  scope์„ค์ •
      <c:choose>๋‹ค๋ฅธ ์–ธ์–ด์˜ switch์™€ ๋น„์Šท
      <c:when>switch๋ฌธ์˜ case์— ํ•ด๋‹น
      <c:otherwise>switch๋ฌธ์˜ default์— ํ•ด๋‹น
      <c:forEach>๋‹ค๋ฅธ์–ธ์–ด์˜ loop๋ฌธ items ์†์„ฑ์— ๋ฐฐ์—ด์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Œ

    ์ฐธ์กฐ

    ์ตœ์ข… ์ •๋ฆฌ

    ์„ค๋ช…
    JSPHTML์•ˆ์— ์Šคํฌ๋ฆฝํ‹€๋ฆฟ์œผ๋กœ Java ์ฝ”๋“œ๋ฅผ ๋„ฃ์€ ํŒŒ์ผ
    ELJSP์—์„œ ๊ฐ์ฒด์˜ ๊ฐ’์„ ์‰ฝ๊ฒŒ ๋ฝ‘์•„์ฃผ๋Š” ๊ธฐ๋Šฅ
    JSTLJSP์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์Šคํฌ๋ฆฝํ‹€๋ฆฟ์„ ํ•˜๋‚˜์˜ ํƒœ๊ทธ๋กœ ๋ฌถ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    Servlet์ž๋ฐ”๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์›น ์ฝ”๋“œ(.java)
    ๐Ÿ—ฃ
    ๊ณผ๊ฑฐ์— ๊ฐ„๋žตํ•˜๊ฒŒ๋‚˜๋งˆ ์ •๋ฆฌํ–ˆ๋˜ ๋‚ด์šฉ์ด๋ผ, ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์ด๋‚˜ ํ‹€๋ฆฐ ์ •๋ณด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ“๊ธ€๋กœ ๋ง์”€ํ•ด์ฃผ์‹œ๋ฉด ์ˆ˜์ •ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! :D
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

    Designed by JB FACTORY