이번 예제는 get과 post의 차이를 확인해보자.


코드를 복사 붙여넣기를 하면 무조건 오류난다.


왜냐하면 코드에 경로 관련해서 정보를 많이 입력하기 때문에


한 줄 한 줄 복사 붙여넣기 하거나 읽으면서 해보길 권장.


폴더 구조는 다음과 같다.




프로그램 흐름과 작성 순서는


index.html - testPerson1.html


TestPersonServlet.java - result.jsp


testPerson2.html - TestPersonServlet2.java








index.html



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h1>서블릿 테스트</h1>
    <h2><a href="views/testPerson1.html">1. 개인 취향 테스트(get)</a></h2>
    <h2><a href="views/testPerson1.html">2. 개인 취향 테스트(post)</a></h2>
   
   
   
</body>
</html>





testPerson1.html



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h2>개인 취향 테스트(GET)</h2>
    당신의 취향을 테스트 합니다.<br>
    데이터를 입력 후 확인 버튼을 누르세요<br>
   
    <form action="/w3/testPerson" name="personFrm" method="get">   
        <ul style="list-style: none; line-height: 200%">
            <li>이름은?
                <input type="text" name="name" size="10">
            </li>
            <li>좋아하는 색?
                <input type="radio" name="color" value="빨강" id="red">
                <label for="red">빨강</label>
                <input type="radio" name="color" value="파랑" id="blue">
                <label for="blue">파랑</label>
                <input type="radio" name="color" value="노랑" id="yellow">
                <label for="yellow">노랑</label>
                <input type="radio" name="color" value="초록" id="green">
                <label for="green">초록</label>
            </li>
            <li>좋아하는 동물은?
                <select name="animal">
                    <option value="강아지">강아지</option>
                    <option value="고양이">고양이</option>
                    <option value="병아리">병아리</option>
                </select>
            </li>
            <li>좋아하는 음식?(모두 고르세요)
                <input type="checkbox" name="food" id="food1" value="짜장면">
                <label for="food1">짜장면</label>
                <input type="checkbox" name="food" id="food2" value="짬뽐">
                <label for="food1">짬뽐</label>
                <input type="checkbox" name="food" id="food3" value="탕수육">
                <label for="food1">탕수육</label>
                <input type="checkbox" name="food" id="food4" value="양장피">
                <label for="food1">양장피</label>
                <input type="checkbox" name="food" id="food5" value="팔보채">
                <label for="food1">팔보채</label>
            </li>
            <li>
                <br>
                <input type="submit" name="btnOk" id="btnOk" value="확인">
                &nbsp; &nbsp;
                <input type="reset" value="취소">
            </li>
           
       
        </ul>
    </form>
</body>
</html>






TestPersonServlet.java




package controller;

import java.io.IOException;
import java.io.PrintWriter;

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("/testPerson")
public class TestPersonServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
      
    public TestPersonServlet() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 첫 번째 파라미터인 HttpServletRequest는
        // 웹 브라우저에서 사용자가 요청한 내용을 받아주는 용도로 쓰인다.
        // 두 번째 파라미터인 HttpServletResponse는
        // 첫 번째 파라미터에서 처리한 결과를 웹 브라우저를 통해 사용자에게 보여주기 위한 용도로 쓰인다.
       
        String name = request.getParameter("name");
        String color = request.getParameter("color");
        String animal = request.getParameter("animal");
       
        String[] foodArr = request.getParameterValues("food");
       
        System.out.println("name : " + name + "\r\n" +
                            "color : " + color + "\r\n" +
                            "animal : "+ animal);
       
        for (int i = 0; i < foodArr.length; i++) {
            System.out.println("foodArr [" + i + "] : " + foodArr[i]);
        }
       
        // Response 핸들링 : 화면출력
        response.setContentType("text/html; charset=UTF-8");
       
        PrintWriter out = response.getWriter();
       
        out.println("<html>"
                + "<head>"
                + "<title>개인 취향 테스트 결과 화면</title>"
                + "</head>"
                + "<body>"
                + "<h2 style='color: red;'>개인 취향 테스트 결과(GET)</h2>");
        out.printf("<span style='color: lightblue;'>%s</span>님의 개인 취향은 <br><br>", name);
        out.printf("<span style='color: lightgreen; font-weight: bold;'>%s</span>, <span style='color: lightred; font-weight: bold;'>%s</span>를 좋아합니다<br><br>", color, animal);
        out.println("좋아하는 음식은 ");
        for (int i = 0; i < foodArr.length; i++) {
            if (i == 0) {
                out.printf("%s", foodArr[i]);
            } else {
                out.printf(", %s", foodArr[i]);
            }
        }
        out.println("입니다."
                + "</body>"
                + "</html>");
       
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}



result.jsp




<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    String name = (String)request.getAttribute("name");
    String color = (String)request.getAttribute("color");
    String animal = (String)request.getAttribute("animal");
    String foods = (String)request.getAttribute("foods");
    String recommendation = (String)request.getAttribute("recommendation");
%>

<!DOCTYPE html>
<!-- 꺽쇠 + % 키워드로 자바 코드를 입력할 수 있다. -->
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h2>개인 취향 테스트 결과(POST) - jsp</h2>
    <span style="color: lightblue; font-weight: bold;"><%= name %></span>님의 개인 취향은
    <br><br>
    <span style="color: lightgreen; font-weight: bold;"><%= color %></span>색을 좋아하고
    <span style="color: lightred; font-weight: bold;"><%= animal %></span>를 좋아합니다.
    <br><br>
    좋아하는 음식은 <%= foods %>입니다.
    <br>
    <h3>둘리의 추천!</h3>
    <p><%= recommendation %> 어떠세요?</p>

</body>
</html>





testPerson2.html




<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h2>개인 취향 테스트(POST)</h2>
    당신의 취향을 테스트 합니다.<br>
    데이터를 입력 후 확인 버튼을 누르세요<br>
   
    <form action="/w3/testPerson2" name="personFrm" method="post">   
        <ul style="list-style: none; line-height: 200%">
            <li>이름은?
                <input type="text" name="name" size="10">
            </li>
            <li>좋아하는 색?
                <input type="radio" name="color" value="빨강" id="red">
                <label for="red">빨강</label>
                <input type="radio" name="color" value="파랑" id="blue">
                <label for="blue">파랑</label>
                <input type="radio" name="color" value="노랑" id="yellow">
                <label for="yellow">노랑</label>
                <input type="radio" name="color" value="초록" id="green">
                <label for="green">초록</label>
            </li>
            <li>좋아하는 동물은?
                <select name="animal">
                    <option value="강아지">강아지</option>
                    <option value="고양이">고양이</option>
                    <option value="병아리">병아리</option>
                </select>
            </li>
            <li>좋아하는 음식?(모두 고르세요)
                <input type="checkbox" name="food" id="food1" value="짜장면">
                <label for="food1">짜장면</label>
                <input type="checkbox" name="food" id="food2" value="짬뽐">
                <label for="food1">짬뽐</label>
                <input type="checkbox" name="food" id="food3" value="탕수육">
                <label for="food1">탕수육</label>
                <input type="checkbox" name="food" id="food4" value="양장피">
                <label for="food1">양장피</label>
                <input type="checkbox" name="food" id="food5" value="팔보채">
                <label for="food1">팔보채</label>
            </li>
            <li>
                <br>
                <input type="submit" name="btnOk" id="btnOk" value="확인">
                &nbsp; &nbsp;
                <input type="reset" value="취소">
            </li>
           
       
        </ul>
    </form>
</body>
</html>





TestPersonServlet2.java




package controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
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("/testPerson2")
public class TestPersonServlet2 extends HttpServlet {
    private static final long serialVersionUID = 1L;
      
    public TestPersonServlet2() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // request 문자셋 변경
        // 넘겨받은 데이터가 한글일 경우(영어가 아닐 경우) 인코딩 처리를 해야 한다.
        // [중요] request.getParameter()보다 먼저 기술해야 한다.
        request.setCharacterEncoding("UTF-8");
       
        String name = request.getParameter("name");
        String color = request.getParameter("color");
        String animal = request.getParameter("animal");
       
        String[] foodArr = request.getParameterValues("food");
       
        String foods = "";
       
        for (int i = 0; i < foodArr.length; i++) {
            if (i == 0) {
                foods += foodArr[i];
            } else {
                foods += ", " + foodArr[i];
            }
        }
       
       
        // 사용자가 좋아하는 색을 기준으로 상품을 추천해 줌
        String recommendation = "";
        switch (color) {
        case "빨강":
            recommendation = "빨간 페라리";
            break;
        case "노랑":
            recommendation = "노란 카레";
            break;
        case "초록":
            recommendation = "초록 붕어빵";
            break;
        case "파랑":
            recommendation = "파란 캔디바";
            break;
        }
       
        response.setContentType("text/html; charset=UTF-8");
       
        request.setAttribute("name", name);
        request.setAttribute("color", color);
        request.setAttribute("animal", animal);
        request.setAttribute("foods", foods);
        request.setAttribute("recommendation", recommendation);
       
        RequestDispatcher view
                = request.getRequestDispatcher("views/result.jsp");
        view.forward(request, response);
       
       
       
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}



특별히 어려운 부분은 없다.

+ Recent posts