[JSP] λ‚΄μž₯객체

λ‚΄μž₯κ°μ²΄λž€ λ¬΄μ—‡μΌκΉŒ?


"JSP λ‚΄μ—μ„œ μ„ μ–Έν•˜μ§€ μ•Šκ³  μ‚¬μš©ν•  수 μžˆλŠ” 객체"

 

λ‹€μ‹œ ν’€μ–΄μ„œ μ„€λͺ…ν•˜μžλ©΄ JSPκ°€ μ„œλΈ”λ¦Ώ ν˜•νƒœλ‘œ μžλ™ λ³€ν™˜λœ μ½”λ“œ 내에 μžλ™μœΌλ‘œ ν¬ν•¨λ˜μ–΄ μžˆλŠ” λ©€λ²„λ³€μˆ˜, λ©”μ„œλ“œ λ§€κ°œλ³€μˆ˜ λ“±μ˜ 각쒅 μ°Έμ‘° λ³€μˆ˜λ“€μ„ λ§ν•œλ‹€. 보톡 슀크립트릿 λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•˜λ©° λ‚΄μž₯객체λ₯Ό ν†΅ν•˜λ©΄ μ‚¬μš©μž μš”μ²­μ„ μ»¨νŠΈλ‘€ν•˜κ±°λ‚˜ νŽ˜μ΄μ§€ κ°„μ˜ 데이터λ₯Ό μ†μ‰½κ²Œ κ³΅μœ ν•  수 μžˆλ‹€.

 

λ‚΄μž₯객체듀은 νŠΉμ • ν΄λž˜μŠ€μ— λŒ€ν•œ μΈμŠ€ν„΄μŠ€ ν˜•νƒœλ‘œμ„œ, μ»¨ν…Œμ΄λ„ˆλ₯Ό ν†΅ν•΄μ„œ μ΄ˆκΈ°ν™”λ˜κ³  λ‹€μ–‘ν•œ κΈ°λŠ₯κ³Ό 정보듀을 μ œκ³΅ν•œλ‹€.

 

  • μ–΄λ–»κ²Œ μ„ μ–Έν•˜μ§€ μ•Šκ³  μ‚¬μš©ν•  수 μžˆλŠ” κ²ƒμΌκΉŒ?
μž‘μ„±λœ JSP μ½”λ“œλŠ” μ„œλΈ”λ¦ΏμœΌλ‘œ λ³€ν™˜λœ ν›„ λͺ¨λ‘ _jspService() λ©”μ„œλ“œ μ•ˆμœΌλ‘œ λ“€μ–΄κ°€κΈ° λ•Œλ¬Έμ— λ©”μ„œλ“œ λ§€κ°œλ³€μˆ˜μΈ request, response와 μ§€μ—­λ³€μˆ˜λ‘œ μ„ μ–Έλœ pageContext, application, page, config, out 등은 λͺ¨λ‘ λ‚΄μž₯객체가 λœλ‹€. ν•΄λ‹Ή λ‚΄μž₯객체듀은 _jspService λ©”μ„œλ“œ λΆ€λΆ„μ—μ„œ μ‚¬μš©μžκ°€ μž‘μ„±λœ μ½”λ“œ μœ„μ— μžλ™μœΌλ‘œ μ„ μ–Έλ˜κ³  μ΄ˆκΈ°ν™” 되기 λ•Œλ¬Έμ— JSP νŒŒμΌμ—μ„œ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  λ•Œ λ‚΄μž₯객체λ₯Ό λ³„λ„μ˜ μ„ μ–Έ 없이 μ‚¬μš©ν•  수 μžˆλŠ” 것이닀.

 

λ‚΄μž₯ 객체의 μ’…λ₯˜μ™€ κΈ°λŠ₯


request 

"μ‚¬μš©μž μš”μ²­κ³Ό κ΄€λ ¨λœ κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” λ‚΄μž₯객체" 

 

주둜 ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ„œλ²„λ‘œ μ „λ‹¬λ˜λŠ” 정보λ₯Ό μ²˜λ¦¬ν•˜λ €κ³  μ‚¬μš©ν•œλ‹€. κ°€μž₯ λŒ€ν‘œμ μΈ μœ ν˜•μ€ HTML 폼을 톡해 μž…λ ₯된 값을 JSPμ—μ„œ κ°€μ Έμ˜¬ λ•Œ μ‚¬μš©ν•˜λŠ” 것이닀. request의 μ›λž˜ ν΄λž˜μŠ€λŠ” javax.servlet.http.HttpServletRequest이닀.

 

getParameterNames() ν˜„μž¬ μš”μ²­μ— ν¬ν•¨λœ λ§€κ°œλ³€μˆ˜μ˜ 이름을 μ—΄κ±° ν˜•νƒœλ‘œ 리턴
getParameter(name) λ¬Έμžμ—΄ name에 맀칭된 valueλ₯Ό 리턴
getParamterValues(name) λ¬Έμžμ—΄ name에 맀칭된 valueλ₯Ό λ°°μ—΄ ν˜•νƒœλ‘œ κ°€μ Έμ˜΄
getCookies() λͺ¨λ“  μΏ ν‚€ 값을 javax.servlet.http.Cookie의 λ°°μ—΄ ν˜•νƒœλ‘œ 리턴
getRemoteAddr() ν΄λΌμ΄μ–ΈνŠΈμ˜ IP μ£Όμ†Œλ₯Ό λ¦¬ν„΄ν•œλ‹€.
setCharacterEncoding() ν˜„μž¬ JSP둜 μ „λ‹¬λ˜λŠ” λ‚΄μš©μ„ μ§€μ •ν•œ μΊλ¦­ν„°μ…‹μœΌλ‘œ λ³€ν™˜ν•΄μ€€λ‹€. HTML νΌμ—μ„œ ν•œκΈ€ μž…λ ₯을 μ •μƒμ μœΌλ‘œ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ ν•„μˆ˜

 

  • μΏ ν‚€
μΏ ν‚€λŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ 연결이 μœ μ§€λ˜μ§€ μ•ŠλŠ” μ›Ή ν”„λ‘œκ·Έλž¨μ˜ λ¬Έμ œμ μ„ λ³΄μ™„ν•˜λ €κ³  ν΄λΌμ΄μ–ΈνŠΈμ— κ°„λ‹¨ν•œ 데이터λ₯Ό μ €μž₯ν•˜κ³  μžˆλ‹€κ°€ μ„œλ²„μ—μ„œ μš”μ²­μ΄ 였면 이λ₯Ό λΈŒλΌμš°μ €κ°€ μ œκ³΅ν•˜λŠ” κΈ°μˆ μ΄λ‹€. μ΅œκ·Όμ—λŠ” λ³΄μ•ˆμƒμ˜ 문제둜 잘 μ΄μš©λ˜μ§€ μ•Šμ§€λ§Œ μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ˜ 이전 μ‚¬μš© 기둝 등을 μœ μ§€ν•˜κΈ° μœ„ν•œ μˆ˜λ‹¨μœΌλ‘œλŠ” 아직 μœ μš©ν•˜λ‹€.

 

response

"μ‚¬μš©μž 응닡과 κ΄€λ ¨λœ κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” λ‚΄μž₯객체" 

 

μ‚¬μš©μž μš”μ²­(request)λ₯Ό μ²˜λ¦¬ν•˜κ³  응닡을 λ‹€λ₯Έ νŽ˜μ΄μ§€λ‘œ μ „λ‹¬ν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€. javax.servlet.http.HttpServletResponse 객체에 λŒ€ν•œ μ°Έμ‘° λ³€μˆ˜λ‘œ, request에 λΉ„ν•΄ μ‚¬μš©λ˜λŠ” λ©”μ„œλ“œλŠ” μ μ§€λ§Œ setContentType, sendRedirect와 같은 λ©”μ„œλ“œλŠ” 잘 μ•Œμ•„λ‘μ–΄μ•Ό ν•œλ‹€.

 

setContentType(type) λ¬Έμžμ—΄ ν˜•νƒœμ˜ type에 μ§–μ–΄λœ MIME Type으둜 contentType을 μ„€μ •ν•œλ‹€.
sendRedirect ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ„ λ‹€λ₯Έ νŽ˜μ΄μ§€λ‘œ 보낸닀.

 

  • setContentType() 
ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜κ²Œ 되면 page μ§€μ‹œμ–΄μ—μ„œ contentType을 μ΄μš©ν•΄ μ§€μ •λœ MIME Type을 λ¬΄μ‹œν•˜κ³  μƒˆλ‘œμš΄ MIME Type이 ν—€λ”λ‘œ μ „λ‹¬λœλ‹€. 

 

  • sendRedirect vs forward
결과만 보면 forward μ•‘μ…˜κ³Ό 거의 μœ μ‚¬ν•˜μ§€λ§Œ sendRedirectλŠ” μƒˆλ‘œμš΄ νŽ˜μ΄μ§€λ₯Ό μœ„ν•œ request, response 객체가 μƒˆλ‘œ μƒμ„±λ˜λ©° forward μ•‘μ…˜μ˜ κ²½μš°μ—λŠ” μ›λž˜ μš”μ²­μ— ν¬ν•¨λœ request와 response 객체가 ν¬ν•¨λ˜μ–΄ κ·ΈλŒ€λ‘œ μ „λ‹¬λœλ‹€. 즉, a->b->c μ΄λŸ°μ‹μœΌλ‘œ μš”μ²­μ΄ μ§„ν–‰λœλ‹€ ν•  λ•Œ, forward μ•‘μ…˜μ„ μ‚¬μš©ν•˜λ©΄ aμ—μ„œ μ „λ‹¬λœ request 객체가 cκΉŒμ§€ 전달이 λ˜μ§€λ§Œ, sendRedirect λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ bμ—μ„œ c둜 λ„˜μ–΄κ°ˆ λ•Œ μƒˆλ‘œμš΄ request, response 객체가 μƒμ„±λ˜μ–΄ 값이 μ „λ‹¬λ˜μ§€ μ•ŠλŠ”λ‹€.

 

out

"out은 좜λ ₯ 슀트림으둜써, μ‚¬μš©μž μ›Ή λΈŒλΌμš°μ €λ‘œ 좜λ ₯ν•˜κΈ° μœ„ν•œ 채널이닀."

 

μŠ€νŠΈλ¦½νŠΈλ¦Ώμ—μ„œ λΈŒλΌμš°μ €λ‘œ ν…μŠ€νŠΈ 좜λ ₯ν•˜λŠ” 데 μ‚¬μš©ν•˜λ©°, out은 javax.servlet.jsp.JspWriter 객체의 μ°Έμ‘° λ³€μˆ˜λ‘œ, 버퍼 κ΄€λ ¨ λ©”μ„œλ“œμ™€ 좜λ ₯ κ΄€λ ¨ λ©”μ„œλ“œλ‘œ κ΅¬μ„±λ˜λ©° out을 μ΄μš©ν•΄μ„œ 좜λ ₯된 λ‚΄μš©μ€ μ„œλ²„μ˜ μ½˜μ†”μ΄ μ•„λ‹Œ μ‚¬μš©μžμ—κ²Œ μ „λ‹¬λœλ‹€.

 

getBufferSize() output buffer의 크기λ₯Ό λ°”μ΄νŠΈλ‘œ μ•Œλ €μ€€λ‹€.
getRemaining() 남아 μžˆλŠ” λ²„νΌμ˜ 크기 쀑 μ‚¬μš© κ°€λŠ₯ν•œ λΉ„μœ¨μ„ μ•Œλ €μ€€λ‹€.
clearBuffer() 버퍼에 μžˆλŠ” μ½˜ν…μΈ λ₯Ό λͺ¨λ‘ μ§€μš΄λ‹€.
flush() 버퍼λ₯Ό μ§€μš°κ³  output stream도 λΉ„μš΄λ‹€.
close() output stream을 λ‹«κ³  버퍼λ₯Ό λΉ„μš΄λ‹€.
println(content) content의 λ‚΄μš©μ„ newlineκ³Ό ν•¨κ»˜ 좜λ ₯ν•œλ‹€.
print(content) content의 λ‚΄μš©μ„ 좜λ ₯ν•œλ‹€.

 

μ—¬κΈ°μ„œ 버퍼λ₯Ό λΉ„μš΄λ‹€λŠ” 것은, 버퍼 λ‚΄μš©μ„ output stream을 톡해 μ „λ‹¬ν•˜κ³  λ²„νΌμ˜ λ‚΄μš©μ„ μ§€μš΄λ‹€λŠ” μ˜λ―Έμ΄λ‹€.

 

session

"HTTP ν”„λ‘œν† μ½œμ΄ λΉ„μ—°κ²°ν˜• ν”„λ‘œν† μ½œμ΄λΌλŠ” 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ“±μž₯ν•œ session!"

 

HTTP ν”„λ‘œν† μ½œμ€ ν•œ νŽ˜μ΄μ§€κ°€ 좜λ ₯된 λ‹€μŒμ—λŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„μ˜ 연결이 λŠμ–΄μ§„λ‹€. λ”°λΌμ„œ μ‚¬μš©μžκ°€ νŠΉμ • 행동을 ν•  λ•Œ κΉŒμ§€ 보관해야 ν•  정보가 μžˆλ‹€λ©΄ μ²˜λ¦¬κ°€ 맀우 κ³€λž€ν•΄μ§„λ‹€. μ΄λŸ¬ν•œ λ¬Έμ œμ μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ“±μž₯ν•œ 것이 μ„Έμ…˜κ³Ό 쿠킀이닀. μΏ ν‚€λŠ” μ‚¬μš©μžμ™€ κ΄€λ ¨λœ 정보λ₯Ό PC에 μ €μž₯ν•˜κ³ , μ„Έμ…˜μ€ μ„œλ²„μ— λ³΄κ΄€ν•˜λŠ” 방식인데, μ„Έμ…˜μ΄ 쿠킀보닀 λ³΄μ•ˆ λ¬Έμ œμ— μœ λ¦¬ν•˜κ³  μ œμ•½μ‚¬ν•­μ΄ 적은 νŽΈμ΄λΌμ„œ μ΅œκ·Όμ—λŠ” λŒ€λΆ€λΆ„ μ„Έμ…˜μ„ μ‚¬μš©ν•œλ‹€.

 

getId() μ„Έμ…˜ 고유의 IDλ₯Ό λ¬Έμžμ—΄ ν˜•νƒœλ‘œ 리턴
getCreatingTime() μ„Έμ…˜ 생성 μ‹œκ°„μ„ January 1. 1970 GMT λΆ€ν„° long ν˜• λ°€λ¦¬μ„Έμ»¨λ“œ κ°’μœΌλ‘œ λ°˜ν™˜
getLastAccessedTime() ν˜„μž¬ μ„Έμ…˜μœΌλ‘œ λ§ˆμ§€λ§‰ μž‘μ—…ν•œ μ‹œκ°„μ„ ongν˜• λ°€λ¦¬μ„Έμ»¨λ“œ κ°’μœΌλ‘œ λ°˜ν™˜
getMaxInactiveInterval() μ„Έμ…˜μ˜ μœ μ§€μ‹œκ°„μ„ 초둜 λ°˜ν™˜ 
setMaxInactiveInterval(t) μ„Έμ…˜μ˜ 유효 μ‹œκ°„μ„ t에 μ„€μ •λœ 초 κ°’μœΌλ‘œ μ„€μ •
invalidate() μ„Έμ…˜ μ’…λ£Œ
getAttribute(attr) λ¬Έμžμ—΄ attr둜 μ„€μ •λœ μ„Έμ…˜ 값을 Object ν˜•νƒœλ‘œ κ°€μ Έμ˜΄
setAttribute(name, attr) λ¬Έμžμ—΄ name으둜 Object attr을 μ €μž₯

 

config

μ„œλΈ”λ¦Ώμ΄ 졜초둜 λ©”λͺ¨λ¦¬μ— 적재될 λ•Œ μ»¨ν…Œμ΄λ„ˆλŠ” μ„œλΈ”λ¦Ώ μ΄ˆκΈ°ν™”μ™€ κ΄€λ ¨λœ 정보λ₯Ό 읽고 javax.servlet.ServletConfig 객체에 μ €μž₯ν•œλ‹€. μ›Ή μ—ν”Œλ¦¬μΌ€μ΄μ…˜ ν•˜λ‚˜μ—λŠ” μ„œλΈ”λ¦Ώ, JSP, 빈즈 클래슀 등이 μ—¬λŸ¬ 개둜 κ΅¬μ„±λ˜λŠ”λ° config λ‚΄μž₯κ°μ²΄λŠ” μ„œλ‘œ 독립적인 파일둜 κ΅¬μ„±λœ JSPλ‚˜ μ„œλΈ”λ¦Ώλ“€μ΄ μ„œλ‘œ λ‹€λ₯Έ μ‹œμ μ— μž„μ˜μ˜ 정보λ₯Ό μ„œλ‘œ κ΅ν™˜ν•  수 μžˆλŠ” 기법 쀑 ν•˜λ‚˜λ‘œ ν™œμš©ν•  수 μžˆλ‹€.

 

기본적으둜 web.xml νŒŒμΌμ— μ΄ˆκΈ°ν™” 값을 등둝해놓고 JSPμ—μ„œ ν•„μš”ν•œ 경우 config λ‚΄μž₯객체λ₯Ό μ΄μš©ν•΄ μ°Έμ‘°ν•˜λŠ” 방법이 μžˆλ‹€.

 

getInitParameterNames() 초기 λ§€κ°œλ³€μˆ˜ κ°’λ“€μ˜ μ„€μ • 이름을 μ—΄κ±° 객체둜 λ°˜ν™˜
getInitParameter(name) λ¬Έμžμ—΄ name에 ν•΄λ‹Ήν•˜λŠ” μ΄ˆκΈ°ν™” λ§€κ°œλ³€μˆ˜ κ°’ λ°˜ν™˜

application

application은 μ›Ή μ—ν”Œλ¦¬μΌ€μ΄μ…˜ 전체λ₯Ό κ΄€λ¦¬ν•˜λŠ” 객체이닀. application 객체λ₯Ό 톡해 각 μ„œλΈ”λ¦Ώμ΄λ‚˜ JSPμ—μ„œ κ³΅μœ ν•˜λ €κ³  ν•˜λŠ” 각쒅 정보λ₯Ό μ„€μ •ν•˜κ³  μ°Έμ‘°ν•  수 μžˆλ‹€. 

 

application은 javax.servlet.ServletContext 객체에 λŒ€ν•œ μ°Έμ‘° λ³€μˆ˜λ‘œμ„œ, config 객체λ₯Ό 톡해 μƒμ„±ν•œλ‹€. ServletContext κ°μ²΄λŠ” μ»¨ν…Œμ΄λ„ˆμ™€ κ΄€λ ¨λœ μ—¬λŸ¬ 정보λ₯Ό μ œκ³΅ν•˜λ©°, application μ°Έμ‘° λ³€μˆ˜λ₯Ό ν†΅ν•΄μ„œ μ„œλΈ”λ¦Ώμ΄ μ‹€ν–‰λ˜λŠ” ν™˜κ²½, μ„œλ²„ μžμ›κ³Ό κ΄€λ ¨λœ 정보λ₯Ό μ–»κ±°λ‚˜ 둜그 νŒŒμΌμ„ κΈ°λ‘ν•˜λŠ” μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€.

 

log(message) λ¬Έμžμ—΄ message의 λ‚΄μš©μ„ 둜그 νŒŒμΌμ— κΈ°λ‘ν•œλ‹€.
log(message, exception) μ˜ˆμ™Έ 상황에 λŒ€ν•œ 정보λ₯Ό ν¬ν•¨ν•˜μ—¬ 둜그 νŒŒμΌμ— κΈ°λ‘ν•œλ‹€.
getAttribute(String name) λ¬Έμžμ—΄ name에 ν•΄λ‹Ήν•˜λŠ” 속성 값이 μžˆλ‹€λ©΄ Object ν˜•νƒœλ‘œ λ°˜ν™˜, ν˜•λ³€ν™˜μ΄ ν•„μš”ν•˜λ‹€.
getAttributeNames() application 객체에 μ €μž₯된 μ†μ„±λ“€μ˜ 이름을 μ—΄κ±° ν˜•νƒœλ‘œ κ°€μ Έμ˜¨λ‹€.
setAttribute(String name, Object value) λ¬Έμžμ—΄ name의 μ΄λ¦„μœΌλ‘œ Objectν˜• 데이터λ₯Ό μ €μž₯ν•œλ‹€.
removeAttribute(String name) λ¬Έμžμ—΄ name에 ν•΄λ‹Ήν•˜λŠ” 속성을 μ‚­μ œν•œλ‹€.

exception 

exception은 pageμ§€μ‹œμ–΄μ—μ„œ 였λ₯˜ νŽ˜μ΄μ§€λ‘œ μ§€μ •λœ JSP νŽ˜μ΄μ§€μ—μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν•  λ•Œ μ „λ‹¬λ˜λŠ” java.lang.Throwable의 μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ μ°Έμ‘° λ³€μˆ˜λ‹€. ν˜„μž¬ νŽ˜μ΄μ§€λ₯Ό μ²˜λ¦¬ν•˜λ‹€ λ°œμƒν•˜λŠ” μ˜ˆμ™Έμƒν™©μ— λŒ€ν•œ 정보λ₯Ό κ°€μ Έμ˜¬ 수 μžˆλ‹€. 

 

getMessage() λ¬Έμžμ—΄λ‘œ 된 였λ₯˜ λ©”μ‹œμ§€λ₯Ό λ°˜ν™˜ν•œλ‹€.
printStackTrace() μŠ€νƒ 좔적 정보λ₯Ό 좜λ ₯ν•œλ‹€.
toString() μ˜ˆμ™Έ 클래슀 이름과 ν•¨κ»˜ 였λ₯˜ λ©”μ‹œμ§€λ₯Ό λ°˜ν™˜ν•œλ‹€.

 

λ‚΄μž₯객체의 생λͺ…주기와 속성 관리


JSPλŠ” HTTP ν”„λ‘œν† ν΄μ„ μ‚¬μš©ν•˜λŠ” μ›Ή ν™˜κ²½μ—μ„œ κ΅¬λ™λ˜λŠ” ν”„λ‘œκ·Έλž¨μ΄λ‹€. μ΄λŸ¬ν•œ μ›Ή ν”„λ‘œν† μ½œλ“€μ€ λΉ„μ—°κ²° λ°©μ‹μœΌλ‘œ μ‚¬μš©μžκ°€ μ„œλ²„μ— νŠΉμ • νŽ˜μ΄μ§€λ₯Ό μš”μ²­ν•˜κ³  μš”μ²­κ²°κ³Όλ₯Ό μ‘λ‹΅λ°›μœΌλ©΄ μ„œλ²„μ™€μ˜ 연결이 λŠκΈ°λŠ” ν˜•νƒœμ΄λ‹€. μ΄λŸ¬ν•œ νŠΉμ„± λ•Œλ¬Έμ— μ–΄λ– ν•œ 정보λ₯Ό μ§€μ†μ μœΌλ‘œ 가지고 μžˆμ–΄μ•Ό ν•˜λŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ°μ— ꡉμž₯히 μ–΄λ €μ›Œμ§„λ‹€. 그리고 μ΄λŸ¬ν•œ λ¬Έμ œμ μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ“±μž₯ν•œ 것이 λ‚΄μž₯ 객체이닀. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μš°λ¦¬λŠ” λ‚΄μž₯ 객체의 생λͺ…주기와 속성 관리에 λŒ€ν•΄ ν™•μ‹€ν•˜κ²Œ 이해λ₯Ό ν•˜κ³  μžˆμ–΄μ•Ό κ³ κΈ‰ 웹을 κ°œλ°œν•  수 μžˆλ‹€.

 

request, session, application의 생성 μ‹œμ κ³Ό μ†Œλ©Έ μ‹œμ μ€ μ–Έμ œμΌκΉŒ?

λ‚΄μž₯객체 μƒμ„±μ‹œμ  μ†Œλ©Έμ‹œμ 
request ν•΄λ‹Ή νŽ˜μ΄μ§€ μš”μ²­ μ‹œμ  ν•΄λ‹Ή νŽ˜μ΄μ§€ λ‘œλ”© μ™„λ£Œ μ‹œμ 
session ν•΄λ‹Ή μ»¨ν…μŠ€νŠΈ λ‚΄ νŠΉμ • 파일 μš”μ²­ μ‹œμ  μ›Ή λΈŒλΌμš°μ € μ’…λ£Œ or μΌμ •μ‹œκ°„ κ²½κ³Ό μ‹œμ 
application μ›Ή μ—ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹œμž‘ μ‹œμ  μ›Ή μ—ν”Œλ¦¬μΌ€μ΄μ…˜ μ’…λ£Œ μ‹œμ 

 

request, session, application을 톡해 관리할 수 μžˆλŠ” 맡 ν˜•νƒœμ˜ 속성듀 

request, session, application은 맡 ν˜•νƒœμ˜ 속성을 κ΄€λ¦¬ν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€. ν•΄λ‹Ήλ˜λŠ” λ©”μ„œλ“œλŠ” setAttribute()와 getAttribute() 이닀. JSPμ—μ„œ λ‚΄μž₯κ°μ²΄μ—μ„œ λ‹€λ£¨λŠ” μ†μ„±μ˜ μ˜λ―ΈλŠ” "각 λ‚΄μž₯객체의 생λͺ…μ£ΌκΈ° λ‚΄μ—μ„œ 관리될 수 μžˆλŠ” μžλ°” Object ν˜•νƒœμ˜ 데이터"둜 μ •μ˜ν•  수 μžˆλ‹€. 

 

λ‚΄μž₯κ°μ²΄μ—μ„œ 맡 기반으둜 속성을 κ΄€λ¦¬ν•˜λŠ” 기본적인 방법은 "이름(Name): κ°’(Value)"의 쌍으둜 객체λ₯Ό μ €μž₯ν•˜λŠ” 것이닀. μ΄λŸ¬ν•œ 방식은 μžλ°”μ˜ λŒ€ν‘œμ μΈ 자료ꡬ쑰 쀑 ν•˜λ‚˜μΈ ν•΄μ‹œ 맡과 μœ μ‚¬ν•˜λ‹€.

 

μ»¨ν…Œμ΄λ„ˆ 기반 ν”„λ‘œκ·Έλž¨μ˜ νŠΉμ§•κ³Ό JSP λ‚΄μž₯객체

ν”„λ‘œκ·Έλž¨ κ΄€μ μ—μ„œ μ»¨ν…Œμ΄λ„ˆλž€ ν”„λ‘œκ·Έλž¨ 싀행에 κ΄€μ—°ν•˜λ©΄μ„œ λͺ¨λ“ˆν™”λœ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•  수 있게 ν•˜κ³  ν”„λ‘œκ·Έλž¨ κ°„μ˜ μ›ν™œν•œ 데이터(객체) κ΅ν™˜μ„ μ§€μ›ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό λ§ν•œλ‹€. μ»¨ν…Œμ΄λ„ˆ 기반 ν”„λ‘œκ·Έλž¨μ˜ μž₯점은 λ‹€μŒκ³Ό κ°™λ‹€.

 

(1) ν”„λ‘œκ·Έλž¨μ˜ λͺ¨λ“ˆν™”κ°€ μš©μ΄ν•˜λ‹€.

(2) λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰ν•˜λŠ” λͺ¨λ“ˆ κ°„μ˜ 데이터 κ΅ν™˜μ΄ μš©μ΄ν•˜λ‹€.

(3) κ°œλ³„ ν”„λ‘œκ·Έλž¨μ—μ„œ ν™”λ©΄/μƒνƒœ μ „ν™˜ μ‹œ 데이터λ₯Ό μœ μ§€/κ΄€λ¦¬ν•˜κΈ° μš©μ΄ν•˜λ‹€.

(4) JSPμ—μ„œλŠ” μ»¨ν…Œμ΄λ„ˆμ— μ˜ν•΄ κ΄€λ¦¬λ˜λŠ” λ‚΄μž₯객체λ₯Ό 톡해 μž„μ˜μ˜ 객체λ₯Ό 각각의 생λͺ…μ£ΌκΈ° μ‹œμ μ— 따라 κ³΅μœ ν•  수 μžˆλ‹€.

 

JSPμ—μ„œ λ‚΄μž₯객체λ₯Ό μ΄μš©ν•œ 속성 관리가 κ°€λŠ₯ν•œ 것은 JSP와 빈즈 객체듀이 톰캣이라고 ν•˜λŠ” μ»¨ν…Œμ΄λ„ˆμ— μ˜ν•΄ κ΄€λ¦¬λ˜κ³  μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ΄λ‹€. 

 

  • MVC νŒ¨ν„΄κ³Ό JSP λ‚΄μž₯객체? 
MVC νŒ¨ν„΄μ— λ”°λ₯΄λ©΄ JSPλŠ” 뷰의 μ—­ν• λ§Œ μˆ˜ν–‰ν•΄μ•Ό ν•œλ‹€. λ¬Έμ œλŠ” μ»¨νŠΈλ‘€λŸ¬μ—μ„œ μ²˜λ¦¬ν•œ 데이터λ₯Ό μ–΄λ–»κ²Œ JSP둜 전달해야 ν•˜λŠ” 지에 λŒ€ν•œ 것이닀. μ΄λ•Œ JSP λ‚΄μž₯ 객체λ₯Ό μ΄μš©ν•œ 속성 관리가 μ‚¬μš©λœλ‹€. 예λ₯Όλ“€μ–΄, μ»¨νŠΈλ‘€λŸ¬μ—μ„œ μ²˜λ¦¬ν•œ λ°μ΄ν„°λŠ” request.setAttribute()λ₯Ό μ΄μš©ν•΄μ„œ μ €μž₯ν•˜κ³  화면에 λ³΄μ—¬μ§ˆ JSP둜 ν¬μ›Œλ”©ν•˜λ©΄ ν•΄λ‹Ή JSPμ—μ„œλŠ” request λ‚΄μž₯객체λ₯Ό 톡해 데이터λ₯Ό μ°Έμ‘°ν•  수 μžˆμœΌλ―€λ‘œ μ™„μ „ν•œ MVC νŒ¨ν„΄μ„ κ΅¬ν˜„ν•  수 μžˆλ‹€.

 

Reference

ν”„λ‘œμ νŠΈλ‘œ λ°°μš°λŠ” μžλ°” μ›Ή ν”„λ‘œκ·Έλž˜λ° Servlet,JSP,JDBC,ν™©μ˜μ • μ§€μŒ,ν•œλΉ›μ•„μΉ΄λ°λ―Έ