ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Servlet ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด์™€ ์š”์ฒญ-์‘๋‹ต์ฒ˜๋ฆฌ
    JAVA 2020. 9. 20. 23:48

    ๐ŸŽฏ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด์˜ ๋ผ์ดํ”„์‚ฌ์ดํด, ์š”์ฒญ์ฒ˜๋ฆฌ์™€ ์‘๋‹ต์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณธ๋‹ค.

     

     

     

     

    HttpServlet API


    ์„œ๋ธ”๋ฆฟ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ API๋กœ์„œ ์ผ๋ฐ˜ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ์ถ”์ƒํด๋ž˜์Šค๊ฐ€ ์ œ๊ณต๋œ๋‹ค.

    extends Servlet ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค Servlet์„ ์ƒ์†๋ฐ›๋Š”๋‹ค. ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋™์ž‘ํ•˜๋ ค๋ฉด ์ด๊ฑธ ์ƒ์†๋ฐ›์•„์•ผํ•œ๋‹ค.

     

     

    HttpServletRequest API

    HTTP ์š”์ฒญ์ •๋ณด ์ฒ˜๋ฆฌ์ž‘์—…์„ ๋‹ด๋‹นํ•˜๋Š” API์ด๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ์ •๋ณด๋Š” ์š”์ฒญ์ •๋ณด์— ๋‹ด๊ฒจ ์ „๋‹ฌ๋˜๊ณ  ์„œ๋ฒ„์—์„œ๋Š” ๊ทธ ์š”์ฒญ์ •๋ณด ๊ฐ’์„ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ์ด ๊ฐ์ฒด์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

    -์ฃผ์š” ํ•ต์‹ฌ ๊ธฐ๋Šฅ

    • ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ( ํผ ๋ฐ์ดํ„ฐ )
    • ํ•œ๊ธ€ ์ธ์ฝ”๋”ฉ
    • ์š”์ฒญ header ์–ป๊ธฐ
    • ์„ธ์…˜ ์ฒ˜๋ฆฌ
    • ์ฟ ํ‚ค ์ฒ˜๋ฆฌ
    • ์š”์ฒญ scope์— ๋ฐ์ดํ„ฐ ์ €์žฅ
    • forward ์ฒ˜๋ฆฌ

     

    HttpServletResponse API

    HTTP Response ๊ด€๋ จ ์ฒ˜๋ฆฌ์ž‘์—…์„ ๋‹ด๋‹นํ•˜๋Š” API์ด๋‹ค.

    -์ฃผ์š” ํ•ต์‹ฌ ๊ธฐ๋Šฅ

    • Header์— ์ €์žฅ
    • ์ฟ ํ‚ค ์ €์žฅ
    • ์‘๋‹ต์ฒ˜๋ฆฌ(html์ž‘์„ฑํ›„ ์ œ๊ณต)
    • redirect ์ฒ˜๋ฆฌ

     

     

     

     

    ์„œ๋ธ”๋ฆฟ Life Cycle


    ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์‚ญ์ œ ์ƒ๋ช…์ฃผ๊ธฐ

    Tomcat ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด 3 ๊ฐ€์ง€ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค.

    1. init()

    ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๊ฐ€ ์ฒ˜์Œ ๋งŒ๋“ค์–ด์งˆ ๋•Œ ํ•œ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋œ๋‹ค. ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๊ตฌํ˜„๋œ ํ™ˆํŽ˜์ด์ง€์— ์ฒ˜์Œ ์ ‘์†ํ•  ๋•Œ ์ด init ๋ฉ”์†Œ๋“œ๊ฐ€ ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋ฅผ ์ตœ์ดˆ๋กœ ์ƒ์„ฑํ•˜๋ฉด ๊ทธ ๊ฐ์ฒด๋ฅผ ๊ณ„์† ์žฌ์‚ฌ์šฉํ•œ๋‹ค. ์„œ๋ธ”๋ฆฟ์—์„œ ํ•„์š”ํ•œ ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์ž‘์—…์„ ํ•œ๋‹ค. jdbc๋“œ๋ผ์ด๋ฒ„, ์œ ์ €์•„์ด๋”” url์„ค์ •

    2. service()

    ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ๋œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›ํ•˜๋Š” ๋™์ ์ธ ์ฒ˜๋ฆฌ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. doGet, doPost ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•œ๋‹ค.

    3. destroy()

    ์„œ๋ฒ„๊ฐ€ ์„œ๋น„์Šค๋ฅผ ์ค‘์ง€ํ•  ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๊ฐ€ ์‚ญ์ œ๋˜๋ฉฐ destroy()๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.

     

    package com.controller;
    
    import java.io.IOException;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebServlet("/LifeCycleServlet")
    public class LifeCycleServlet extends HttpServlet {
    
        public void init(ServletConfig config) throws ServletException {
            System.out.println("init()ํ˜ธ์ถœ๋จ===============");
        }
    
        public void destroy() {
            System.out.println("destroy()ํ˜ธ์ถœ๋จ===============");
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                                                throws ServletException, IOException {
            System.out.println("doGet()ํ˜ธ์ถœ๋จ===============");
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                                                    throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    ์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์›น๋ธŒ๋ผ์šฐ์ €์—์„œ ์ƒˆ๋กœ๊ณ ์นจํ•  ๋•Œ๋งˆ๋‹ค doget() ๋ฉ”์†Œ๋“œ๋งŒ ํ˜ธ์ถœ๋œ๋‹ค. init() ๋ฉ”์†Œ๋“œ๋Š” ์ตœ์ดˆ ์š”์ฒญ์‹œ ๋”ฑ ํ•œ ๋ฒˆ ์‹คํ–‰๋˜๋ฉฐ service ๋ฉ”์†Œ๋“œ์ธ doGet()๊ณผ doPost()๋Š” ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ๊ณ„์† ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

     

     

     

    ์„œ๋ธ”๋ฆฟ ์‘๋‹ต ์ฒ˜๋ฆฌ


    ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ์š”์ฒญ์ด ์˜ค๋ฉด ์„œ๋ธ”๋ฆฟ์€ ์ฒ˜๋ฆฌ๋œ ๊ฒฐ๊ณผ๋ฅผ html ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•˜์—ฌ ์‘๋‹ต ์ฒ˜๋ฆฌํ•œ๋‹ค.

    ์„œ๋ธ”๋ฆฟ์˜ ์‘๋‹ต์ฒ˜๋ฆฌ๋Š” HttpServletResponse ๊ฐ์ฒด์˜ 2๊ฐ€์ง€ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

     

    response.setContentType(“text/html; charset=UTF-8”);

    ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต์ •๋ณด๋ฅผ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ์˜ ๋ฌธ์„œํƒ€์ž…(MIME ํƒ€์ž…)๊ณผ ํ•œ๊ธ€์ฒ˜๋ฆฌ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค. 

     

    PrintWriter out = response.getWriter();

    ์‘๋‹ต ์ฒ˜๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž๋ฐ”I/O ๊ธฐ์ˆ ์„ ์ด์šฉํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ถœ๋ ฅ์„ ์œ„ํ•œ OutputStream(Byte) ๋˜๋Š” Writer(Char) API๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ๋œ๋‹ค.

    ์™ธ๋ถ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ธธ์„ ์ŠคํŠธ๋ฆผ์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ž๋ฐ”ํ”„๋กœ๊ทธ๋žจ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ค๋Š” ๊ธธ์„ ์ธํ’‹์ŠคํŠธ๋ฆผ, ์™ธ๋ถ€๋กœ ๋‚˜๊ฐ€๋Š”๊ธธ์„ ์ถœ๋ ฅ์ŠคํŠธ๋ฆผ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์œ„ ๋ฉ”์†Œ๋“œ์— ๋ถ™์–ด์žˆ๋Š” Writer๋Š” ์ž๋ฐ”์—์„œ ์™ธ๋ถ€๋กœ ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ์„ ์œ„ํ•œ ์ถœ๋ ฅ์ŠคํŠธ๋ฆผ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ์ถœ๋ ฅ์ŠคํŠธ๋ฆผ์„ out์ด๋ผ๋Š” ์ถœ๋ ฅ์ŠคํŠธ๋ฆผ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•˜๊ณ  ์žˆ๋‹ค.

     

     

    ์‘๋‹ต์ฒ˜๋ฆฌ ์—ฐ์Šต 1

    @WebServlet("/TestServlet")
    public class TestServlet extends HttpServlet {
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
            //0. ์‚ฌ์šฉ์ž ์š”์ฒญ ๋ฐ์ดํ„ฐ ๋ฝ‘๊ธฐ
            //1. ์‚ฌ์šฉ์ž ์š”์ฒญ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ
            //2. ์š”์ฒญ ์™„๋ฃŒ ํ›„ ์‘๋‹ต์ฒ˜๋ฆฌ
            response.setContentType("text/html;charset=UTF-8"); //2-1. HTML CONTENT ํƒ€์ž…์ง€์ •
            PrintWriter out = response.getWriter(); //2-2. PrintWriter ์–ป๊ธฐ
            out.print("<html><body>"); //2-3. ์‘๋‹ตํ•  html์ฝ”๋“œ ์ž‘์„ฑ
            out.print("<h1>์„œ๋ธ”๋ฆฟ ์‘๋‹ต์ฒ˜๋ฆฌ ์‹ค์Šต</h2>");
            out.print("<p>Hello World</p>");
            out.print("<body></html>");
        }

    0๋ฒˆ๊ณผ 1๋ฒˆ ๊ณผ์ •์€ ์š”์ฒญ์ฒ˜๋ฆฌ ๊ณผ์ •์ด๋‹ค. 2๋ฒˆ ์‘๋‹ต์ฒ˜๋ฆฌ ๊ณผ์ •์„ ๋ณด๋ฉด ๋จผ์ € ์‘๋‹ต์ •๋ณด ํƒ€์ž…์„ ์ง€์ •ํ•˜๊ณ  ์ถœ๋ ฅ์ŠคํŠธ๋ฆผ์„ ์–ป์–ด์™€์„œ html ์‘๋‹ตํ™”๋ฉด์„ ์ž‘์„ฑํ•˜๊ณ  ์žˆ๋‹ค.

     

    ์‘๋‹ต์ฒ˜๋ฆฌ ์—ฐ์Šต 2

    @WebServlet("/info")
    public class info extends HttpServlet {
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
    		response.setContentType("text/html;charset=UTF-8");
    		PrintWriter out = response.getWriter();
    		out.print("<html><body>");
    		String my = "<table border='1'>";
    			   my += "<tr>";
    			   my += "<td>์ด๋ฆ„</td>";
    			   my += "<td>๋‚˜์ด</td>";
    			   my += "<td>์ฃผ์†Œ</td>";
    			   my += "</tr>";
    			   my += "<tr>";
    			   my += "<td>ํ™๊ธธ๋™</td>";
    			   my += "<td>20</td>";
    			   my += "<td>์„œ์šธ</td>";
    			   my += "</tr>";
    			   my += "</table>";
    		out.print(my);
    		out.print("<body></html>");
    	}
    }

    ์‘๋‹ต์ฒ˜๋ฆฌ ํ™”๋ฉด์— ํ…Œ์ด๋ธ”์„ ์ž…๋ ฅํ•œ๋‹ค.

     

     

     

    ์„œ๋ธ”๋ฆฟ ์š”์ฒญ ์ฒ˜๋ฆฌ


    form ํƒœ๊ทธ ์†์„ฑ๊ณผ ์งˆ์˜๋ฌธ์ž์—ด

    ํผ์€ ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์ž‘์—… ๋‹จ์œ„๋กœ ๋‚˜๋‰˜์–ด ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. (๊ฒ€์ƒ‰ํผ, ๋กœ๊ทธ์ธํผ ๋”ฐ๋กœ๋”ฐ๋กœ) ํผ์— ์ž…๋ ฅํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์งˆ์˜๋ฌธ์ž์—ด์ด๋ผ๊ณ  ํ•œ๋‹ค. submit ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์„œ ์ž…๋ ฅํ•œ ๊ฐ’์„ ์„œ๋ฒ„์— ์ „์†กํ•˜๋ฉด ์„œ๋ฒ„๋Š” ์งˆ์˜๋ฌธ์ž์—ด์„ ๊บผ๋‚ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

    action ์†์„ฑ : submit ๋ฒ„ํŠผ ํด๋ฆญํ–ˆ์„ ๋•Œ, ์›น ์„œ๋ฒ„์—์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์›น ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ง€์ •ํ•œ๋‹ค. html, jsp, servlet ๋ชจ๋‘ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

    method ์†์„ฑ : ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์›น ์„œ๋ฒ„๋กœ ์š”์ฒญํ•˜๋Š” ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ GET, POST ๋“ฑ์œผ๋กœ ์ง€์ •ํ•œ๋‹ค.

    name ์†์„ฑ : ์š”์†Œ์— ์•„์ด๋””๋‚˜ ํด๋ž˜์Šค์ฒ˜๋Ÿผ ์ด๋ฆ„์„ ๋ถ™์ผ ์ˆ˜ ์žˆ๋Š” ์†์„ฑ์ธ๋ฐ, ์งˆ์˜๋ฌธ์ž์—ด์„ ์ „๋‹ฌํ• ๋•Œ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ ์ค‘์š”ํ•œ ์†์„ฑ์ด๋‹ค. ์ฒดํฌ๋ฐ•์Šค ํƒ€์ž…์ผ ๊ฒฝ์šฐ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์€ ๋‹ค ๊ฐ™์€ ์ด๋ฆ„์„ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค. <select>๋Š” ์˜ต์…˜ ํƒœ๊ทธ๊ฐ€ ์•„๋‹Œ ์…€๋ ‰ํŠธ ํƒœ๊ทธ์— ๋„ค์ž„์„ ์ง€์ •ํ•œ๋‹ค.

     

     

    ์š”์ฒญ์ •๋ณด ํ•œ๊ธ€์ฒ˜๋ฆฌ

    request.setCharacterEncoding("utf-8");

    ์ผ๋‹จ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๊ธ€๋กœ ๋จผ์ € ์ธ์ฝ”๋”ฉ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

     

     

    ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ

    ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ๋Š” name=value ์Œ์œผ๋กœ ์ „๋‹ฌ๋œ๋‹ค.

     

     

    1. getParameter(name)

    ์งˆ์˜ ๋ฌธ์ž์—ด๋กœ ๋„˜์–ด์˜จ ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ์ถ”์ถœํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. name์ด ์ค‘๋ณต๋˜์ง€ ์•Š๊ณ  ์œ ์ผํ•˜๊ฒŒ ํ•˜๋‚˜๋งŒ ๋„˜์–ด์˜ฌ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฆฌํ„ดํƒ€์ž…์ด ๋ฌธ์ž์—ด์ด๊ธฐ ๋•Œ๋ฌธ์— ํผ์—์„œ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜๋”๋ผ๋„ ์ด๊ฑธ๋กœ ์ถ”์ถœํ•˜๋ฉด ๊ณ„์‚ฐ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ŠคํŠธ๋ง ํƒ€์ž…์ด ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ˆซ์ž๋ฅผ ์ถ”์ถœํ•œ ํ›„์—” ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” Integer.parseInt() ์ž‘์—…์ด ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•˜๋‹ค.

    <h1>๋กœ๊ทธ์ธํผ</h1>
    <form action="LoginServlet" method="post">
    ์•„์ด๋””:<input type="text" name="userid"><br>
    ๋น„๋ฐ€๋ฒˆํ˜ธ:<input type="text" name="passwd"><br>
    <input type="submit" value="๋กœ๊ทธ์ธ">
    </form>

    ํผ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๊ทธ์ธ์„œ๋ธ”๋ฆฟ ํŽ˜์ด์ง€์— ํฌ์ŠคํŠธ ๋ฐฉ์‹์œผ๋กœ ๋ณด๋‚ธ๋‹ค.

    @WebServlet("/LoginServlet")
    public class LoginServlet extends HttpServlet {
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("doGet");
    
            //post ํ•œ๊ธ€์ฒ˜๋ฆฌ
            request.setCharacterEncoding("utf-8");
    
            //์š”์ฒญ์ž‘์—… ==> ํŒŒ๋ผ๋ฏธํ„ฐ ์–ป๊ธฐ(ํด๋ผ์ด์–ธํŠธ์—์„œ ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ request์—์„œ name์„ ์ด์šฉํ•˜์—ฌ ๊ฐ’์„ ํŒŒ์‹ฑ)
            String userid = request.getParameter("userid");
            String passwd = request.getParameter("passwd");
    
            System.out.println(userid+"\t"+passwd);
    
            //์‘๋‹ต์ฒ˜๋ฆฌ //๋ธŒ๋ผ์šฐ์ €์— ๋ณด์—ฌ์ค„ ๋‚ด์šฉ
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            out.print("<html><body>");
            out.print("์ด๋ฆ„์€:"+userid+"<br>");
            out.print("๋‚˜์ด๋Š”:"+passwd);
            out.print("</body></html>");
        }

    ํผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์˜ค๋Š” ์ถ”์ถœ์ž‘์—…์„ ํŒŒ์‹ฑํ•œ๋‹ค๊ณ  ๋ถ€๋ฅธ๋‹ค. ์งˆ์˜๋ฌธ์ž์—ด์„ input์— ์ง€์ •ํ•œ ๋„ค์ž„์œผ๋กœ ๊บผ๋‚ด์˜ค๋ฉด์„œ ์š”์ฒญ์ž‘์ฒ˜๋ฆฌ๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค. ๋ณ€์ˆ˜์— ํ• ๋‹นํ•œ ๋’ค ๋ธŒ๋ผ์šฐ์ €์— ๋ณด์—ฌ์ค„ ๋‚ด์šฉ์„ ์‘๋‹ต์ฒ˜๋ฆฌํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ๋ณ€์ˆ˜๊ฐ’์€ null๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

     

     

    2. getParameterValues(name)

    ์„ ํƒ๊ฐ’ ์ฝ˜์†” ์ถœ๋ ฅ

    <h1>ํผ ์‹ค์Šต</h1>
        <h3>์ข‹์•„ํ•˜๋Š” ๊ณผ์ผ ์„ ํƒ</h3>
        <form action="TestServlet" method="get">
            ์‚ฌ๊ณผ:<input type="checkbox" name="fruit" value="apple"><br>
            ๋ฐ”๋‚˜๋‚˜:<input type="checkbox" name="fruit" value="banana"><br>
            ์ˆ˜๋ฐ•:<input type="checkbox" name="fruit" value="watermelon"><br>
            <input type="submit" value="์ „์†ก">
        </form>
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("utf-8");
    
            //name์€ ํ•˜๋‚˜๊ณ  value๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ธ ๊ฒฝ์šฐ, ์—ฌ๋Ÿฌ๊ฐœ ๊ฒฐ๊ณผ๋ฅผ String[]๋กœ ๋ฆฌํ„ด
            String [] fruits = request.getParameterValues("fruit");
    
            for (String s : fruits) {
                System.out.println(s);
            }
        }

    ์ฒดํฌ๋ฐ•์Šค๊ฐ™์€ ๊ฒฝ์šฐ name์˜ value๋ฅผ ์ŠคํŠธ๋งํƒ€์ž… ๋ฐฐ์—ด๋กœ ๋ฝ‘์•„์˜จ๋‹ค. ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ฐ’์ด ์ „๋‹ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๋ฒˆ์— ๋ชจ๋“  ๊ฐ’์„ ์ถ”์ถœํ•˜์—ฌ ์ŠคํŠธ๋งํƒ€์ž… ๋ฐฐ์—ด๋กœ ๋ฐ›๋Š”๋‹ค. ๋‹ค์ค‘์„ ํƒ๋˜๋Š” ์ž…๋ ฅ์–‘์‹๊ฐ’์„ ์ถ”์ถœํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

    ์œ„ ์ฝ”๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ์งˆ์˜๋ฌธ์ž์—ด ์ค‘ name์ด ํ”„๋ฃป์ธ ๋ชจ๋“  ๊ฐ’์„ ์ฐพ์•„์™€์„œ ์ŠคํŠธ๋ง ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค. ์ด ๋ฐฐ์—ด ์•ˆ์— ์žˆ๋Š” ๋ชจ๋“  ๊ฐ’์„ ์ถœ๋ ฅํ•  ๋• ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค.

     

     

    3. getParameterNames

    Enumerationํƒ€์ž…์œผ๋กœ name๋“ค๋งŒ ์–ป์–ด์˜จ๋‹ค. Enumeration์€ ์š”์†Œ์— ์ ‘๊ทผํ•  ๋•Œ ์ธ๋ฑ์Šค๋‚˜ ํ‚ค๊ฐ€ ์•„๋‹Œ ์ปค์„œ ๊ฐœ๋…์œผ๋กœ ์ ‘๊ทผํ•œ๋‹ค. ์ปค์„œ์˜ ํ˜„์žฌ์œ„์น˜ ๋‹ค์Œ์— ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์žˆ์œผ๋ฉด ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. hasMoreElements(), nextElement() ๋ฉ”์†Œ๋“œ.

    <h1>๋กœ๊ทธ์ธ ํ™”๋ฉด</h1>
    <form action="LoginServlet" method="post">
    ์•„์ด๋””:<input type="text" name="userid"><br>
    ๋น„๋ฐ€๋ฒˆํ˜ธ:<input type="text" name="passwd"><br>
    <input type="submit" value="๋กœ๊ทธ์ธ">
    </form>
    public class LoginServlet extends HttpServlet {
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException {
    
            //post ํ•œ๊ธ€์ฒ˜๋ฆฌ
            request.setCharacterEncoding("utf-8");
    
            //ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ํ‚ค(name)๋งŒ ์–ป๊ธฐ
            Enumeration<String> keys = request.getParameterNames();
    
            //์‘๋‹ต์ฒ˜๋ฆฌ
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            out.print("<html><body>");
            while (keys.hasMoreElements()) {
                String key = (String) keys.nextElement();
                String value = request.getParameter(key);
                out.print(key+"="+value+"<br>");
            }
            out.print("</body></html>");
        }

    ํŒŒ์‹ฑํ•œ ๋ฐ์ดํ„ฐ๋ฅผ Enumeration ํƒ€์ž…์˜ keys ๋ณ€์ˆ˜์— ๋‹ด๊ณ  Enumeration ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด ์ถœ๋ ฅํ•œ๋‹ค.

     

     

    4. getParameterMap

    <h1>๋กœ๊ทธ์ธํผ</h1>
    <form action="LoginServlet" method="post">
    ์•„์ด๋””:<input type="text" name="userid"><br>
    ๋น„๋ฐ€๋ฒˆํ˜ธ:<input type="text" name="passwd"><br>
    
    <input type="checkbox" name="fruit" value="์‚ฌ๊ณผ">์‚ฌ๊ณผ
    <input type="checkbox" name="fruit" value="๋ฐฐ">๋ฐฐ
    
    <input type="submit" value="๋กœ๊ทธ์ธ">
    </form>
    public class LoginServlet extends HttpServlet {
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("doGet");
    
            request.setCharacterEncoding("utf-8");
    
            //mapํ˜•ํƒœ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ ์–ป๊ธฐ
            Map<String, String[]> map = request.getParameterMap(); //ํ‚ค ๋ฐธ๋ฅ˜๋ฅผ ๋งต์œผ๋กœ ๋ฆฌํ„ด
    
            //์‘๋‹ต์ฒ˜๋ฆฌ
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            out.print("<html><body>");
            Set<String> keys = map.keySet(); //keySet()์ด์šฉ key์ „์ฒด๋ฅผ set์œผ๋กœ ๋ฆฌํ„ด
            for (String key : keys) {  //keyset ์ „์ฒด์—์„œ ํ•˜๋‚˜์˜ ํ‚ค๋ฅผ ๊บผ๋‚ด๊ธฐ
                String [] values = map.get(key);  //๋งต์—์„œ key๋ฅผ ์ด์šฉํ•ด value๋กœ ๊บผ๋‚ด์„œ
                String mesg = "";  //์ถœ๋ ฅ๋ฌธ ์ž‘์„ฑ์šฉ ๋ณ€์ˆ˜
                for(String v : values) {
                    mesg += v;
                }
                out.print(key+"="+mesg+"<br>");
            }
            out.print("</body></html>");
        }

    ์งˆ์˜๋ฌธ์ž์—ด์„ ํ•œ๊บผ๋ฒˆ์— Map ํƒ€์ž… ํ‚ค-๋ฐธ๋ฅ˜ ์Œ์œผ๋กœ ์–ป์–ด์™€์„œ map ๋ณ€์ˆ˜์— ์ €์žฅํ•œ๋‹ค. ํ‚ค๊ฐ’์—๋Š” ์ธํ’‹ ์†์„ฑ์˜ name์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๊ณ , ๋ฐธ๋ฅ˜์—” ๊ทธ ์ธํ’‹์— ๋“ค์–ด์˜จ ๋ฐธ๋ฅ˜๊ฐ’์ด ์‚ฌ์šฉ๋œ๋‹ค. ์ด๊ฒŒ ๋งต์œผ๋กœ ํ•œ ์ง์ด ๋˜๊ณ ์žˆ๋‹ค. ๋งต์˜ ์ œ๋„ˆ๋ฆญ ํƒ€์ž…์„ ๋ณด๋ฉด value๋Š” ๋ฐฐ์—ด๋กœ ๋ฐ›๊ณ ์žˆ๋‹ค. value๋Š” ์ค‘๋ณต์ €์žฅํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

    Map์—์„œ ํ‚ค๊ฐ’๋งŒ ์ „์ฒด ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์„ ๋• Set keySet()๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ‚ค๋ฅผ Setํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. keySet()์€ Map์˜ ํ‚ค๋งŒ ๋ฝ‘์•„์„œ ๋ฐ˜๋ณต๋ฌธ ๋Œ๋ฆฌ๋ ค๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ ๋ฉ”์†Œ๋“œ์ผ ๋ฟ Set์œผ๋กœ ํ˜•๋ณ€ํ™˜ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋‹ค.

    ํ‚ค๊ฐ’๋“ค์„ ๋ฐ˜๋ณต๋ฌธ ๋Œ๋ฆฌ๋ฉด์„œ ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” value๋ฅผ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์˜จ ๋’ค values๋ผ๋Š” ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค์„ ๋ฐ˜๋ณต๋ฌธ ๋Œ๋ ค์„œ ๋ฉ”์„ธ์ง€๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

     

     

    ์š”์ฒญ์ฒ˜๋ฆฌ ์—ฐ์Šต 1

    <form action="member" method="post">
      ์ด๋ฆ„<input type="text" name="username"><br>
      ์ฃผ๋ฏผ๋ฒˆํ˜ธ<input type="text" name="ssn"><br>
      ์ทจ๋ฏธ:<br>
      ์•ผ๊ตฌ:<input type="checkbox" name="hobby" value="์•ผ๊ตฌ"><br>
      ๋†๊ตฌ:<input type="checkbox" name="hobby" value="๋†๊ตฌ"><br>
      ์ถ•๊ตฌ:<input type="checkbox" name="hobby" value="์ถ•๊ตฌ"><br>
      ๊ฒฐํ˜ผ:<br>
      ๋ฏธํ˜ผ:<input type="radio" name="marry" value="๋ฏธํ˜ผ">
      ๊ธฐํ˜ผ:<input type="radio" name="marry" value="๊ธฐํ˜ผ">
      <input type="submit" value="๊ฐ€์ž…">
    </form>
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    		throws ServletException, IOException {
     
     request.setCharacterEncoding("utf-8");
    
      String username = request.getParameter("username");
      String ssn = request.getParameter("ssn");
      String gender = (ssn.substring(7,8)).equals("1")?"๋‚จ์ž":"์—ฌ์ž";
      String [] hobby = request.getParameterValues("hobby");
      String mesg = "";
      for (String h : hobby) {
      	mesg += h + " ";
      }
      String marry = request.getParameter("marry");
    
      response.setContentType("text/html;charset=UTF-8");
      PrintWriter out = response.getWriter();
      out.print("<html><body>");
      String my = "์ด๋ฆ„์€ "+username+"<br>";
      my += "์„ฑ๋ณ„์€ "+gender+"<br>";
      my += "์ทจ๋ฏธ๋Š” "+ mesg +"<br>";
      my += "๊ฒฐํ˜ผ ์ƒํƒœ๋Š” "+ marry +"์ž…๋‹ˆ๋‹ค";
      out.print(my);
      out.print("</body></html>");
     }

    substring(์‹œ์ž‘, ๋)๋Š” ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘์œ„์น˜๋ถ€ํ„ฐ ๋์œ„์น˜ ์ „๊นŒ์ง€์˜ ๋‚ด์šฉ์„ ๋ฝ‘์•„๋‚ด๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค.

     

    ์š”์ฒญ์ฒ˜๋ฆฌ ์—ฐ์Šต 2

    <body>
      <b>[ ํ‹ฐ์ผ“ ์˜ˆ๋งค ์ •๋ณด ์ž…๋ ฅ ]</b>
      <hr />
      [ ํ‹ฐ์ผ“ ๊ตฌ๋งค์ผ ๊ธฐ์ค€ : ๋ฏธ์„ฑ๋…„์ž - 19์„ธ ๋ฏธ๋งŒ, ๊ฒฝ๋กœ์ž : ๋งŒ 60์„ธ ์ด์ƒ]
      <form action="reserveTicket" method="post">
        <table border="1">
          <tr>
          	<th>๊ตฌ๋งค๊ด€๋ จ์•ˆ๋‚ด</th>
          	<td>์ƒ๋…„์›”์ผ์„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋งค์ผ ๊ธฐ์ค€ ํ• ์ธ์œจ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.<br>
            ๋ฏธ์„ฑ๋…„์ž(40%), ์„ฑ์ธ(10%),๊ฒฝ๋กœ์šฐ๋Œ€(50%)</td>
          </tr>
          <tr>
          	<th>์ƒ๋…„์›”์ผ</th>
          	<td><input type="text" name="birthday"></input> 
            [ ์ž…๋ ฅ ์˜ˆ :2015/01/05 ]</td>
          </tr>
          <tr>
          	<th>ํ‹ฐ์ผ“์„ ํƒ</th>
          	<td><input type="radio" name="type" value="20000" />์ผ๋ฐ˜(20,000)
          	<input type="radio" name="type" value="30000" />๋กœ์—ด(30,000) 
          	<input type="radio" name="type" value="50000" />VIP(50,000)</td>
          </tr>
          <tr>
          	<th colspan="2">
          	  <input type="submit" value="์˜ˆ์•ฝํ•˜๊ธฐ"></input>
         	  <input type="reset" value="๋‹ค์‹œ์ž…๋ ฅ"></input>
            </th>
          </tr>
        </table>
      </form>
    </body>
    @WebServlet("/reserveTicket")
    public class ReserveTicketServlet extends HttpServlet {
    
    	protected void doPost(HttpServletRequest request, HttpServletResponse response)
        	throws ServletException, IOException {
            
    		request.setCharacterEncoding("UTF-8");
    		String birthday=request.getParameter("birthday");
    		Calendar cal = Calendar.getInstance();
    		int price=Integer.parseInt(request.getParameter("type")); //๊ฐ€๊ฒฉ
    		int age=cal.get(Calendar.YEAR) - Integer.parseInt(birthday.substring(0, 4)) ; //๋‚˜์ด๊ตฌํ•˜๊ธฐ
    		
    		response.setContentType("text/html;charset=utf-8");
    		PrintWriter out=response.getWriter();
    		out.println("<html><head></head><body>");
    		out.println("<b>์ž…๋ ฅํ•œ ์ƒ๋…„์›”์ผ : "+ birthday+", ์„ ํƒํ•œ ํ‹ฐ์ผ“ : "+price+"</b><br/>");
    		
    		String [] grades={"๋ฏธ์„ฑ๋…„์ž", "์„ฑ์ธ", "๊ฒฝ๋กœ์šฐ๋Œ€"}; //ํ™”๋ฉด์— ์ถœ๋ ฅํ•  ๋ฌธ์žฅ ๋ฐฐ์—ด๋กœ ๊ด€๋ฆฌ
    		int grade=0;  //๋“ฑ๊ธ‰์ €์žฅ ๋ณ€์ˆ˜(๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๊ฐ’์œผ๋กœ ์‚ฌ์šฉ)
    		
    		if(age<19){			
    			price-=price*0.4;
    		}else if(age <60){
    			grade=1;
    			price-=price*0.1;
    		}else{
    			grade=2;
    			price-=price*0.6;
    		}
    		
    		out.println("๋‚˜์ด : "+age+"์„ธ, ๋“ฑ๊ธ‰ : "+grades[grade]+", ํ• ์ธ ์ ์šฉ ๊ธˆ์•ก : "+price+"์›");
    		out.println("</body></html>");		
    	}
     }

     

     

     

    ๐Ÿ˜œ NEXT : ์„œ๋ธ”๋ฆฟ ์š”์ฒญ, ์‘๋‹ต์ฒ˜๋ฆฌ ๋ฌธ์ œ ์—ฐ์Šตํ•˜๊ธฐ

    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

๊ฐœ๋ฐœ๊ณต๋ถ€