๐Ÿ’ปProgramming/JSP

[JSP] 02. ์„œ๋ธ”๋ฆฟ(Servlet) ๊ฐœ์š”

yeony._. 2022. 9. 27. 14:02

์„œ๋ธ”๋ฆฟ (Servlet)

แ†ž์„œ๋ธ”๋ฆฟ์€ ๋ฉ”์ธ์ด ์—†์ง€๋งŒ, ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์‹คํ–‰๋˜๊ณ  ๊ด€๋ฆฌ๋œ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋กœ ํ†ฐ์บฃ์„ ์‚ฌ์šฉ ์ค‘ 

แ†ž์„œ๋ธ”๋ฆฟ์˜ ๋‹จ์ ์€ java ์ฝ”๋“œ ์•ˆ์— html ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด์žˆ์–ด ํšจ์œจ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋””์ž์ธ ์ž‘์—…์€ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

แ†ž์ œ๋„ค๋ฆญ ์„œ๋ธ”๋ฆฟ์„ ์ƒ์† ๋ฐ›์•„์„œ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹Œ HTTP ์„œ๋ธ”๋ฆฟ์„ ์ƒ์† ๋ฐ›๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์ฝ”๋”ฉํ•˜๊ธฐ ์‰ฌ์šฐ๋ฏ€๋กœ  HTPP ์„œ๋ธ”๋ฆฟ์„ ์ƒ์† ๋ฐ›๋Š”๋‹ค.

แ†ž์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•˜๋ฉด ์š”์ฒญ๋œ ๊ธฐ๋Šฅ์„ ๋ฐ›๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ด์ค€๋‹ค. 

แ†ž๊ฐ์ฒด ์ƒ์„ฑ๋ถ€ํ„ฐ ์†Œ๋ฉธ๊นŒ์ง€ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•œ๋‹ค. 

แ†ž๋‹ค์ค‘ ์Šค๋ ˆ๋“œ๋ฅผ ์ง€์›ํ•œ๋‹ค. 

 

์„œ๋ธ”๋ฆฟ์˜ life cycle

init()

แ†žํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ช‡ ๋ช…์ด ๋“ค์–ด์˜ค๋˜์ง€ ์–ด๋– ํ•œ ๊ฒฝ์šฐ์—๋ผ๋„ ์ตœ์ดˆ๋กœ ํ•œ๋ฒˆ ์ˆ˜ํ–‰๋œ๋‹ค. 

แ†ž๊ฒฐ๊ณผ์ ์œผ๋กœ๋Š” ๋‘ ๋ฒˆ ๋‹ค์‹œ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค. 

 

service()

แ†žํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋ฐ›๊ณ  ์š”์ฒญ์— ๋”ฐ๋ฅธ ๊ฒฐ๋กธ๋ฅผ ์‘๋‹ตํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋กœ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ํ•  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋œ๋‹ค.

แ†ž์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

destory()

แ†ž์„œ๋ฒ„๊ฐ€ ์ข…๋ฃŒ๋˜๋Š” ์‹œ์ ์— ์‚ฌ์šฉํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‹ซ๋Š” ๋“ฑ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•จ 

แ†ž์„œ๋ฒ„๊ฐ€ ์ฃฝ์„ ๋•Œ ๋‹จ ํ•œ ๋ฒˆ ์‹คํ–‰๋œ๋‹ค.

แ†ž์ œ๋„ค๋ฆญ ์„œ๋ธ”๋ฆฟ(Generic Servlet)์€ ์ถ”์ƒ ํด๋ž˜์Šค๋ผ์„œ ๋ฐ˜๋“œ์‹œ ์žฌ์ •์˜ ํ•ด์•ผ ํ•œ๋‹ค. 

แ†ž์ œ๋„ค๋ฆญ ์„œ๋ธ”๋ฆฟ์€ ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•˜์—ฌ http ์„œ๋ธ”๋ฆฟ ์ด์šฉํ•˜์ž! ( http ์„œ๋ธ”๋ฆฟ์˜ ์•„๋ฒ„์ง€๋Š” ์ œ๋„ค๋ฆญ ์„œ๋ธ”๋ฆฟ )

 

์„œ๋ธ”๋ฆฟ์—์„œ์˜ ๋ฃจํŠธ :http://localhost:9090/study2

html์—์„œ์˜ ๋ฃจํŠธ :http://localhost:9090

 

public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {

 

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ๊ฒƒ์„ ๋ฐ›์„ ๋•Œ๋Š” ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ  (req)

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ๊ฒƒ์„ ๋ฐ›์„ ๋•Œ๋Š” ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ  (res) 

 

 

ํŒŒ๋ผ๋ฏธํ„ฐ 

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„ํ•œํ…Œ ๋ณด๋‚ด๋Š” ์ •๋ณด 

 

GET ๋ฐฉ์‹

แ†ž ๊ธฐ๋ณธ ์š”์ฒญ ๋ฐฉ์‹์œผ๋กœ ์ฃผ์†Œ ์ค„์— ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ „๋‹ฌ 

แ†ž๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜๋Š” ๊ฒƒ์€ GET ๋ฐฉ์‹์ด๋‹ค. 

https://www.naver.com/

 

POST ๋ฐฉ์‹ 

แ†ž<from> ํƒœ๊ทธ์—์„œ method๋ฅผ post๋กœ ์„ค์ •ํ•ด์„œ ์š”์ฒญํ•œ๋‹ค.

แ†ž <form method = "post"></form>์„ ํ†ตํ•ด ์š”์ฒญ

 

body์— ์ •๋ณด๋ฅผ ์‹ค์–ด์„œ ๋ณด๋ƒ„ 

https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=105 

? ๋’ค์— ์žˆ๋Š” ์ •๋ณด๊ฐ€ ํŒŒ๋ผ๋ฏธํ„ฐ

IT ๋ผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ์Œ 

 

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ ์ผ๋‹จ ๋‘ ๊ฐ€์ง€ ๊ธฐ์–ตํ•ด ๋‘˜ ๊ฒƒ 

 

req.setCharacterEncoding("utf-8");

POST ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ ์š”์ฒญํ•œ ๋ฌธ์ž์˜ ์ธ์ฝ”๋”ฉ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค. 

์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด post ๋ฐฉ์‹์—์„œ๋Š” ํ•œ๊ธ€์ด ๊นจ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. 

 

Servlet ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

1. HTTP ์ƒ์† ๋ฐ›๋Š”๋‹ค.

2. doGet๊ณผ doPost๋ฅผ ์žฌ์ •์˜ํ•œ๋‹ค. 

doGet() : get ๋ฐฉ์‹์œผ๋กœ ์š”์ฒญํ–ˆ์„ ๋•Œ

doPost(): 

3. ์„œ๋ธ”๋ฆฟ๊ณผ ์ฃผ์†Œ๋ฅผ ๋งคํ•‘ํ•œ๋‹ค. (web.xml)

แ†ž์„œ๋ธ”๋ฆฟ๊ณผ ์ฃผ์†Œ๋ฅผ ๋งคํ•‘ํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ ํ•œ ํ”„๋กœ์ ํŠธ ๋‚ด์— ๋™์ผํ•œ url-pattern์„ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค. 

แ†ž๋‹ค๋ฅธ ํŒจํ‚ค์ง€์ธ ๊ฒฝ์šฐ๋ผ๋„ ์ ˆ๋Œ€ ๋ถˆ๊ฐ€ํ•˜๋‹ค. 

แ†ž๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

Caused by: java.lang.IllegalArgumentException: ์ด๋ฆ„์ด [helloServlet]๊ณผ [ch02.user.UserServlet]์ธ ๋‘ ์„œ๋ธ”๋ฆฟ๋“ค ๋ชจ๋‘ url-pattern [/hello]์— ๋งคํ•‘๋˜์–ด ์žˆ๋Š”๋ฐ, ์ด๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

์„œ๋ธ”๋ฆฟ๊ณผ ์ฃผ์†Œ๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ•

1) web.xml ์—์„œ ์„œ๋ธ”๋ฆฟ ํ™˜๊ฒฝ ์„ค์ •

์ด๋ฆ„๊ณผ ํด๋ž˜์Šค๋ฅผ ์„ค์ •ํ•œ๋‹ค.

์ด๋ฆ„๊ณผ url ํŒจํ„ด์„ ์„ค์ •ํ•œ๋‹ค. 

 

2) ํด๋ž˜์Šค ์•ˆ์—์„œ ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ• 

@WebServlet("/user")