불로구

(Servlet) 서블릿 여러 개의 값 전송 본문

프로그래밍/WEB

(Servlet) 서블릿 여러 개의 값 전송

맹이맹이 2021. 3. 14. 12:42
반응형

여기서는 CheckBox를 사용해서 여러 개의 값을 보내겠습니다.

체크박스의 name 속성 값이 모두 동일하므로 서블릿으로 전송할 때 배열로 전송이 된다.

-HTML-

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form name="frmLogin" method="get" action="login">
		아이디 : <input type="text" name="user_id" /><br>
		비밀번호 : <input type="password" name="user_pw" /><br>
		<input type="checkbox" name="subject" value="java" checked>자바
		<input type="checkbox" name="subject" value="C">C언어
		<input type="checkbox" name="subject" value="JSP">JSP
		<input type="checkbox" name="subject" value="Go">고언어
		<br>
		<input type="submit" value="로그인">
	</form>
</body>
</html>

- Servlet -

import java.io.IOException;
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("/login")
public class Login extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	@Override
	public void init() throws ServletException {
		System.out.println("init 호출");
	}
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String user_id = request.getParameter("user_id");
		String user_pw = request.getParameter("user_pw");
		System.out.println("user_id : " + user_id);
		System.out.println("user_pw : " + user_pw);
		String[] subject = request.getParameterValues("subject");
		for(String str : subject) {
			System.out.println("선택한 과목 : " + str);
		}
	}
	
	@Override
	public void destroy() {
		System.out.println("destroy 메서드 호출");
	}

}

getParameterValues()를 이용해 input, html에서 체크박스의 name인 subject로 전송된 값을 받아와

문자열 배열로 저장

이렇게 전송을 하면

콘솔에 이렇게 나타난다!

그렇다면 전송될 데이터가 많아 name의 값을 기억하기 힘을 때는 어떻게 할까?

- getParameterNames() 메서드를 사용하자!

import java.io.IOException;
import java.util.Enumeration;

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

/**
 * Servlet implementation class LoginNoNames
 */
@WebServlet("/login2")
public class LoginNoNames extends HttpServlet {
private static final long serialVersionUID = 1L;
	
	@Override
	public void init() throws ServletException {
		System.out.println("init 호출");
	}
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		Enumeration enu = request.getParameterNames();
		while(enu.hasMoreElements()) {
			String name = (String) enu.nextElement();
			String[] values = request.getParameterValues(name);
			for(String value : values) {
				System.out.println("name = " + name + ", value = " + value);
			}
		}
	}
	
	@Override
	public void destroy() {
		System.out.println("destroy 메서드 호출");
	}


}

- 전송받은 name 속성들만 Enumeration 타입으로 받아 온다.

- 각 name을 하나씩 가져와 대응해서 전송되어 온 값을 출력한다.



아이패드 최저가

Apple 2019년 iPad mini 5세대, Wi-Fi, 64GB, Silver Apple 2020년 iPad Air 10.9 4세대, Wi-Fi, 64GB, 스페이스 그레이 Apple 2020년 iPad Pro 11 2세대, Wi-Fi, 128GB, Space Gray
반응형
Comments