<< 학습 목표 >>

1. 클라이언트가 다양한 형태의 값을 보내도록 페이지를 구성할 수 있다.

2. 클라이언트가 보낸 값을 서버에서 꺼낼 수 있다.


클라이언트가 서버로 보낸 값을 꺼낼 때는 요청 정보를 갖고 있는 HttpServletRequest 타입 매개변수의 getParamter 메서드를 사용해서 꺼냄

메서드 형식 설명
String getParameter(String) 인자로 파라미터 이름을 넣으면 파라미터의 값을 문자열로 반환함
String[] getParamterValues(String) 인자로 파라미터 이름을 넣으면 파리머터의 값들을 문자열 배열로 반환함

 

우선 뷰 페이지를 만들자

webapp 안에 chapter03 안에 sendData.html 파일을 만들고 아래 코드를 입력하자

( 참고. form 태그의 method 속성이 없으므로 클라이언트의 요청 방식은 GET 임 )

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>데이터 보내기</title>
</head>
<body>
	<h1>데이터 보내기1</h1>
	<form action="http://localhost:8080/studyProject/chapter03/send_data1">
		<input type="text" name="data1"><br>
		<input type="number" name="data2"><br>
		<input type="submit" value="보내기">
	</form>
	<hr>
	
	<h1>데이터 보내기2</h1>
	<form action="http://localhost:8080/studyProject/chapter03/send_data2">
		<input type="text" name="data1"><br>
		<textarea rows="10" cols="50" name="data2"></textarea><br>
		<input type="submit" value="보내기">
	</form>
	<hr>
	
	<h1>데이터 보내기3</h1>
	<form action="http://localhost:8080/studyProject/chapter03/send_data3">
		<input type="text" name="data1"><br>
		<input type="radio" name="data2" value="radio1">라디오1
		<input type="radio" name="data2" value="radio2">라디오2
		<input type="radio" name="data2" value="radio3">라디오3<br>
		<input type="submit" value="보내기">
	</form>
	<hr>
	
	<h1>데이터 보내기4</h1>
	<form action="http://localhost:8080/studyProject/chapter03/send_data4">
		<input type="text" name="data1"><br>
		<input type="checkbox" name="data2" value="check1">체크1
		<input type="checkbox" name="data2" value="check2">체크2
		<input type="checkbox" name="data2" value="check3">체크3<br>
		<input type="submit" value="보내기">
	</form>
</body>
</html>

 

네 가지 유형의 데이터를 꺼내보자

1. 클라이언트는 문자열과 숫자를 보낸다.

2. 클라이언트는 한 줄의 문자열과 여러 줄의 문자열을 보낸다.

3. 클라이언트는 문자열과 라디오 버튼으로 선택한 값을 보낸다.

4. 클라이언트는 문자열과 체크박스로 선택한 값들을 보낸다.


<< 1. 클라이언트는 문자열과 숫자를 보낸다. >>

[ 데이터 보내기1 ] 의 상황에 맞는 서블릿을 작성하자

package chapter03;

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("/chapter03/send_data1")
public class SendData1 extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String data1 = request.getParameter("data1");
		String data2 = request.getParameter("data2");
		
		System.out.println("data1 = " + data1);
		System.out.println("data2 = " + data2);
	}

}

 

아직은 보낼 데이터는 무조건 영문으로만 작성하자

아래와 같이 첫 번째 데이터로 영문, 두 번째 데이터로 숫자를 입력하고 보내기를 누르자

 

그럼 SendData1 서블릿이 동작하고 파라미터를 꺼냄

! 여기서 포인트 ! 클라이언트는 두 번째 데이터를 정수 123 으로 보냈지만 서버에서는 꺼내서 String 타입 변수에 담았음

getParameter 메서드는 위에서 설명했듯이 파라미터를 문자열로 반환하기 때문에 클라이언트가 정수로 보냈어도 서버에서는 문자열로 처리해야함

클라이언트가 보낸 값을 정수로 변환하고 싶다면 Integer.parseInt 메서드를 사용해야함


<< 클라이언트는 한 줄의 문자열과 여러 줄의 문자열을 보낸다. >>

[ 데이터 보내기2 ] 의 상황에 맞는 서블릿을 작성하자

package chapter03;

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("/chapter03/send_data2")
public class SendData2 extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String data1 = request.getParameter("data1");
		String data2 = request.getParameter("data2");
		
		System.out.println("data1 = " + data1);
		System.out.println("data2 = " + data2);
	}

}

 

아래와 같이 첫 번째 데이터로 영문, 두 번째 데이터도 영문을 입력하고 보내기를 누르자

 

그럼 SendData2 서블릿이 동작하고 파라미터를 꺼냄

! 여기서 포인트 ! 클라이언트는 두 번째 데이터를 여러 줄의 문자열로 보냈지만 서버에서는 꺼내서 String 타입 변수에 담았음

이렇게 클라이언트가 한 줄의 문자열로 보냈든 여러 줄의 문자열로 보냈든 getParamter 메서드로 꺼내기 때문에 String 타입 변수에 담아서 처리함

 

웹 페이지의 textarea에서 우리가 엔터를 친 부분이 서버로 보낼 때는 \n 으로 보내짐

( 슬라이드 이미지이니 옆으로 넘기면서 보세요 )

012

 

클라이언트가 보낸 여러 줄의 문자열을 한 줄 한 줄씩 사용하고 싶다면 split 메서드로 분리해야함

package chapter03;

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("/chapter03/send_data2")
public class SendData2 extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String data1 = request.getParameter("data1");
		String data2 = request.getParameter("data2");
		String[] data2s = data2.split("\n");
		
		System.out.println("data1 = " + data1);
		System.out.println("data2 = " + data2);
		for(int i=0; i<data2s.length; i++) {
			System.out.println(data2s[i]);
		}
	}

}

<< 클라이언트는 문자열과 라디오 버튼으로 선택한 값을 보낸다. >>

[ 데이터 보내기3 ] 의 상황에 맞는 서블릿을 작성하자

package chapter03;

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("/chapter03/send_data3")
public class SendData3 extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String data1 = request.getParameter("data1");
		String data2 = request.getParameter("data2");
		
		System.out.println("data1 = " + data1);
		System.out.println("data2 = " + data2);
	}

}

 

아래와 같이 첫 번째 데이터로 영문, 두 번째 데이터로 라디오 버튼 중 하나를 클릭하고 보내기를 누르자

 

그럼 SendData3 서블릿이 동작하고 파라미터를 꺼냄

! 여기서 포인트 ! 클라이언트는 두 번째 데이터를 라디오 버튼으로 보냈지만 서버에서는 꺼내서 String 타입 변수에 담았음

사실 클라이언트가 서버로 라디오 버튼을 보내는게 아니라 라디오 버튼의 name과 value로 보내는 것

 

그 다음 4번째 유형을 보기 전에 잠깐 여기서 한번 정리하자

지금까지 우리는 총 세가지 유형의 값을 보냈음

1. 클라이언트는 문자열과 숫자를 보낸다.

2. 클라이언트는 한 줄의 문자열과 여러 줄의 문자열을 보낸다.

3. 클라이언트는 문자열과 라디오 버튼으로 선택한 값을 보낸다.

 

그리고 이에 맞는 서블릿을 만들어 값을 받았음

서블릿들의 코드를 나란히 놓고 비교해보자

이 코드들의 차이점은?

( 클릭하면 큰 이미지로 볼 수 있습니다. )

 

없음

사실 전 이 서블릿을 만들 때 일일히 서블릿을 만들지 않고 SendData1 서블릿을 복붙하고 서블릿의 경로만 바꿨음

그 안에서 클라이언트가 보낸 값을 꺼내는 코드는 바꾸지 않았음

이렇게 클라이언트가 문자열을 보내든, 숫자를 보내든, 라디오 버튼의 선택지를 보내든 상관 없이 모두 파라미터를 보낸것이므로 getParameter 메서드로 꺼냄

매우 간단!


이제 마지막 유형을 보자

<< 클라이언트는 문자열과 체크박스로 선택한 값들을 보낸다. >>

[ 데이터 보내기4 ] 의 상황에 맞는 서블릿을 작성하자

( 이 서블릿은 앞의 세 서블릿과 많이 다르니 꼭 정확히 입력해야함 )

package chapter03;

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("/chapter03/send_data4")
public class SendData4 extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String data1 = request.getParameter("data1");
		String[] data2 = request.getParameterValues("data2");
		
		System.out.println("data1 = " + data1);
		
		System.out.print("data2 = ");
		for(int i=0; i<data2.length; i++) {
			System.out.print(data2[i] + ", ");
		}
	}

}

 

아래와 같이 첫 번째 데이터로 영문, 두 번째 데이터로 체크박스 들을 클릭하고 보내기를 누르자

 

그럼 SendData4 서블릿이 동작하고 파라미터를 꺼냄

! 여기서 포인트 ! 클라이언트는 두 번째 데이터를 체크박스로 보냈음

서버는 꺼낼 때 getParameter 메서드가 아닌 getParameterValues 메서드를 사용해 꺼냈음

또한 getParameterValues 메서드로 꺼내서 String 타입 배열에 담았음

 

체크박스는 여러 개를 선택해 보낼 수 있음

보낼 때는 여전히 name=value 형식으로 보내므로 같은 이름에 값이 담겨서 보내짐

체크박스로 보내는 파라미터는 getParameterValues 메서드로 꺼내야함

728x90
LIST