๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐ŸŒ  ์ž๋ฐ” ์„œ๋ฒ„ ํŽ˜์ด์ง€ JSP/๐ŸŒŒ ์›น \ ์„œ๋ธ”๋ฆฟ Web , Servlet

Web - 1๏ธโƒฃ Servlet์ด๋ž€

by Meteora_ 2021. 3. 14.
728x90

Servlet์˜ ๊ฐœ๋…๊ณผ ๋™์ž‘ ๊ณผ์ •์„ ์ดํ•ดํ•œ๋‹ค.

Goal

Web Service์˜ ๊ธฐ๋ณธ์ ์ธ ๋™์ž‘ ๊ณผ์ •์„ ์ดํ•ดํ•œ๋‹ค.

์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์œ„ํ•œ HTML Form์„ ์ดํ•ดํ•œ๋‹ค.
Servlet์„ ์ดํ•ดํ•œ๋‹ค.

Web Service์˜ ๊ธฐ๋ณธ์ ์ธ ๋™์ž‘ ๊ณผ์ •
HTML Form -> Servlet -> HTML Page

1. ์‚ฌ์šฉ์ž๊ฐ€ ์›น ํŽ˜์ด์ง€ form(HTML Form)์„ ํ†ตํ•ด ์ž์‹ ์˜ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•œ๋‹ค. (Input)
2. Servlet์˜ doGet() ๋˜๋Š” doPost() ๋ฉ”์„œ๋“œ๋Š” ์ž…๋ ฅํ•œ form data์— ๋งž๊ฒŒ DB ๋˜๋Š” ๋‹ค๋ฅธ ์†Œ์Šค์—์„œ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค.
3. ์ด ์ •๋ณด๋ฅผ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์— ๋งž๋Š” ์ ์ ˆํ•œ ๋™์  ์ปจํ…์ธ (HTML Page)๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ œ๊ณตํ•œ๋‹ค. (Output)


HTML Form

input elements(Ex. ํ…์ŠคํŠธ ์ƒ์ž)๊ฐ€ ํฌํ•จ๋œ ์›น ํŽ˜์ด์ง€์˜ ํ•œ ๋ถ€๋ถ„(section)

์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์ •๋ณด(form contents)๋ฅผ ์›น ์„œ๋ฒ„๋กœ ์ „์†กํ•˜๊ธฐ ์œ„ํ•œ submit element(Ex. ๋ฒ„ํŠผ)๊ฐ€ ์กด์žฌํ•œ๋‹ค.

 

action์—๋Š” form์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋ฒ„ ์ชฝ URL์„ ๋ช…์‹œํ•œ๋‹ค.


ํด๋ผ์ด์–ธํŠธ(browser)๊ฐ€ ์š”์ฒญํ•˜๋Š” URL ์ •๋ณด

 

์š”์ฒญ์„ ๋ณด๋‚ผ ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ : Port ๋ฒˆํ˜ธ / App ์ด๋ฆ„ / ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•˜๋Š” HTML
Ex) localhost:8080/FormHandlingServlet/LoginForm.html
IP ์ฃผ์†Œ
์š”์ฒญ์„ ๋ณด๋‚ผ ์„œ๋ฒ„์˜ “์œ„์น˜”๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
browser์™€ WAS(Tomcat)๊ฐ€ ๊ฐ™์€ PC์— ์žˆ์œผ๋ฉด “IP ์ฃผ์†Œ = localhost”
Port ๋ฒˆํ˜ธ
ํ•ด๋‹น ์œ„์น˜ ์•ˆ์˜ “ํŠน์ • ์‚ฌ๋žŒ”์„ ์˜๋ฏธํ•œ๋‹ค.
HTML ์ด๋ฆ„
HTML ์ด๋ฆ„์— ํ•ด๋‹นํ•˜๋Š” HTML ๋ฌธ์„œ๋ฅผ ๋ฐ›์•„์˜จ๋‹ค.
browser๋Š” ๋ฐ›์•„์˜จ HTML ๋ฌธ์„œ ์•ˆ์˜ html ํƒœ๊ทธ๋“ค(Ex. h2, br ๋“ฑ)์„ parsing(๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญ)ํ•œ๋‹ค.
๋งˆ์ง€๋ง‰์œผ๋กœ ์ด ๋‚ด์šฉ์„ browser์—์„œ rendering(๊ทธ๋ฆฌ๊ธฐ)ํ•œ๋‹ค.

 


LoginForm.html ๋‚ด์šฉ (๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ)

Username: 
Password: 

<form name="loginForm" method="post" action="loginServlet">
    Username: <input type="text" name="username"/> <br/>
    Password: <input type="password" name="password"/> <br/>
    <input type="submit" value="Login" />
</form>

 

 

method=”post”

์›ํ•˜๋Š” ๋™์ž‘์— ๋”ฐ๋ผ HTTP ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

method=”get”

action=”loginServlet”

URL of the servlet

ํ•ด๋‹น URL๋กœ request๊ฐ€ ๊ฐ„๋‹ค. ์ฆ‰, WAS์—์„œ์˜ ์–ด๋–ค Servlet์ธ์ง€ ์ง€์ •ํ•˜๋Š” ๊ฒƒ

type=”submit”

๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์ธ์ž๋“ค์ด Servlet์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

 

 

Form Tag ์†์„ฑ

 

Form Tag ์†์„ฑ์„ ์ด์šฉํ•˜์—ฌ ์–ด๋””๋กœ, ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ „์†กํ• ์ง€ ์ •ํ•œ๋‹ค.

 

action : form์„ ์ „์†กํ•  ์„œ๋ฒ„ ์ชฝ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ์ง€์ •
name : form์„ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ์ด๋ฆ„ ์ง€์ •
accept-charset : form ์ „์†ก์— ์‚ฌ์šฉํ•  ๋ฌธ์ž ์ธ์ฝ”๋”ฉ์„ ์ง€์ •
target : action์—์„œ ์ง€์ •ํ•œ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ํ˜„์žฌ ์ฐฝ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์œ„์น˜์—์„œ ์—ด๋ฆฌ๋„๋ก ์ง€์ •
method : form์„ ์„œ๋ฒ„์— ์ „์†กํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, HTTP ๋ฉ”์„œ๋“œ ์ง€์ • (GET ๋˜๋Š” POST)
์•„๋ž˜ ์ถ”๊ฐ€ ์„ค๋ช…
enctype : ๋„˜๊ธฐ๋Š” Content์˜ Type ์ง€์ • (์ฃผ๋กœ ํŒŒ์ผ์„ ๋„˜๊ธธ ๋•Œ ์‚ฌ์šฉ)
type์€ multipart/form-data ๋กœ ์ง€์ •ํ•ด์„œ ์‚ฌ์šฉ

 

 

Form Methods

form์„ ์„œ๋ฒ„์— ์ „์†กํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ๋‘ ๊ฐ€์ง€ HTTP ๋ฉ”์†Œ๋“œ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

GET Method
์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋‚ด์šฉ(form data)์ด URL ๋’ค์— ํ…์ŠคํŠธ ๋ฌธ์ž์—ด๋กœ ์ถ”๊ฐ€๋œ๋‹ค.
ํฌ๊ธฐ ์ œํ•œ: 1024 characters
data๋Š” ?๋ฅผ ๊ธฐ์ค€์œผ๋กœ action URL๊ณผ ๋ถ„๋ฆฌ๋œ๋‹ค.
Ex. http://www.test.com/hello?key1=value1&key2=value2

 

๋ธŒ๋ผ์šฐ์ €์—์„œ ์›น ์„œ๋ฒ„๋กœ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ธฐ๋ณธ ๋ฉ”์„œ๋“œ(Default Method)
HTTP ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด GET Method๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

 

์„œ๋ฒ„์— ์ „๋‹ฌํ•˜๋Š” data์— ์•”ํ˜ธ์™€ ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” GET Method๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
URL์€ ๋ชจ๋‘์—๊ฒŒ ๋…ธ์ถœ๋˜๋Š” ์ •๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์ƒ ์ ์ ˆํ•˜์ง€ ์•Š๋‹ค.

 

GET ๋ฉ”์„œ๋“œ์˜ ์‚ฌ์šฉ
Query-Type actions: DB์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ๋‹จ์ˆœํžˆ ์ฝ๊ธฐ ์œ„์ฃผ(read operation)์˜ ์ž‘์—…
Idempotemt actions: ๋ช‡ ๋ฒˆ์ด๊ณ  ๊ฐ™์€ ์—ฐ์‚ฐ์„ ๋ฐ˜๋ณตํ•ด๋„ ๊ฐ™์€ ๊ฐ’์ด ๋‚˜์˜ค๋Š” ์ž‘์—…

 

POST Method
์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋‚ด์šฉ(form data)์„ ๋ณ„๋„์˜ ๋ฉ”์‹œ์ง€๋กœ ๋ณด๋‚ธ๋‹ค.
Request Body์— data๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
URL์— ์ง์ ‘์ ์œผ๋กœ data๊ฐ€ ๋…ธ์ถœ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— GET Method๋ณด๋‹ค ๋ณด์•ˆ์ƒ์œผ๋กœ ์กฐ๊ธˆ ๋” ์•ˆ์ „ํ•˜๋‹ค.
POST ๋ฉ”์„œ๋“œ์˜ ์‚ฌ์šฉ
actions with side-effects: DB์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ์ž‘์—…

 

 


2. Servlet์ด๋ž€


Servlet์˜ ๊ฐœ๋…

์›น ๊ธฐ๋ฐ˜์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ๋™์ ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์ด๋‹ค.

 

Server Side์—์„œ ๋Œ์•„๊ฐ€๋Š” Java Program
๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„

 

Servlet Program์˜ ๊ธฐ๋ณธ์ ์ธ ๋™์ž‘ ๊ณผ์ •

 

Web Server๋Š” HTTP request๋ฅผ Web Container(Servlet Container)์—๊ฒŒ ์œ„์ž„ํ•œ๋‹ค.

 

1) web.xml ์„ค์ •์—์„œ ์–ด๋–ค URL๊ณผ ๋งคํ•‘๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
2) ํด๋ผ์ด์–ธํŠธ(browser)์˜ ์š”์ฒญ URL์„ ๋ณด๊ณ  ์ ์ ˆํ•œ Servlet์„ ์‹คํ–‰
https://gmlwjd9405.github.io/2018/10/29/web-application-structure.html ์ฐธ๊ณ 
Web Container๋Š” service() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— Servlet ๊ฐ์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฐ๋‹ค.

1) Web Container๋Š” ์ ์ ˆํ•œ Servlet ํŒŒ์ผ์„ ์ปดํŒŒ์ผ(.class ํŒŒ์ผ ์ƒ์„ฑ)ํ•œ๋‹ค.
2) .class ํŒŒ์ผ์„ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค Servlet ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค.
3) ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋  ๋•Œ Servlet ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” init() ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
Web Container๋Š” Request๊ฐ€ ์˜ฌ ๋•Œ๋งˆ๋‹ค thread๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ฒ˜๋ฆฌํ•œ๋‹ค.
๊ฐ thread๋Š” Servlet์˜ ๋‹จ์ผ ๊ฐ์ฒด์— ๋Œ€ํ•œ service() ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
์ฐธ๊ณ  Servlet Program์—์„œ Thread์˜ ์—ญํ• 

Thread๋ž€? ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ์‹œ์Šคํ…œ ์ž์›์„ ํ• ๋‹น๋ฐ›๋Š” ์ž‘์—…์˜ ๋‹จ์œ„
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html ์ฐธ๊ณ 
Servlet Program์—์„œ thread๊ฐ€ ์ˆ˜ํ–‰ํ•  ๋ฉ”์„œ๋“œ๊ฐ€ ์ง€์ •/ํ• ๋‹น๋˜๋ฉด
thread๋Š” ์ƒ์„ฑ ํ›„ ์ฆ‰์‹œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋งŒ ์—ด์‹ฌํžˆ ์ˆ˜ํ–‰ํ•œ๋‹ค.
ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ returnํ•˜๋ฉด thread๋Š” ์ข…๋ฃŒ๋˜๊ณ  ์ œ๊ฑฐ๋œ๋‹ค.
์ฆ‰, ์‹ค์ œ๋กœ thread์˜ ์—ญํ• : Servlet์˜ doGet() ๋˜๋Š” doPost()๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
Web Container(Servlet Container)๋Š” thread์˜ ์ƒ์„ฑ๊ณผ ์ œ๊ฑฐ๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค.
ํ•˜์ง€๋งŒ thread์˜ ์ƒ์„ฑ๊ณผ ์ œ๊ฑฐ์˜ ๋ฐ˜๋ณต์€ ํฐ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋งŒ๋“ ๋‹ค.
์ด๋ฅผ ์œ„ํ•ด Tomcat(WAS)์€ “Thread Pool”(๋ฏธ๋ฆฌ thread๋ฅผ ๋งŒ๋“ค์–ด ๋†“์Œ) ์ด๋ผ๋Š” ์ ์ ˆํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ธ๋‹ค.


์ฆ‰, WAS๋Š” Servlet์˜ life cycle์„ ๋‹ด๋‹นํ•œ๋‹ค.
์›น ๋ธŒ๋ผ์šฐ์ € ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๋•Œ Servlet ๊ฐ์ฒด ์ƒ์„ฑ์€ WAS๊ฐ€ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.
WAS ์œ„์—์„œ Servlet์ด ๋Œ์•„๋‹ค๋‹ˆ๊ณ  ๊ฐœ๋ฐœ์ž๋Š” ์ด Servlet์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

 


Servlet Life Cycle

 

ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด WAS๋Š” ํ•ด๋‹น ์š”์ฒญ์— ๋งž๋Š” Servlet์ด ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
๋งŒ์•ฝ ๋ฉ”๋ชจ๋ฆฌ์— ์—†๋‹ค๋ฉด ํ•ด๋‹น Servlet Class๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฐ ํ›„(Servlet ๊ฐ์ฒด ์ƒ์„ฑ) init ๋ฉ”์„œ๋“œ ์‹คํ–‰
์ดํ›„ service ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰
๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋‹ค๋ฉด ๋ฐ”๋กœ service ๋ฉ”์„œ๋“œ ์‹คํ–‰
if (๋ฉ”๋ชจ๋ฆฌ์— ์—†์Œ) {
// ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆผ
// init() ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰
}
// service()๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰


init()


ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰๋œ๋‹ค.
ํด๋ผ์ด์–ธํŠธ(browser)์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ Servlet์ด ์ƒ์„ฑ๋˜๊ณ  ์ด Servlet์ด ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋  ๋•Œ init() ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.
์—ญํ• : Servlet ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”


service(request, response)


์‘๋‹ต์— ๋Œ€ํ•œ ๋ชจ๋“  ๋‚ด์šฉ์€ service() ๋ฉ”์„œ๋“œ์— ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
Servlet์ด ์ˆ˜์‹ ํ•œ ๋ชจ๋“  request์— ๋Œ€ํ•ด service() ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.
HttpServlet์„ ์ƒ์†๋ฐ›์€ Servlet ํด๋ž˜์Šค(์ดํ•˜ ํ•˜์œ„ ํด๋ž˜์Šค)์—์„œ service() ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ๊ทธ ๋ถ€๋ชจ์ธ HttpServlet์˜ service()๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.
HttpServlet์˜ service() ๋ฉ”์„œ๋“œ๋Š” ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ ํŒจํ„ด์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.
service() ๋ฉ”์„œ๋“œ๋Š” request์˜ type(HTTP Method: GET, POST, PUT, DELETE ๋“ฑ)์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๋ฉ”์„œ๋“œ(doGet, doPost, doPut, doDelete ๋“ฑ)๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
์ฆ‰, ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ doGet, doPost ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•ด๋‘๋ฉด HttpServlet์˜ service() ๋ฉ”์„œ๋“œ๊ฐ€ ์š”์ฒญ์— ๋งž๋Š” ๋ฉ”์„œ๋“œ(ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์˜ค๋ฒ„๋ผ์ด๋“œํ•œ ๋ฉ”์„œ๋“œ)๋ฅผ ์•Œ์•„์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
๋ฉ”์„œ๋“œ๊ฐ€ returnํ•˜๋ฉด ํ•ด๋‹น thread๋Š” ์ œ๊ฑฐ๋œ๋‹ค.


destroy()


ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰๋œ๋‹ค.
Web Application์ด ๊ฐฑ์‹ ๋˜๊ฑฐ๋‚˜ WAS๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ํ˜ธ์ถœ๋œ๋‹ค.
์—ญํ• : Servlet ๊ฐ์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐ
Servlet์˜ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„ (๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ)

 

// `javax.servlet.http.HttpServlet`๋ฅผ ์ƒ์†๋ฐ›์€ Servlet ํด๋ž˜์Šค
public class LoginServlet extends HttpServlet {
    // doPost()๋ฅผ ์žฌ์ •์˜ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response throws ServletException, IOException {
        // read form fields
        String username = request.getParameter("username");
        String password = request.getParameter("password");
         
        // get response writer
        PrintWriter writer = response.getWriter();

        /* ์—ฌ๊ธฐ์„œ -> DB ์ ‘๊ทผ ๋“ฑ Business Logic ๋ถ€๋ถ„์„ ์ฒ˜๋ฆฌ */
         
        // build HTML code (view ์ƒ์„ฑ ๋ถ€๋ถ„)
        String htmlResponse = "<html>";
        htmlResponse += "<h2>Your username is: " + username + "<br/>";      
        htmlResponse += "Your password is: " + password + "</h2>";    
        htmlResponse += "</html>";	
         
        // return response
        writer.println(htmlResponse);         
    }
}


// javax.servlet.http.HttpServlet๋ฅผ ์ƒ์†๋ฐ›์€ Servlet ํด๋ž˜์Šค
public class LoginServlet extends HttpServlet {
// doPost()๋ฅผ ์žฌ์ •์˜
protected void doPost(HttpServletRequest request, HttpServletResponse response throws ServletException, IOException {
// read form fields
String username = request.getParameter("username");
String password = request.getParameter("password");

// get response writer PrintWriter writer = response.getWriter(); /* ์—ฌ๊ธฐ์„œ -> DB ์ ‘๊ทผ ๋“ฑ Business Logic ๋ถ€๋ถ„์„ ์ฒ˜๋ฆฌ */ // build HTML code (view ์ƒ์„ฑ ๋ถ€๋ถ„) String htmlResponse = "<html>"; htmlResponse += "<h2>Your username is: " + username + "<br/>"; htmlResponse += "Your password is: " + password + "</h2>"; htmlResponse += "</html>"; // return response writer.println(htmlResponse); }

}
WAS๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด
์š”์ฒญํ•  ๋•Œ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ •๋ณด๋ฅผ HttpServletRequest๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค.
์›น ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์‘๋‹ต์„ ๋ณด๋‚ผ ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•˜์—ฌ HttpServletResponse๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
์ƒ์„ฑ๋œ HttpServletRequest, HttpServletResponse ๊ฐ์ฒด๋ฅผ Servlet์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.


๊ฐœ๋ฐœ์ž๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ javax.servlet.http.HttpServlet๋ฅผ ์ƒ์†๋ฐ›์€ Servlet ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
HttpServletRequest request ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ form data๋ฅผ ์ฝ๋Š”๋‹ค.
HttpServletResponse response ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•ด ์ถœ๋ ฅ/๊ฒฐ๊ณผ Web Page๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 


๊ฐœ๋ฐœ์ž๋Š” Servlet ํด๋ž˜์Šค์— doGet() ๋˜๋Š” doPost() ์ค‘ ์ ์–ด๋„ ํ•˜๋‚˜๋ฅผ ์žฌ์ •์˜ํ•˜์—ฌ ์ž‘์„ฑํ•œ๋‹ค.
protected doGet()(HttpServletRequest request, HttpServletResponse response){}
protected doPost()(HttpServletRequest request, HttpServletResponse response){}

 


HttpServletRequest request ๊ฐ์ฒด
์‚ฌ์šฉ์ž๊ฐ€ HTML Form์— ์ž…๋ ฅํ•œ ๋‚ด์šฉ(username๊ณผ password)์„ request ๊ฐ์ฒด์—์„œ ๋ฐ›์•„์˜จ๋‹ค.
์ฆ‰, HTTP ํ”„๋กœํ† ์ฝœ์˜ Request ์ •๋ณด๋ฅผ Servlet์—๊ฒŒ ์ „๋‹ฌ
ํ—ค๋” ์ •๋ณด, ํŒŒ๋ผ๋ฏธํ„ฐ, ์ฟ ํ‚ค, URI, URL, Body์˜ Stream ๋“ฑ์„ ์ฝ์–ด ๋“ค์ด๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค.
getHeader(“์›ํ•˜๋Š” ํ—ค๋” ์ด๋ฆ„”)
์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ํ—ค๋” ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
getParameter()
์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ form parameter ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.
์ด๋Ÿฐ parameter ๊ฐ’์€ URL ๋˜๋Š” form์˜ input tag๋ฅผ ํ†ตํ•ด์„œ ๋„˜์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
Ex.

String name = request.getParameter("firstname");
int year = Integer.parseInt (request.getParameter("year"));


getParameterValues()
form parameter๊ฐ€ ๋‘ ๋ฒˆ ์ด์ƒ ๋‚˜ํƒ€๋‚˜๊ณ  ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. (Ex. checkbox)
Ex.

String languages[] = request.getParameterValues("language");


HttpServletResponse response ๊ฐ์ฒด
์ธ์ž์˜ ๋‚ด์šฉ์— ๋งž๊ฒŒ ๋™์ ์ธ HTML ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ response ๊ฐ์ฒด์— ๋‹ด์•„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
getWriter() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ PrintWriter ๊ฐ์ฒด์„ ๊ฐ€์ ธ์˜จ ํ›„ ํ•ด๋‹น ๊ฐ์ฒด์—์„œ print, println ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
์ฆ‰, form data๋ฅผ ์ฒ˜๋ฆฌํ•œ ๊ฒฐ๊ณผ๋ฅผ Web Page์— ์ƒ์„ฑ(view ์ƒ์„ฑ)ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

response.setContentType("text/html"); 
PrintWriter out = response.getWriter(); 
out.println("<h2> Welcome </h2>");

 

๋Œ“๊ธ€