๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ ˆ๊ฑฐ์‹œ

2021.1.5

by GroovyArea 2022. 1. 5.

- ํ•˜๋ฃจ ์ •๋ฆฌ - 

  • Servlet ๋ณต์Šต ๋ฐ ์ •๋ฆฌ
  • ์„ธ๋ฏธํ”„๋กœ์ ํŠธ ์ง„ํ–‰์ƒํ™ฉ ์ •๋ฆฌ

- ์˜ค๋Š˜ ๊ณต๋ถ€ ๋‚ด์šฉ - 

Servlet

  • / : ์ตœ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ
  • / contextroot ๋””๋ ‰ํ† ๋ฆฌ (/)๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋Š” ์ด์œ 
  • @WebServlet : ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋ฅผ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋“ฑ๋กํ•˜๊ณ  URL ์ฃผ์†Œ๋ฅผ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•œ ์–ด๋…ธํ…Œ์ด์…˜(Annotation) ⇒ web.sml ํŒŒ์ผ์˜ servlet ์—˜๋ฆฌ๋จผํŠธ ๋ฐ servlet-mapping ์—˜๋ฆฌ๋จผํŠธ์™€ ๋™์ผํ•œ ๊ธฐ๋Šฅ ์ œ๊ณต
  • ์–ด๋…ธํ…Œ์ด์…˜ ์†์„ฑ์„ ์ด์šฉํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ ์ด๋ฆ„ ๋˜๋Š” URL ์ฃผ์†Œ์— ๋Œ€ํ•œ ๋งคํ•‘ ์ฒ˜๋ฆฌ ๋“ฑ์„ ์„ค์ •
  • @WebServlet ์–ด๋…ธํ…Œ์ด์…˜ ์†์„ฑ์„ ์ด์šฉํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ ์ด๋ฆ„ ๋˜๋Š” URL ์ฃผ์†Œ์— ๋Œ€ํ•œ ๋งคํ•‘ ์ฒ˜๋ฆฌ๋“ฑ์„ ์„ค์ •
  • ⇒ name ์†์„ฑ : ์„œ๋ธ”๋ฆฟ ์ด๋ฆ„์„ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ • - name ์†์„ฑ์„ ์ƒ๋žตํ•˜๋ฉด ํด๋ž˜์Šค๋ช…์„ ์„œ๋ธ”๋ฆฟ
  • ⇒ value ์†์„ฑ (ํ•„์ˆ˜) : ์„œ๋ธ”๋ฆฟ์— ๋Œ€ํ•œ ์š”์ฒญ URL ์ฃผ์†Œ๋ฅผ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ • - ๋‹ค๋ฅธ ์†์„ฑ์ด ์—†๋Š” ๊ฒฝ์šฐ
  • ⇒ ์–ด๋…ธํ…Œ์ด์…˜ ์†์„ฑ์€ , ๊ธฐํ˜ธ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋‚˜์—ด ๊ฐ€๋Šฅ
  • ์„œ๋ธ”๋ฆฟ์€ ๋‹จ์ ์ด ์žˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์— ์ถœ๋ ฅํ•  ๋ฌธ์„œ๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ.
  • webapp ํด๋”๋Š” ์š”์ฒญ ๋ถˆ๊ฐ€ ์„œ๋ฒ„๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ (๋ณด์•ˆ์„ ์š”ํ•˜๋Š” ์ •๋ณด๋‚˜ ํŒŒ์ผ๋“ค์ด ๋“ค์–ด์žˆ์Œ)

@WebServlet : ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋ฅผ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋“ฑ๋กํ•˜๊ณ  URL ์ฃผ์†Œ๋ฅผ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•œ ์–ด๋…ธํ…Œ์ด์…˜(Annotation)
 => [web.xml] ํŒŒ์ผ์˜ servlet ์—˜๋ฆฌ๋จผํŠธ ๋ฐ servlet-mapping ์—˜๋ฆฌ๋จผํŠธ์™€ ๋™์ผํ•œ ๊ธฐ๋Šฅ ์ œ๊ณต
@WebServlet ์–ด๋…ธํ…Œ์ด์…˜ ์†์„ฑ์„ ์ด์šฉํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ ์ด๋ฆ„ ๋˜๋Š” URL ์ฃผ์†Œ์— ๋Œ€ํ•œ ๋งคํ•‘ ์ฒ˜๋ฆฌ ๋“ฑ์„ ์„ค์ •
 => name ์†์„ฑ : ์„œ๋ธ”๋ฆฟ ์ด๋ฆ„์„ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ • - name ์†์„ฑ์„ ์ƒ๋žตํ•˜๋ฉด ํด๋ž˜์Šค๋ช…์„ ์„œ๋ธ”๋ฆฟ ์ด๋ฆ„์œผ๋กœ ์ž๋™ ์„ค์ •
 => value ์†์„ฑ(ํ•„์ˆ˜) : ์„œ๋ธ”๋ฆฟ์— ๋Œ€ํ•œ ์š”์ฒญ URL ์ฃผ์†Œ๋ฅผ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ • - ๋‹ค๋ฅธ ์†์„ฑ์ด ์—†๋Š” ๊ฒฝ์šฐ ์†์„ฑ๊ฐ’๋งŒ ์„ค์ • ๊ฐ€๋Šฅ
 => ์–ด๋…ธํ…Œ์ด์…˜ ์†์„ฑ์€ , ๊ธฐํ˜ธ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋‚˜์—ด ๊ฐ€๋Šฅ

@WebServlet("/first.itwill") 
// ์ด๋ฆ„ ์ƒ๋žต ๋ฐ URL ์ฃผ์†Œ ๋งคํ•‘ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด web.XML ํŒŒ์ผ์˜ mapping๊ณผ ๋™์ผ

์„œ๋ฒ„์— ์ €์žฅ๋œ ์ด๋ฏธ์ง€ ํŒŒ์ผ์˜ ์‹œ์Šคํ…œ ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜ํ™˜๋ฐ›์•„ ์ €์žฅ
HttpServletRequest.getServletContext() : ServletContext ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ
ServletContext : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ์ปจํ…์ŠคํŠธ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ ์ธ์Šคํ„ด์Šค
์ปจํ…์ŠคํŠธ(Context) : ์›น์„œ๋ฒ„(WAS)์— ์˜ํ•ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์ž์› - HTML ๋ฌธ์„œ, ์ด๋ฏธ์ง€ ํŒŒ์ผ ๋“ฑ
ServletContext.getRealPath(String contextFilePath) : ์ปจํ…์ŠคํŠธ ํŒŒ์ผ์˜ ์‹œ์Šคํ…œ ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ

String filePath=request.getServletContext().getRealPath("/WEB-INF/Koala.jpg");
// ํ•ด๋‹น ๊ฒฝ๋กœ์˜ ์ด๋ฏธ์ง€(ํŒŒ์ผ)์„ ์ ‘๊ทผํ•˜์—ฌ ๋ณ€์ˆ˜์— ์ €์žฅ

์„œ๋ธ”๋ฆฟ ์š”์ฒญ ์‹œ ์ „๋‹ฌ๋œ ๊ฐ’ (์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฐ’)์„ ๋ฐ˜ํ™˜๋ฐ›์•„ ์ €์žฅ
HTTPServletRequest.getParameter(String name) : ์›นํ”„๋กœ๊ทธ๋žจ ์š”์ฒญ ์‹œ ์ „๋‹ฌ๋œ ๊ฐ’์„ ์–ป์–ด์™€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ - ์ „๋‹ฌ๊ฐ’์€ ๋ฌด์กฐ๊ฑด ๋ฌธ์ž์—ด(String ์ธ์Šคํ„ด์Šค)๋กœ ๋ฐ˜ํ™˜
 => GET : QueryString์œผ๋กœ ์ „๋‹ฌ๋œ ๊ฐ’์˜ ์ด๋ฆ„(์‹๋ณ„์ž)์„ ์ด์šฉํ•˜์—ฌ ์ „๋‹ฌ๊ฐ’ ๋ฐ˜ํ™˜
 => POST : ์ž…๋ ฅํƒœ๊ทธ์˜ name ์†์„ฑ๊ฐ’์„ ์ด์šฉํ•˜์—ฌ ์ „๋‹ฌ๊ฐ’ ๋ฐ˜ํ™˜

 ์ด๋ฆ„(name)์— ํ•ด๋‹นํ•˜๋Š” ์ „๋‹ฌ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ null ๋ฐ˜ํ™˜
 => GET ๋ฐฉ์‹์—์„œ๋Š” ์ด๋ฆ„๋งŒ ์žˆ๊ณ  Null String ๋ฐ˜ํ™˜

String id = request.getParameter("id");
//ํ•ด๋‹น id๋ฅผ ์š”์ฒญ ์‹œ ์ „๋‹ฌ๋œ ๊ฐ’์„ HTML์—์„œ ๊ฐ€์ ธ์˜จ๋‹ค.
<tr>
				<th bgcolor="44ff44"><font size="2">์•„์ด๋””</font></th>
				<td bgcolor="white" width="300"><input type="text" size="10"
					name="id" class="TXTFLD"></td>
			</tr>

=> ์š”๋†ˆ์—์„œ ๊ฐ€์ ธ์˜ด

  <!-- context-param : ๋ชจ๋“  ์ปจํ…์ŠคํŠธ(์›นํ”„๋กœ๊ทธ๋žจ)์—๊ฒŒ ํ•„์š”ํ•œ ๊ฐ’์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๋ถ€๋ชจ ์—˜๋ฆฌ๋จผํŠธ -->		
  <context-param>
  	<!-- param-name : ๊ฐ’์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์ด๋ฆ„(์‹๋ณ„์ž)๋ฅผ ์„ค์ •ํ•˜๋Š” ์—˜๋ฆฌ๋จผํŠธ -->
  	<param-name>babico</param-name>
  	<!-- param-name : ์ œ๊ณตํ•  ๊ฐ’์„ ์ œ๊ณต์„ ์„ค์ •ํ•˜๋Š” ์—˜๋ฆฌ๋จผํŠธ -->
  	<param-value>๋น ์‚์ฝ”</param-value>
  </context-param>

 

์„œ๋ธ”๋ฆฟ(์›นํ”„๋กœ๊ทธ๋žจ)์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์— ์˜ํ•ด WAS(Web Application Server)์— ๋“ฑ๋ก๋œ ์„œ๋ธ”๋ฆฟ
ํด๋ž˜์Šค๋ฅผ ์ฝ์–ด ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ณ  ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ service() ๋ฉ”์†Œ๋“œ๋ฅด ํ˜ธ์ถœํ•ด ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ์™€ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌ(์‘๋‹ต)
-> ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•  ๊ฒฝ์šฐ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋กœ service() ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ -> ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” WAS๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์†Œ๋ฉธ.

-> WAS ํ”„๋กœ๊ทธ๋žจ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋Š” ์„œ๋ธ”๋ฆฟ ๊ด€๋ จ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ(Container) ๊ธฐ๋Šฅ
 Container? ์ธ์Šคํ„ด์Šค์˜ ์ƒ๋ช…์ฃผ๊ธฐ(LifeCycle)๋ฅผ ๊ด€๋ฆฌ(create, use, extinction) ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ

 

์ƒ์„ฑ์ž๋ž€?

์ƒ์„ฑ์ž(Constructor) : ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํŠน๋ณ„ํ•œ ๋ฉ”์†Œ๋“œ
=> ์ดˆ๊ธฐํ™” ์ž‘์—… : ํ•„๋“œ ์ดˆ๊ธฐ๊ฐ’ ์ €์žฅ
=> ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์‹œ WAS ํ”„๋กœ๊ทธ๋žจ์— ์˜ํ•ด ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šค๋กœ ์ƒ์„ฑํ• 

 

init()?

init() : WAS ํ”„๋กœ๊ทธ๋žจ์ด ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ฐ€์žฅ ๋จผ์ € ํ•œ๋ฒˆ๋งŒ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์†Œ๋“œ
 => ์ƒ์„ฑ์ž ๋Œ€์‹  init() ๋ฉ”์†Œ๋“œ๋กœ ํ•„๋“œ ์ดˆ๊ธฐํ™” ์ž‘์—…
์ƒ์„ฑ์ž ๋Œ€์‹  init() ๋ฉ”์†Œ๋“œ๋กœ ์ดˆ๊ธฐํ™” ์ž‘์—…์„ ํ•˜๋Š” ์ด์œ ๋Š” ServletConfig ์ธ์Šคํ„ด์Šค๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ œ๊ณต๋ฐ›์•„ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ•„์š”ํ•œ ๊ฐ’์„ ํ•„๋“œ๊ฐ’์œผ๋กœ ์ €์žฅ ๊ฐ€๋Šฅ
ServletConfig : ์ปจํ…์ŠคํŠธ ๊ด€๋ จ ํ™˜๊ฒฝ์ •๋ณด๋ฅผ ์ €์žฅํ•œ ์ธ์Šคํ„ด์Šค
 => [web.xml] ํŒŒ์ผ์— ์„ค์ •๋œ ๊ฐ’์„ ์ œ๊ณต๋ฐ›์•„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ - ์œ ์ง€๋ณด์ˆ˜์˜ ํšจ์œจ์„ฑ ์ฆ๊ฐ€

@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("### LifeCycleServlet ํด๋ž˜์Šค์˜ init() ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ###");

		// ServletCongig.getServletContext() : ServletContext ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ
		// ServiceContext.getInitParameter(String name) : [web.xml] ํŒŒ์ผ์˜ context-param
		// ์—˜๋ฆฌ๋จผํŠธ๋กœ ์ œ๊ณต๋˜๋Š” ๊ฐ’์„ ์–ป์–ด์™€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ
		babico = config.getServletContext().getInitParameter("babico");
	}

=>> init() ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ›„ ์žฌ์ •์˜

 

destroy()?

destroy() : WAS ํ”„๋กœ๊ทธ๋žจ์ด ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ์†Œ๋ฉธํ•˜๊ธฐ ์ „์— ํ•œ๋ฒˆ๋งŒ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์†Œ๋“œ
=> WAS ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ์‹œ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” WAS ํ”„๋กœ๊ทธ๋žจ์— ์˜ํ•ด ์†Œ๋ฉธ

@Override
	public void destroy() {
		System.out.println("### LifeCycleServlet ํด๋ž˜์Šค์˜ destroy() ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ###");
	}

 


- ์„ธ๋ฏธ ํŒ€ํ”Œ -

> ๊ฐ ํŽ˜์ด์ง€ ํฌ๋กค๋ง ํ›„ ๋ชฉ์š”์ผ๊นŒ์ง€ ๊ตฌ๊ธ€ ppt ๊ณต์œ  ๋“œ๋ผ์ด๋ธŒ ์ด์šฉํ•ด์„œ ํ™”๋ฉด ์ •์˜์„œ ๋งŒ๋“ค๊ฒŒ ์‹œํ‚ค๊ธฐ

> ์†Œ์Šค ๋ฐ›์€ ๊ฑฐ import ์‹œ์ผœ๋ณด๊ธฐ


- ์Šคํ„ฐ๋”” ๋‚ด์šฉ ๋ฐ ๊ฒฐ๊ณผ - 

=> configContext, ServletContext์˜ ์ฐจ์ด์  ๋ฐ”๋กœ ์•Œ๊ธฐ

=> ์›น ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์— ๋Œ€ํ•œ servlet์˜ ์—ญํ•  ๋ฐ”๋กœ ์•Œ๊ธฐ

๋ฐ˜์‘ํ˜•

'๋ ˆ๊ฑฐ์‹œ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

2022.1.7์˜ ๊ธฐ๋ก  (0) 2022.01.07
2022.1.6์˜ ๊ธฐ๋ก  (0) 2022.01.07
2021.1.4์˜ ๊ธฐ๋ก  (0) 2022.01.04
2022.1.3์˜ ๊ธฐ๋ก  (0) 2022.01.03
2022.1.2์˜ ๊ธฐ๋ก (25์‚ด์˜ ์ฒซ ์ผ์š”์ผ)  (1) 2022.01.02