[JSP] JSP κΈ°λ³Έ 문법

μ§€μ‹œμ–΄


μ§€μ‹œμ–΄λž€?

ν•΄λ‹Ήν•˜λŠ” JSP 파일의 속성을 κΈ°μˆ ν•˜λŠ” 곳으둜 JSP μ»¨ν…Œμ΄λ„ˆμ—κ²Œ ν•΄λ‹Ή νŽ˜μ΄μ§€λ₯Ό μ–΄λ–»κ²Œ μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ”μ§€ μ „λ‹¬ν•˜κΈ° μœ„ν•œ λ‚΄μš©μ„ λ‹΄κ³ μžˆμŒ

 

1. page μ§€μ‹œμ–΄ 

page μ§€μ‹œμ–΄λŠ” ν˜„μž¬μ˜ JSP νŽ˜μ΄μ§€λ₯Ό μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ²˜λ¦¬ν•˜λŠ” 데 ν•„μš”ν•œ 각쒅 속성을 κΈ°μˆ ν•˜λŠ” λΆ€λΆ„μœΌλ‘œ, λŒ€κ°œ μ†ŒμŠ€μ½”λ“œ 맨 μ•žμ—μ„œ λ³Ό 수 μžˆλ‹€.

 

<%@ page 속성1="속성 κ°’" 속성2="속성2 κ°’"..... %> 

 

page μ§€μ‹œμ–΄ 속성 μ€‘μ—μ„œλŠ” ν˜•μ‹ 지정에 ν•„μš”ν•œ contentType, μžλ°” 클래슀 μ‚¬μš©μ— ν•„μš”ν•œ import, 였λ₯˜ νŽ˜μ΄μ§€ 관리에 ν•„μš”ν•œ errorPage, isErrorPage 등을 κ°€μž₯ 많이 μ‚¬μš©ν•œλ‹€. μš°λ¦¬λ‚˜λΌμ—μ„œλŠ” ν•œκΈ€ 처리λ₯Ό μœ„ν•΄ page μ§€μ‹œμ–΄λ₯Ό 주둜 μ‚¬μš©ν•˜κ²Œ λœλ‹€. 

ν•œκΈ€ 처리λ₯Ό μœ„ν•΄ ꢌμž₯λ˜λŠ” 사항은 page μ§€μ‹œμ–΄μ˜ 속성인 pageEncodingκ³Ό contentType 속성을 λͺ¨λ‘ μ‚¬μš©ν•˜λ©΄μ„œ μ μ§„μ μœΌλ‘œ pageEncoding μ€‘μ‹¬μœΌλ‘œ μž‘μ„±ν•˜λŠ” 것이닀. 

 

  • pageEncoding 속성 
pageEncoding은 μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ²˜λ¦¬ν•  JSP 파일의 인코딩을 μ„€μ •ν•œλ‹€. 기본적으둜 pageEncoding을 μ‚¬μš©ν•˜κ³ , ν΄λΌμ΄μ–ΈνŠΈ 응닡 κ²°κ³Όλ₯Ό ν™•μΈν•˜κΈ° μœ„ν•΄ contentType을 λ³‘ν–‰ν•΄μ„œ μ‚¬μš©ν•˜λ„λ‘ ν•œλ‹€.
  • contentType 속성 
ν˜„μž¬ JSP νŽ˜μ΄μ§€λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ μ½˜ν…μΈ  μœ ν˜•μ„ μ§€μ •ν•˜λŠ” 뢀뢄이닀. μ›Ή λΈŒλΌμš°μ €μ—μ„œ contentType에 따라 μ „λ‹¬λ˜λŠ” λ‚΄μš©μ„ μ–΄λ–»κ²Œ μ²˜λ¦¬ν• μ§€ κ²°μ •ν•  수 μžˆλ‹€.

 

2. include μ§€μ‹œμ–΄ 

include μ§€μ‹œμ–΄λŠ” ν˜„μž¬ JSP νŒŒμΌμ— λ‹€λ₯Έ HTMLμ΄λ‚˜ JSP λ¬Έμ„œλ₯Ό ν¬ν•¨ν•˜κΈ° μœ„ν•œ κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€. include μ§€μ‹œμ–΄λŠ” JSP νŒŒμΌμ„ 컴파일 ν•˜κΈ°μ „μ— λͺ¨λ‘ ν¬ν•¨μ‹œν‚¨ λ’€ ν•˜λ‚˜μ˜ 클래슀 파일둜 컴파일 μ‹œν‚¨λ‹€.

 

<%@ include file="포함할 파일 이름" %> 

 

include μ§€μ‹œμ–΄λ₯Ό μ‚¬μš©ν•˜λ©΄ ν•˜λ‚˜μ˜ νŽ˜μ΄μ§€ λ‚΄μ—μ„œ 각각의 블둝듀이 λ³„λ„μ˜ κΈ°λŠ₯을 λ…λ¦½μ μœΌλ‘œ μˆ˜ν–‰ν•  수 μžˆλ‹€. λ§Œμ•½ ν•˜λ‚˜μ˜ 메인 νŽ˜μ΄μ§€λ₯Ό JSP 파일 ν•˜λ‚˜λ‘œ κ΅¬μ„±ν•œλ‹€λ©΄, νŽ˜μ΄μ§€κ°€ λ³΅μž‘ν•΄μ§€κ³  각 λΆ€λΆ„μ˜ κΈ°λŠ₯듀이 λΆ„λ¦¬λ˜μ§€ μ•Šμ•„ κ°œμ„ ν•˜κ±°λ‚˜ μž¬ν™œμš©ν•˜κΈ°μ— ꡉμž₯히 λΆˆνŽΈν•΄μ§ˆ 수 μžˆλ‹€. λ³„λ„μ˜ νŒŒμΌλ“€μ„ λ§Œλ“œλŠ” 것은 λ²ˆκ±°λ‘­μ§€λ§Œ ν•œλ²ˆ λ§Œλ“€μ–΄λ‘λ©΄ λ‹€μ–‘ν•œ νŽ˜μ΄μ§€μ—μ„œ μž¬ν™œμš©ν•  수 μžˆλ‹€.

 

3. taglib μ§€μ‹œμ–΄ 

taglib μ§€μ‹œμ–΄λŠ” JSP κΈ°λŠ₯을 ν™•μž₯ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ§„ μ»€μŠ€ν…€ νƒœκ·Έ 라이브러리λ₯Ό JSP νŒŒμΌμ—μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•œ μ§€μ‹œμ–΄μ΄λ‹€. 

 

<%@ taglib uri="/META-INF/mytag.tld" prefix="mytag" %> 

 

taglib은 uri, prefix μ†μ„±μœΌλ‘œ 이루어진닀. uriλŠ” TLD νŒŒμΌμ„ μ§€μ •ν•˜λŠ” 데 μ‚¬μš©ν•œλ‹€. TLD νŒŒμΌμ€ μ»€μŠ€ν…€ νƒœκ·Έμ˜ ꡬ쑰λ₯Ό μ •μ˜ν•œ 파일둜 XML ν˜•μ‹μœΌλ‘œ 미리 λ§Œλ“€μ–΄μ Έ μžˆμ–΄μ•Ό ν•œλ‹€. λ˜ν•œ TLD νŒŒμΌμ—μ„œλŠ” μ»€μŠ€ν…€ νƒœκ·Έμ˜ μ‹€μ œμ μΈ κ΅¬ν˜„μ„ μœ„ν•œ μžλ°” 클래슀 νŒŒμΌμ„ 지정해야 ν•œλ‹€. λ‹€μŒμœΌλ‘œ prefixλŠ” ν˜„μž¬ JSP νŒŒμΌμ—μ„œ μ»€μŠ€ν…€ νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•œ μ΄λ¦„μœΌλ‘œ μΌμ’…μ˜ λ³€μˆ˜λͺ… 역할을 ν•œλ‹€.

 

<mytag:GetInfo name="user1"/>

 

mytag.tld νŒŒμΌμ— μ •μ˜λœ νƒœκ·Έμ€‘ GetInfo νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜λŠ” 것이며, name 속성에 "user1" 값을 μ „λ‹¬ν•˜λŠ” λ‚΄μš©μ΄λ‹€. μ—¬κΈ°μ„œ mytagλŠ” μœ„μ— prefixμ—μ„œ μ„ μ–Έλœ λ‚΄μš©μ΄λ‹€. 이와같은 νƒœκ·Έ λΌμ΄λΈŒλŸ¬λ¦¬λŠ” λ³΅μž‘ν•˜κ³  λ°˜λ³΅λ˜λŠ” μž‘μ—…μ„ κ°„λ‹¨ν•œ νƒœκ·Έ ν˜•νƒœλ‘œ λ§Œλ“€μ–΄ 파일 κ΅¬μ„±μ˜ 일관성을 μœ μ§€ν•˜λ©° μœ μ§€λ³΄μˆ˜μ˜ νš¨μœ¨μ„±μ„ λ†’μ΄λ €λŠ” λͺ©μ μœΌλ‘œ 널리 μ‚¬μš©λœλ‹€. 

μ•‘μ…˜


μ•‘μ…˜μ€ JSP μ£Όμš” κ΅¬μ„±μš”μ†Œ 쀑 ν•˜λ‚˜λ‘œ λ‹€μŒκ³Ό 같은 κΈ°λŠ₯을 μ§€μ›ν•œλ‹€. 

 

(1) JSP νŽ˜μ΄μ§€ κ°„ 흐름 μ œμ–΄

(2) μžλ°” μ• ν”Œλ¦Ώ 지원

(3) μžλ°” 빈즈 μ»΄ν¬λ„ŒνŠΈμ™€ JSP μƒν˜Έμž‘μš© 지원 

 

JSP μ•‘μ…˜μ€ XML ν˜•νƒœμ˜ νƒœκ·Έλ§Œ 뢙일 수 있으며, 기본적으둜 <jsp:action_name attribute="value"/> ν˜•νƒœλ₯Ό μ·¨ν•œλ‹€. 

 

1. include μ•‘μ…˜ 

include μ•‘μ…˜μ€ λ‹€λ₯Έ νŒŒμΌμ„ λΆˆλŸ¬μ˜¨λ‹€λŠ” μΈ‘λ©΄μ—μ„œ include μ§€μ‹œμ–΄μ™€ μœ μ‚¬ν•˜λ‹€. ν•˜μ§€λ§Œ include μ§€μ‹œμ–΄λŠ” ν•΄λ‹Ή νŒŒμΌμ„ ν¬ν•¨μ‹œν‚¨ ν›„ μ»΄νŒŒμΌν•˜λŠ” 것에 λΉ„ν•΄, include μ•‘μ…˜μ€ μ‹€ν–‰μ‹œμ μ—μ„œ ν•΄λ‹Ή νŒŒμΌμ„ ν˜ΈμΆœν•˜μ—¬ κ·Έ κ²°κ³Όλ₯Ό ν¬ν•¨ν•œλ‹€λŠ” μ μ—μ„œ 차이가 μžˆλ‹€. include μ•‘μ…˜μ€ ν¬ν•¨λœ νŒŒμΌλ“€μ„ 각각 ν•Έλ“€λ§ν•˜κΈ° λ•Œλ¬Έμ— μ„±λŠ₯μƒμ˜ 문제λ₯Ό μ•ΌκΈ°ν•  수 μžˆμœΌλ―€λ‘œ μ μ ˆν•˜κ²Œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. μ •λ¦¬ν•˜λ©΄ include μ•‘μ…˜μ€ 동적인 νŽ˜μ΄μ§€, include μ§€μ‹œμ–΄λŠ” 정적인 νŽ˜μ΄μ§€λ₯Ό ν¬ν•¨μ‹œν‚¬ κ²½μš°μ— μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.

 

<jsp:include page="포함할 νŒŒμΌμ΄λ¦„" /> 

 

include μ•‘μ…˜μ˜ νŠΉμ§• 쀑 ν•˜λ‚˜λŠ” λ³€μˆ˜λ₯Ό 전달할 수 μžˆλ‹€λŠ” 점이닀. include μ•‘μ…˜μ—μ„œ JSP νŒŒμΌμ„ ν¬ν•¨ν•˜κ±°λ‚˜ ν• λ•Œ param νƒœκ·Έλ₯Ό μ΄μš©ν•˜μ—¬ 속성 값을 전달할 수 μžˆλ‹€. μ „λ‹¬λœ λ§€κ°œλ³€μˆ˜ 값은 request.getParameter() λ©”μ„œλ“œλ₯Ό 톡해 μ ‘κ·Όν•  수 μžˆλ‹€.

 

2. forward μ•‘μ…˜ 

forward μ•‘μ…˜μ€ include μ•‘μ…˜κ³Ό μœ μ‚¬ν•˜μ§€λ§Œ ν˜„μž¬ νŽ˜μ΄μ§€λ₯Ό μ™„μ „νžˆ λ‹€λ₯Έ νŽ˜μ΄μ§€λ‘œ μ „ν™˜ν•  λ•Œ μ‚¬μš©ν•œλ‹€. 즉, include μ•‘μ…˜μ€ 메인 μ‹€ν–‰ 파일이 λ‹€λ₯Έ 처리λ₯Ό ν¬ν•¨ν•˜λŠ” κ°œλ…μ΄μ§€λ§Œ forward μ•‘μ…˜μ€ νŽ˜μ΄μ§€ μ œμ–΄κΆŒμ„ μ™„μ „νžˆ λ„˜κ²¨λ²„λ¦°λ‹€.

 

<jsp:forward page="ν¬μ›Œλ”©ν•  파일_이름"/> 

 

forward μ•‘μ…˜ λ˜ν•œ include μ•‘μ…˜μ²˜λŸΌ param을 μ΄μš©ν•˜μ—¬ 값을 전달할 수 μžˆλ‹€.

 

<jsp:param name="email" value="servers1@naver.com"/> 

3. plugin μ•‘μ…˜ 

plugin μ•‘μ…˜μ€ μ›Ή λΈŒλΌμš°μ €μ—μ„œ μžλ°” ν”ŒλŸ¬κ·ΈμΈμ„ μ‚¬μš©ν•˜μ—¬ μžλ°” μ• ν”Œλ¦Ώμ΄λ‚˜ μžλ°” 빈즈 μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‹€ν–‰ν•  수 있게 ν•œλ‹€. μ΄λŠ” μ›Ή λΈŒλΌμš°μ € λŒ€λΆ€λΆ„μ΄ μžλ°”λ₯Ό ν”ŒλŸ¬κ·ΈμΈ ν˜•νƒœλ‘œ μ§€μ›ν•˜λ―€λ‘œ λΈŒλΌμš°μ €μ— λ‚΄μž₯된 JVMμœΌλ‘œλŠ” μŠ€μœ™ μ• ν”Œλ¦Ώμ„ μ‹€ν–‰ν•  수 μ—†λŠ” 점을 λ³΄μ™„ν•˜λ €κ³  λ‚˜μ˜¨ κ°œλ…μ΄λ‹€.

 

useBean μ•‘μ…˜ 

 

<jsp:useBean id="λ³€μˆ˜_이름" class="빈즈 클래슀_이름"/>
<jsp:setProperty name="λ³€μˆ˜_이름" property="속성_이름"/>
<jsp:getProperty name="λ³€μˆ˜_이름" property="속성_이름"/>

 

useBean μ•‘μ…˜μ€ 빈즈 클래슀λ₯Ό μ‚¬μš©ν•˜κ² λ‹€λŠ” 것이고, getPropertyλŠ” λΉˆμ¦ˆμ—μ„œ 값을 κ°€μ Έμ˜¬ λ•Œ μ‚¬μš©ν•˜λ©°, setPropertyλŠ” JSPμ—μ„œ 빈즈 객체에 값을 μ„€μ •ν•  λ•Œ μ‚¬μš©ν•œλ‹€. setProperty와 getPropertyλŠ” 빈즈 클래슀의 getter λ©”μ„œλ“œλ₯Ό λ‚΄λΆ€μ μœΌλ‘œ ν˜ΈμΆœν•œλ‹€.

 

μ„ μ–Έ,ν‘œν˜„μ‹ 그리고 슀크립트릿


1. μ„ μ–Έ

선언문을 μ‚¬μš©ν•˜λ©΄ JSPμ—μ„œ λ©”μ„œλ“œλ‚˜ λ©€λ²„λ³€μˆ˜λ₯Ό μ„ μ–Έν•  수 μžˆμœΌλ―€λ‘œ ν”„λ‘œκ·Έλž¨ μš”μ†Œλ₯Ό κ΅¬ν˜„ν•˜κΈ°μ— μˆ˜μ›”ν•˜λ‹€. ν•˜μ§€λ§Œ λ³„λ„μ˜ 빈즈 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹κΈ° λ•Œλ¬Έμ— 선언문을 ꢌμž₯ν•˜μ§€ μ•ŠλŠ”λ‹€.

 

<%! String str = "test"; %>

 

2. ν‘œν˜„μ‹ 

<%= %>λ₯Ό μ‚¬μš©ν•΄μ„œ κ°„λ‹¨ν•œ 데이터 좜λ ₯μ΄λ‚˜ λ©”μ„œλ“œ 호좜 등에 μ΄μš©ν•œλ‹€. μ½”λ“œ λ§ˆμ§€λ§‰μ— 세미클둠은 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€. ν‘œν˜„μ‹μ€ 결ꡭ에 out.println()으둜 λ³€ν™˜λ˜λŠ” 것과 λ§ˆμ°¬κ°€μ§€μ΄λ―€λ‘œ, μ•ˆμ— ꡬ문은 out.println()와 같은 ν˜•νƒœλ‘œ μœ μ§€ν•΄μ•Ό ν•œλ‹€.

 

<%= "i+2=" +(i+2) %> 

 

3. 슀크립트릿 

μŠ€ν¬λ¦½νŠΈλ¦Ώμ€ JSP λ¬Έμ„œ 내에 μžλ°” μ½”λ“œλ₯Ό κΈ°μˆ ν•˜λŠ” 뢀뢄이며 λ³Έλ¬Έ μ–΄λŠ κ³³μ—μ„œλ„ 자유둭게 μ‚¬μš©ν•  수 μžˆλ‹€. ν•΄λ‹Ή κΈ°λŠ₯은 JSP의 κ°€μž₯ νŠΉμ§•μ μΈ 뢀뢄이며 JSPλ₯Ό κ°•λ ₯ν•˜κ²Œ λ§Œλ“œλŠ” 원동λ ₯이닀. ν•˜μ§€λ§Œ JSP 내에 가급적 μŠ€ν¬λ¦½νŠΈλ¦Ώμ„ μ‚¬μš©ν•˜μ§€ 말 것을 ꢌμž₯ν•œλ‹€. κ·Έ μ΄μœ λŠ” JSP 내에 λ³΅μž‘ν•œ 둜직이 λ“€μ–΄κ°€κ²Œ 되면 μœ μ§€λ³΄μˆ˜κ°€ μ–΄λ €μ›Œμ§€κ³ , ν˜‘μ—…μ— 어렀움이 λ”°λ₯΄κΈ° λ•Œλ¬Έμ΄λ‹€.

 

JSPμ—μ„œ μŠ€ν¬λ¦½νŠΈλ¦Ώμ„ λͺ°μ•„λ‚΄κΈ° μœ„ν•΄μ„œ EL(ν‘œν˜„ μ–Έμ–΄), JSTL을 λΉ„λ‘―ν•œ μ»€μŠ€ν…€ νƒœκ·Έ 라이브러리, JSP 빈즈 μ‚¬μš©μ„ ꢌμž₯ν•œλ‹€.

 

<% 

     String str = "test"; 

     for(int i=0; i<10; i++) {

         out.println(i);

     }

%>

 

μ£Όμ˜ν•  점은 슀트립트릿 λΆ€λΆ„μ—λŠ” 순수 μžλ°” μ½”λ“œλ§Œ 올 수 μžˆλ‹€. 즉, HTML 좜λ ₯을 μœ„ν•΄μ„œλŠ” out 객체λ₯Ό μ΄μš©ν•œ println λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄μ•Ό ν•œλ‹€.