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

๋ชฉ๋ก์ด ์—†์Šต๋‹ˆ๋‹ค.

[JSP] request๊ฐ์ฒด

๐Ÿ—ฃ Language/JSP



    JSP์—์„œ๋Š” ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•˜์ง€ ์•Š๊ณ ๋„ ๊ฐ์ฒด๊ณผ ์—ฐ๊ด€๋œ ๋ฉ”์„œ๋“œ๋“ค์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋“ค์ด ์žˆ๋‹ค. ์ด๋ฅผ Implicit Instance(๊ธฐ๋ณธ๊ฐ์ฒด , ๋‚ด์žฅ๊ฐ์ฒด) ๋ผ๊ณ  ํ•œ๋‹ค. 


    ์ข…๋ฅ˜๋ฅผ ์ •๋ฆฌํ•ด๋†“์€ ๋งํฌ >> Implict Instance 


    ์ด ์ค‘์—์„œ ์˜ค๋Š˜์€ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” request ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค.



    1. Request


    request ๊ธฐ๋ณธ๊ฐ์ฒด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.


    ํด๋ผ์ด์–ธํŠธ(์›น ๋ธŒ๋ผ์šฐ์ €)์™€ ๊ด€๋ จ๋œ ์ •๋ณด ์ฝ๊ธฐ ๊ธฐ๋Šฅ


    ์„œ๋ฒ„์™€ ๊ด€๋ จ๋œ ์ •๋ณด ์ฝ๊ธฐ ๊ธฐ๋Šฅ


    ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „์†กํ•œ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ์ฝ๊ธฐ ๊ธฐ๋Šฅ


    ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „์†กํ•œ ์š”์ฒญ ํ—ค๋” ์ฝ๊ธฐ ๊ธฐ๋Šฅ


    ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „์†กํ•œ ์ฟ ํ‚ค ์ฝ๊ธฐ ๊ธฐ๋Šฅ


    ์†์„ฑ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ


    ์—ฌ๊ธฐ์„œ ์ฟ ํ‚ค ์ฝ๊ธฐ ๊ธฐ๋Šฅ๊ณผ ์†์„ฑ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์€ ์ง€๊ธˆ ์ •๋ฆฌํ•˜๊ธฐ์—” ์ˆ˜์ค€์ด ๋†’์•„์„œ ๋‚˜์ค‘์— ์ •๋ฆฌํ•˜๋„๋ก ํ•˜์ž.



    1-1. Request ๊ธฐ๋Šฅ ( ํด๋ผ์ด์–ธํŠธ ์ •๋ณด ๋ฐ ์„œ๋ฒ„ ์ •๋ณด ์ฝ๊ธฐ )


    request ๊ธฐ๋ณธ ๊ฐ์ฒด๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €(ํด๋ผ์ด์–ธํŠธ)๊ฐ€ ์ „์†กํ•œ ์ •๋ณด๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๊ณ , ์„œ๋ฒ„์˜ ์ •๋ณด๋ฅผ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ๋“ค์€ request๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.


     ๋ฉ”์„œ๋“œ

    ๋ฆฌํ„ด ํƒ€์ž… 

    ์„ค๋ช… 

    getRemoteAddr() 

    String 

    ์›น์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•œ ํด๋ผ์ด์–ธํŠธ์˜ IP์ฃผ์†Œ๋ฅผ ๊ตฌํ•œ๋‹ค. 

    getContentLength() 

    long 

    ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „์†กํ•œ ์š”์ฒญ ์ •๋ณด์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•œ๋‹ค. ์•Œ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ -1์„ ๋ฆฌํ„ด. 

    getCharacterEncoding() 

    String 

    ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ ์ •๋ณด๋ฅผ ์ „์†กํ•  ๋•Œ ์‚ฌ์šฉํ•œ ์บ๋ฆญํ„ฐ์˜ ์ธ์ฝ”๋”ฉ์„ ๊ตฌํ•œ๋‹ค. (utf-8, euc-kr ๋“ฑ)

    getContentType() 

    String 

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

    getProtocol() 

    String 

    ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ•œ๋‹ค. (์˜ˆ/ http:// -> http , ftp:// -> ftp)

    getMethod() 

    String 

    ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ •๋ณด๋ฅผ ์ „์†กํ•  ๋•Œ ์‚ฌ์šฉํ•œ ๋ฐฉ์‹์„ ๊ตฌํ•œ๋‹ค. (get, post, delete ๋“ฑ)

     getRequestURI()

    String 

    ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์š”์ฒญํ•œ URL์—์„œ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•œ๋‹ค. 

    getContextPath() 

    String 

    JSPํŽ˜์ด์ง€๊ฐ€ ์†ํ•œ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ปจํ…์ŠคํŠธ ๊ฒฝ๋กœ(๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ)๋ฅผ ๊ตฌํ•œ๋‹ค. 

    getServerName() 

    String 

    ์—ฐ๊ฒฐํ•  ๋•Œ ์‚ฌ์šฉํ•œ ์„œ๋ฒ„ ์ด๋ฆ„์„ ๊ตฌํ•œ๋‹ค. 

    getServerPort() 

    int 

    ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ๊ตฌํ•œ๋‹ค. 


    ์˜ˆ๋ฅผ ๋“ค๋ฉด 


    http://localhost:8080/Notice/index.jsp


    ์ด URL์—์„œ ์ถ”์ถœ๋˜๋Š” ์ •๋ณด๋“ค์€


    request.getServerName() -> localhost

    request.getServerPort() -> 8080

    request.getRequestURI() -> Notice/index.jsp


    ์ด๋Ÿฐ์‹์ด ๋œ๋‹ค.



    1-2 request ๊ธฐ๋Šฅ ( HTML ํผ๊ณผ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ฒ˜๋ฆฌ )


    JSP์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ ์ค‘์˜ ํ•˜๋‚˜๋Š” ์›น ๋ธŒ๋ผ์šฐ์ € ํผ์— ์ž…๋ ฅํ•œ ๊ฐ’์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ‹ฐ์Šคํ† ๋ฆฌ ๋ธ”๋กœ๊ทธ์— ๊ธ€์„ ์˜ฌ๋ฆฌ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์ œ๋ชฉ, ๋ณธ๋ฌธ ๋‚ด์šฉ์„ ์ž…๋ ฅํ•˜๊ณ  ํ•„์š”ํ•˜๋ฉด ํ‘œ๋„ ์ž…๋ ฅํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ <๋ฐœํ–‰> ์ด๋ผ๋Š” ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ํฌ์ŠคํŒ…์ด ๋œ๋‹ค. ์ด๋•Œ ์ž…๋ ฅํ•œ ์ œ๋ชฉ, ๋ณธ๋ฌธ ๋‚ด์šฉ๊ณผ ๊ฐ™์€ ์ •๋ณด๋Š” ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „์†ก๋œ๋‹ค. request ๊ธฐ๋ณธ ๊ฐ์ฒด๋Š” ํด๋ผ์ด์–ธํŠธ(์›น ๋ธŒ๋ผ์šฐ์ €)๊ฐ€ ์ „์†กํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.


     ๋ฉ”์„œ๋“œ

    ๋ฆฌํ„ด ํƒ€์ž… 

    ์„ค๋ช…

    getParameter(String name) 

    String 

    ์ด๋ฆ„์ด name์ธ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์„ ๊ตฌํ•œ๋‹ค. ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ null ๋ฆฌํ„ด. 

    getParameterValues(String name) 

    String[] 

    ์ด๋ฆ„์ด name์ธ ๋ชจ๋“  ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์„ ๋ฐฐ์—ด๋กœ ๊ตฌํ•œ๋‹ค. ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ null ๋ฆฌํ„ด 

    getParameterNames() 

    java.util.Enumeration 

    ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ „์†กํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ด๋ฆ„์„ ๊ตฌํ•œ๋‹ค. 

    getParameterMap() 

    java.util.Map 

    ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ „์†กํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๋งต์„ ๊ตฌํ•œ๋‹ค. (๋งต  -  <ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„, ๊ฐ’> ) 




    1-3 request.setCharaterEncoding("์บ๋ฆญํ„ฐ์…‹");


    ์ด๋Š” HTTPํ”„๋กœํ† ์ฝœ์˜ ์ „์†ก ๋ฐฉ์‹์„ ์กฐ๊ธˆ ๋‹ค๋ค„์•ผ ํ•˜๋Š”๋ฐ ์œ„์˜ ๋ฉ”์„œ๋“œ๋กœ ์ธ์ฝ”๋”ฉ์„ ํ•˜๋Š” ๊ฒƒ์€ post๋ฐฉ์‹์—์„œ ๋ฐ์ดํ„ฐ์˜์—ญ์˜ ๋‚ด์šฉ์ด๋‹ค. GET๋ฐฉ์‹์€ ํ•ด๋‹น๋˜์ง€ ์•Š๋Š”๋ฐ ๊ทธ ์ด์œ ๋Š” ์ € ๋ฉ”์„œ๋“œ๋Š” HTTPํ”„๋กœํ† ์ฝœ์˜ ๋ฐ์ดํ„ฐ ์˜์—ญ์„ ์ธ์ฝ”๋”ฉ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— GET๋ฐฉ์‹์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฅผ URI ๋’ค์— ๋ถ™์ด๋Š” ๊ฒƒ์€ ํ•ด๋‹น๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋Ÿผ URL์€ ์–ด๋–ป๊ฒŒ ์ธ์ฝ”๋”ฉ์ด ๋ ์ง€ ์‚ดํŽด๋ณด์ž.




    GET ๋ฐฉ์‹ ์ด์šฉ ์‹œ ํŒŒ๋ผ๋ฏธํ„ฐ ์ „์†ก ๋ฐฉ๋ฒ• 

    ์ธ์ฝ”๋”ฉ ๊ฒฐ์ • 

    <a>  ํƒœ๊ทธ์˜ ๋งํฌ ํƒœ๊ทธ์— ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด ์ถ”๊ฐ€ 

    ์›น ํŽ˜์ด์ง€ ์ธ์ฝ”๋”ฉ ์‚ฌ์šฉ 

    HTML ํผ(Form)ํƒœ๊ทธ์˜ method ์†์„ฑ๊ฐ’์„ GET์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ์ „์†ก 

    ์›น ํŽ˜์ด์ง€ ์ธ์ฝ”๋”ฉ ์‚ฌ์šฉ 

    ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ฃผ์†Œ์— ์ง์ ‘ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด ํฌํ•จํ•œ URL ์ž…๋ ฅ 

    ์›น ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ๋‹ค๋ฆ„ 


    ๊ทธ๋Ÿผ GET๋ฐฉ์‹์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ธ์ฝ”๋”ฉ์ด ๋ถˆ๊ฐ€๋Šฅํ• ๊นŒ? ๊ทธ๊ฑด ์•„๋‹ˆ๋‹ค. ํ†ฐ์บฃ์—์„œ๋Š” ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ์ด๋Š” ๋ฒ„์ „ 6๋ถ€ํ„ฐ ์ ์šฉ๊ฐ€๋Šฅํ• ๊ฒƒ์ด๋‹ค. 


    • [ํ†ฐ์บฃ์„ค์น˜๋””๋ ‰ํ„ฐ๋ฆฌ]/conf/server.xml ํŒŒ์ผ์—์„œ <Connector>์˜ useBodyEncodingForURI ์†์„ฑ์˜ ๊ฐ’์„ true๋กœ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• (๊ธฐ์กด์— ์—†๋Š” ์†์„ฑ์ด๋ผ๋ฉด ์ƒˆ๋กœ ๊ธฐ์ž…)
    • [ํ†ฐ์บฃ์„ค์น˜๋””๋ ‰ํ„ฐ๋ฆฌ]/conf/server.xml ํŒŒ์ผ์—์„œ <Connector>์˜ URIEncoding ์†์„ฑ์˜ ๊ฐ’์„ ์›ํ•˜๋Š” ์บ๋ฆญํ„ฐ์…‹์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•(๊ธฐ์กด์— ์—†๋Š” ์†์„ฑ์ด๋ผ๋ฉด ์ƒˆ๋กœ ๊ธฐ์ž…)

     ์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ useBodyEncodingForURI ์†์„ฑ์˜ ๊ฐ’์„ true๋กœ ์„ค์ •ํ•˜๋ฉด request.setCharacterEncoding์ด GET๋ฐฉ์‹์—๋„ ๋จนํžˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์›ํ•˜๋Š” ์บ๋ฆญํ„ฐ ์…‹์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

     ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ๋ฐ”๋กœ ์ง์ ‘ ์›ํ•˜๋Š” ์บ๋ฆญํ„ฐ์…‹์œผ๋กœ ์ง€์ •ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ์—๋Š” request.setCharacterEncoding์ด ๋จนํžˆ์ง€ ์•Š๋Š”๋‹ค.


    1-4 ์š”์ฒญ ํ—ค๋” ์ •๋ณด์˜ ์ฒ˜๋ฆฌ


    ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” HTTP ํ”„๋กœํ† ์ฝœ์— ๋”ฐ๋ผ์„œ ์š”์ฒญ ์ •๋ณด๋ฅผ ์›น ์„œ๋ฒ„์— ์ „์†กํ•œ๋‹ค. JSP์˜ request ๊ธฐ๋ณธ ๊ฐ์ฒด๋Š” ์ด๋Ÿฌํ•œ ํ—ค๋” ์ •๋ณด๋ฅผ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.


     ๋ฉ”์„œ๋“œ

    ๋ฆฌํ„ด ํƒ€์ž… 

    ์„ค๋ช… 

    getHeader(String name) 

    String 

    ์ง€์ •ํ•œ ์ด๋ฆ„์˜ ํ—ค๋” ๊ฐ’์„ ๊ตฌํ•œ๋‹ค 

    getHeaders(String name) 

    java.util.Enumeration 

    ์ง€์ •ํ•œ ์ด๋ฆ„์˜ ํ—ค๋” ๋ชฉ๋ก์„ ๊ตฌํ•œ๋‹ค. 

    getHeaderNames() 

    java.util.Enumeration 

    ๋ชจ๋“  ํ—ค๋”์˜ ์ด๋ฆ„์„ ๊ตฌํ•œ๋‹ค 

    getIntHeader(String name) 

    int 

    ์ง€์ •ํ•œ ํ—ค๋”์˜ ๊ฐ’์„ ์ •์ˆ˜ ๊ฐ’์œผ๋กœ ์ฝ์–ด์˜จ๋‹ค. 

    getDataHeader(String name) 

    long 

    ์ง€์ •ํ•œ ํ—ค๋”์˜ ๊ฐ’์„ ์‹œ๊ฐ„ ๊ฐ’์œผ๋กœ ์ฝ์–ด์˜จ๋‹ค.(์ด ๋•Œ ์‹œ๊ฐ„์€ 1970๋…„ 1์›” 1์ผ ์ดํ›„๋กœ ํ˜๋Ÿฌ๊ฐ„ 1/1000์ดˆ ๋‹จ์œ„์˜ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.์™œ?)