본문 바로가기
Backend/Servlet & JSP

[Servlet & JSP] Servlet parameter 사용 방법

by Forsaken Developer 2023. 5. 20.
728x90
728x90

[Servlet & JSP] Servlet parameter 사용 방법

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>parameter</title>
</head>
<body>
<div>GET 방식의 요청</div>
<form action="formdata" method="GET">
    <label>이름 : </label>
    <input type="text" name="name"/>
    <br>
    <label>나이 : </label>
    <input type="number" name="age"/>
    <br>
    <label>생일 : </label>
    <input type="date" name="birthday"/>
    <br>
    <input type="radio" name="gender" id="male" value="M"/>
    <label for="male">남자</label>
     <input type="radio" name="gender" id="female" value="F"/>
     <label for="female">여자</label>
     <br>
     <label for="female">국적 : </label>
     <select name="national">
         <option value="ko">한국</option>
         <option value="ch">중국</option>
         <option value="jp">일본</option>
     </select>
     <br>
     <label>취미 : </label>
     <input type="checkbox" name="hobbies" id="movie" value="movie"/>
     <label for="movie">영화</label>
     <input type="checkbox" name="hobbies" id="music" value="music"/>
     <label for="movie">음악</label>
     <input type="checkbox" name="hobbies" id="game" value="game"/>
     <label for="movie">게임</label>
     <br>
    <input type="submit" value="GET 요청"/>
</form>
</body>
</html>

GET 요청

먼저 GET 요청 parameter에 대한 테스트를 위해서 text, number, date, radio, select, checkbox 태그가 포함된 html 파일을 만든다.

@WebServlet("/querystring")
public class QueryStringTestServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	    String name = request.getParameter("name");
	    int age = Integer.parseInt(request.getParameter("age"));
	    java.sql.Date birthday =  java.sql.Date.valueOf(request.getParameter("birthday"));
	    String gender = request.getParameter("gender");
	    String national = request.getParameter("national");
	    String[] hobbies = request.getParameterValues("hobbies");
	    
	    System.out.println("이름 " + name);
	    System.out.println("나이 " + age);
	    System.out.println("생일 " + birthday);
	    System.out.println("성별 " + gender);
	    System.out.println("국가 " + national);
	    
	    System.out.print("취미");
	    for(String hobby : hobbies) {
	    	System.out.print(" " + hobby);
	    }
	}
}

request 객체의 getParameter 메소드를 통해서 전달 받은 parameter를 사용할 수 있다.

이때 parameter의 반환 타입은 String 이기때문에 별도의 형변환 과정이 필요하다.

또한 checkbox와 같은 다수의 parameter를 getParameterValues를 통해 String 배열로 가져올 수 있다.

POST 요청

GET요청과 동일한 html 코드를 사용하고 요청 method만 POST로 변경한다.

먼저 getParameter를 통해서 한글로 입력된 이름 parameter를 출력해보면 정상적으로 출력되지 않는다.

post 요청에서는 request 객체에서 설정된 인코딩 방식에 따라 전달된 파라미터를 디코딩한다.

encoding 방식을 설정하지 않으면 톰캣 기본 encoding 방식인 ISO-8859-1로 디코딩하게 되서 한글이 깨지게 된다.

그래서 request 객체에서 parameter를 꺼내기 전에 html 페이지에서 설정한 charset인 UTF-8로 encoding 방식을 설정한다.

@WebServlet("/formdata")
public class FormdataTestServlet extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");

		Map<String, String[]> requestMap = request.getParameterMap();
		Set<String> keySet = requestMap.keySet();
		Iterator<String> keyIter = keySet.iterator();

		Enumeration<String> names = request.getParameterNames();
		while (names.hasMoreElements()) {
			System.out.println(names.nextElement());
		}

		while (keyIter.hasNext()) {
			String key = keyIter.next();
			String[] value = requestMap.get(key);
			System.out.print(key);
			for (int i = 0; i < value.length; i++) {
              System.out.print(" " + value[i]);
			}
			System.out.println();
		}
	}
}

request 객체의 getParameterMap을 활용하면 key, value 형태의 map으로 parameter를 받을 수 있다.

또한 getParameterNames 메소드를 통해서 전달 받은 모든 parameter의 name을 Enumeration 형태로 받을 수 있다.

728x90
반응형

댓글