3 Servlet | parameter

Choi jeongmin·2024년 10월 17일
0

Servlet

목록 보기
4/7

1. parameter 메소드

  • getParameter() : 요청 시 전달한 값을 getParameter() 로 추출 / input의 name
  • getParameterMap() : 모든 데이터를 key, value 형태로 일괄 반환
package com.ohgiraffers.section01.querystring;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Map;

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

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // service 로 부터 전달받은 HttpServletRequest 는
        // 요청 시 전달한 값을 getParameter() 로 추출할 수 있다..
        // 이 때 인자로 input 태그에 지정한 name 속성의 값을 문자열 형태로 전달하면 된다..

        String name = req.getParameter("name");
        System.out.println("이름 : " + name);

        int age = Integer.parseInt(req.getParameter("age"));
        System.out.println("나이 : " + age);

        java.sql.Date birthday = java.sql.Date.valueOf(req.getParameter("birthday"));
        System.out.println("생일 : " + birthday); // 2024-10-13

        // radio 태그는 여러 값 중 선택된 하나의 값만 전달된다.
        String gender = req.getParameter("gender");
        System.out.println("성별 : " + gender);

        // selectbox 도 동일하다.
        String national = req.getParameter("national");
        System.out.println("국적 : " + national);

        // checkbox 는 다중으로 입력을 받을 수 있어, 선택된 값이 문자열 배열로 전달된다.
        System.out.print("취미 : ");
        String[] hobbies = req.getParameterValues("hobbies");
        String[] hobbies2 = req.getParameter("hobbies").split(", ");

        for(String hobby : hobbies){
            System.out.print(hobby + " ");
        }
        System.out.println();
        
        /*
        * getParameterMap() - 모든 데이터를 key, value 형태로 일괄 반환
        * */
        Map<String, String[]> requestMap = req.getParameterMap();

        Iterator<String> iterator = requestMap.keySet().iterator();

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

        while(iterator.hasNext()){
            String key = iterator.next();
            String[] values = requestMap.get(key);
            if(key.equals("name")){
                System.out.print("이름 : ");
            }else if(key.equals("age")){
                System.out.print("나이 : ");
            }else if(key.equals("birthday")){
                System.out.print("생일 : ");
            }else if(key.equals("gender")){
                System.out.print("성별 : ");
            }else if(key.equals("national")){
                System.out.print("국적 : ");
            }else if(key.equals("hobbies")){
                System.out.print("취미 : ");
            }

            System.out.println(Arrays.toString(values));


        }

    }
}

- 요청 하는 JSP

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>Parameter</title>
</head>
<body>
<h1>Request Parameter</h1>
<h3>GET 방식의 요청</h3>
<h4>form태그를 이용한 get 방식 요청</h4>
<form action="querystring" 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>
    <label>성별 : </label>
    <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>국적 : </label>
    <select name="national">
        <option value="ko">한국</option>
        <option value="ch">중국</option>
        <option value="jp">일본</option>
        <option value="etc">기타</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="music">음악</label>
    <input type="checkbox" name="hobbies" id="sleep" value="sleep"><label for="sleep">취침</label>
    <br>

    <input type="submit" value="GET 요청">
</form>

<h4>a태그의 href 속성에 직접 파라미터를 쿼리스트링 형태로 작성하여 get 방식 요청</h4>
<a href="querystring?name=홍길동&age=20&birthday=2021-01-08&gender=M&national=ko&hobbies=movie&hobbies=music&hobbies=sleep">쿼리스트링을
    이용한 값 전달</a>

<h4>form태그를 이용한 post 방식 요청</h4>
<form action="formdata" method="post">
    <label>이름 : </label><input type="text" name="name">
    <br>
    <label>나이 : </label><input type="number" name="age">
    <br>
    <label>생일 : </label><input type="date" name="birthday">
    <br>
    <label>성별 : </label>
    <input type="radio" name="gender" id="male2" value="M"><label for="male2">남자</label>
    <input type="radio" name="gender" id="female2" value="F"><label for="female2">여자</label>
    <br>
    <label>국적 : </label>
    <select name="national">
        <option value="ko">한국</option>
        <option value="ch">중국</option>
        <option value="jp">일본</option>
        <option value="etc">기타</option>
    </select>
    <br>
    <label>취미 : </label>
    <input type="checkbox" name="hobbies" id="movie2" value="movie"><label for="movie2">영화</label>
    <input type="checkbox" name="hobbies" id="music2" value="music"><label for="music2">음악</label>
    <input type="checkbox" name="hobbies" id="sleep2" value="sleep"><label for="sleep2">취침</label>
    <br>

    <input type="submit" value="POST 요청">
</form>
</body>
</html>

2. formdata - post 방식

package com.ohgiraffers.section02.formdata;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

@WebServlet("/formdata")
public class FormDataTestServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // 톰캣 서버 기본 인코딩 설정 방식
        System.out.println(req.getCharacterEncoding()); // UTF-8
        
        // 인코딩 방식 지정 가능
        req.setCharacterEncoding("UTF-8"); 

        String name = req.getParameter("name");
        System.out.println("name = " + name);
        // 인코딩을 제외한 값들은 GET 방식과 동일하게 꺼낼 수 있다.

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

        while(keyIter.hasNext()){
            String key = keyIter.next();
            String[] value = requestMap.get(key);

            System.out.println("key : " + key);
            for (int i = 0; i < value.length; i++) {
                System.out.println("value[" + i + "] : " + value[i]);
            }
        }
    }

}

0개의 댓글