이번 예제는 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="확인">
<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="확인">
<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);
}
}
특별히 어려운 부분은 없다.