* 본 글은 [뉴렉처]의 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");
- add.html: <input name="x" type="text"/>
- 입력 박스를 여러 개 받을 경우(다변적인 길이)엔 name 값을 같게 주는 게 나음
- name 값을 같게 주면 배열로 전달되며, 서버는 배열로 꺼내서 반복문으로 활용할 수 있음
- name 값을 다르게 주면 서버에서 값을 받을 때마다 String 변수로 받아줘야 하니까 번거로움
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;
} - 반복문 안에 변수를 선언하면 안 되지 않나 하는 의문
- 반복 전에 변수가 먼저 생성되기 때문에 선언 이후에 반복될 일이 없음
- 반복문 안에서 연산은 반복되지만, 선언은 반복되지 않음
- 반복문 안에서만 지엽적으로 사용하기 위해 반복문에 선언한 것
- for(int i = 0; i < num.length; i++) {
- getParameter( )메소드 대신, 배열 형태로 받는 getParameterValues( )메소드 사용
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
'☕ Java 웹 프로그래밍 > Servlet & JSP' 카테고리의 다른 글
[Servlet&JSP] Application 객체로 상태 값 저장하기 (0) | 2023.05.29 |
---|---|
[Servlet&JSP] 8일차 | 상태 유지를 필요로 하는 경우와 구현의 어려움 (0) | 2023.05.28 |
[Servlet&JSP] 여러 개의 Submit 버튼 사용하기 (2) | 2023.05.28 |
[Servlet&JSP] 이클립스에서 클래스가 아닌, 서블릿으로 서블릿 만들기 (0) | 2023.05.26 |
[Servlet&JSP] 한글이 깨지는 문제 해결방법 최종 정리 (0) | 2023.05.26 |