본문 바로가기
☕ Java 웹 프로그래밍/Servlet & JSP

[Servlet&JSP] 배열 형태로 입력 데이터 받기

by 일단연 2023. 5. 28.

* 본 글은 [뉴렉처]의 Servlet&JSP 프로그래밍 강의를 듣고 정리한 글입니다.

 

2020 Servlet&JSP 프로그래밍

 

www.youtube.com

 

 배열 형태로 입력 데이터 받기 

입력 박스를 동적으로 추가

  • 예: 자기소개서에 칸이 모자라면 더 추가
  • 이때 추가되는 입력박스마다 name 값을 같게 할지, 다르게 할지
    • name 값을 다르게 주면 서버에서 값을 받을 때마다 String 변수로 받아줘야 하니까 번거로움
      • add.html: <input name="x" type="text"/>
                        <input name="y" type="text"/>
      • Add.java: String x_ = request.getParameter("x");
                        String y_ = request.getParameter("y");
    • 입력 박스를 여러 개 받을 경우(다변적인 길이)엔 name 값을 같게 주는 게 나음
      • name 값을 같게 주면 배열로 전달되며, 서버는 배열로 꺼내서 반복문으로 활용할 수 있음

 

add2.html 수정

  • name 값이 num인 같은 <input>태그를 여러 개 추가
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>계산기 웹 프로그램</title>
</head>
<body>
  <form action="add2" method="post">
    <div>
      <p>계산할 값을 입력하세요.</p>
    </div>
    <div>
      <input name="num" type="text"/>
      <input name="num" type="text"/>
      <input name="num" type="text"/>
      <input name="num" type="text"/>
    </div>
    <div>
      <input type="submit" value="계산">
    </div>
  </form>
</body>
</html>

 

Add2.java 수정

  • 같은 name 값들을 배열 형태로 서버에 전달하고, 서버는 그 배열을 쓰는 코드
    • getParameter( )메소드 대신, 배열 형태로 받는 getParameterValues( )메소드 사용
      • String[ ] num_ = request.getParameterValues("num");
    • for문을 사용해 result에 num 값을 누적
      • for(int i = 0; i < num.length; i++) {
             int num = Integer.parseInt(num_[i]);
             result += num;
        }
      • 반복문 안에 변수를 선언하면 안 되지 않나 하는 의문
        • 반복 전에 변수가 먼저 생성되기 때문에 선언 이후에 반복될 일이 없음
        • 반복문 안에서 연산은 반복되지만, 선언은 반복되지 않음
        • 반복문 안에서만 지엽적으로 사용하기 위해 반복문에 선언한 것
package com.newlecture.web;

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("/add2")
public class Add2 extends HttpServlet {
  @Override
  protected void service(HttpServletRequest request
                        , HttpServletResponse response)
                        throws ServletException, IOException
  {
    response.setContentType("text/html; charset=UTF-8");
    response.setCharacterEncoding("UTF-8");
		
    PrintWriter out = response.getWriter();
		
    String[] num_ = request.getParameterValues("num");
		
    int result = 0;
		
    for(int i = 0; i < num_.length; i++) {
      int num = Integer.parseInt(num_[i]);
      result += num;
    }
		
    response.getWriter().printf("계산 결과는 %d\n", result);
  }
}

 

결과

  • [POST] 서버에 값 전달

  • 서버에서는 입력 데이터를 배열로 저장해 결과 도출

  • 개발자 도구

  • <form>태그로 전달된 값들 - view parsed

  • <form>태그로 전달된 값들 - view source