본문 바로가기

Backend/Servlet

서블릿 요청 API

서블릿 기본 기능

  1. 클라이언트로부터 요청을 받음
  2. 데이터베이스 연동과 같은 비즈니스 로직 처리
  3. 처리된 결과를 클라이언트에게 응답

서블릿 요청과 응답 수행 API

  • javax.servlet.http 패키지에 포함
  • 요청 관련 API : javax.servlet.http.HttpServletRequest 클래스
  • 응답 관련 API : javax.servlet.http.HttpServletResponse 클래스
  • doGet() / doPost() 메소드에서 request, response 객체 사용

<form> 태그로 서블릿 요청

  • <form> 태그를 이용해 브라우저에서 서블릿으로 사용자의 요청이나 데이터를 전송
  • 서블릿 데이터를 웹 브라우저로 전송

<form> 태그

  • action 속성 : 서블릿 또는 JSP 이름 지정
  • method 속성 : GET 또는 POST (디폴트 GET)

<input> 태그

  • name 속성 사용
  • name 속성명과 속성값 쌍으로 전송

서블릿에서 클라이언트 요청에 사용되는 메소드

  • HttpServletRequest 클래스의 여러 메소드를 이용해서 전송된 데이터를 얻음
  • <form> 태그로 전송된 데이터를 받아오는 메소드
메서드 기능
String getParameter(String name) name의 값을 알고 있을 때 그리고 name에 대한 전송된 값을 받아오는 데 사용
String[] getParameterValues(String name) 같은 name에 대해 여러 개의 값을 얻을 때 사용 (배열로 처리)
Enumeration getParameterNames() name 값을 모를 때 사용

 

<form> 태그를 사용한 HttpServletRequest 요청 처리 예제

  • 패키지 : sec02
  • HTML : login.html
  • 서블릿 : LoginServlet.java

login.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>로그인창</title>
	</head>
	<body>
	  <form name="formLogin" method="post" action="login" >
		   아이디  :<input type="text" name="user_id"><br>
	     비밀번호:<input type="password" name="user_pw" ><br>
	    <input type="submit" value="로그인">  <input type="reset" value="다시입력">
	  </form>
	</body>
</html>

 

LoginServlet.java

package sec02;

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;

/**
 * Servlet implementation class LoginServlet
 */
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doProcess(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doProcess(request, response);
	}
	
	// 클라이언트의 <form> 태그를 통해 데이터 전달받아서 콘솔창에 출력 (서버로 요청되는 내용만 출력)
	// request : 클라이언트 -> 서버로 오는 데이터
	protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 한글 데이터 인코딩
		request.setCharacterEncoding("utf-8");
		
		// <form> 태그 안에 입력된 데이터 받아오기
		// 파라미터 : login.html에서 받아오고자 하는 데이터의 name 속성값
		String id = request.getParameter("user_id");
		String pw = request.getParameter("user_pw");
		
		System.out.println("아이디 : " + id);
		System.out.println("비밀번호 : " + pw);
	}
}

 

<form> 태그를 사용한 서블릿에 데이터 전송 및 출력 예제 - 1

  • bookForm.html
  • method : post
  • BookServlet.java
  • 서블릿 매핑 이름 : bookInsert

bookForm.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>도서 정보 등록</title>
	</head>
	<body>
	  <form name="formLogin" method="post" action="bookInsert" >
	  	<h2>도서 정보 등록</h2>
	  	도서번호 : <input type="text" name="book_no"><br>
	  	도서명 : <input type="text" name="book_name" ><br>
	  	저자 : <input type="text" name="book_author"><br>
	  	가격 : <input type="text" name="book_price"><br>
	  	발행일 : <input type="text" name="book_date"><br>
	  	재고 : <input type="text" name="book_stock"><br>
	  	출판사번호 : <input type="text" name="book_pubNo"><br>
	    <input type="submit" value="등록">  <input type="reset" value="취소">
	  </form>
	</body>
</html>

 

BookServlet.java

package sec02;

import java.io.IOException;
import javax.servlet.ServletConfig;
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 BookServlet
 */
@WebServlet("/bookInsert")
public class BookServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see Servlet#init(ServletConfig)
	 */
	public void init(ServletConfig config) throws ServletException {
		System.out.println("init 메서드 호출");
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}
	
	// 클라이언트의 <form> 태그를 통해 데이터 전달받아서 콘솔창에 출력
	// request : 클라이언트 -> 서버로 오는 데이터
	protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 한글 데이터 인코딩
		request.setCharacterEncoding("utf-8");
		
		// <form> 태그 안에 입력된 데이터 받아오기
		// 파라미터 : bookForm.html에서 받아오고자 하는 데이터의 name 속성값
		String bookNo = request.getParameter("book_no");
		String bookName = request.getParameter("book_name");
		String bookAuthor = request.getParameter("book_author");
		String bookPrice = request.getParameter("book_price");
		String bookDate = request.getParameter("book_date");
		String bookStock = request.getParameter("book_stock");
		String bookPubNo = request.getParameter("book_pubNo");
		
		System.out.println("도서번호 : " + bookNo);
		System.out.println("도서명 : " + bookName);
		System.out.println("저자 : " + bookAuthor);
		System.out.println("가격 : " + bookPrice);
		System.out.println("발행일 : " + bookDate);
		System.out.println("재고 : " + bookStock);
		System.out.println("출판사번호 : " + bookPubNo);
	}

}

 

여러 개의 값을 전송할 때의 요청 처리

  • <input> 태그에서 text 또는 radio 버튼의 경우 하나의 name에 대해 1개의 값을 전송
  • 체크박스의 경우, 같은 name을 갖는 여러 개의 값을 선택하여 여러 개 전송 가능
  • 여러 개의 값 전송 시, getParameterValues() 메소드 사용해서 배열로 받음

예제 - 1

  • input.html
  • InputServlet.java
  • 매핑 이름 : /input

input.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>여러 가지 input 타입 표시창</title>
	</head>
	<body>
		<form name="frmInput" method="post" action="input">
		   아이디  :<input type="text" name="user_id"><br>
		   비밀번호:<input type="password" name="user_pw"><br>
		   이메일 수신 여부 : <input type="radio" name="emailRcv" value="yes" checked>예
		           <input type="radio" name="emailRcv" value="no">아니오<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="안드로이드">안드로이드 
		   <br><br>
		   <input type="submit" value="전송">   
		   <input type="reset" value="초기화">
	</form>
	</body>
</html>

 

InputServlet.java

package sec02;

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;

/**
 * Servlet implementation class InputServlet
 */
@WebServlet("/input")
public class InputServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}
	
	protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 한글 데이터 인코딩
		request.setCharacterEncoding("utf-8");
		
		// <form> 태그 안에 입력된 데이터 받아오기
		String id = request.getParameter("user_id");
		String pw = request.getParameter("user_pw");
		// 라디오 버튼
		String emailRcv = request.getParameter("emailRcv");
		
		// 체크박스 : 동일한 name 속성으로 여러 개의 값이 전달되는 경우 배열로 받음
		String[] subject = request.getParameterValues("subject");
		
		// 콘솔창에 출력 : 아이디, 비밀번호, 이메일 수신 여부
		System.out.println("아이디 : " + id);
		System.out.println("비밀번호 : " + pw);
		System.out.println("이메일 수신 여부 : " + emailRcv);
		
		// 콘솔창에 출력 : 선택한 과목
		for (int i=0; i<subject.length; i++) {
			System.out.print(subject[i] + " ");
		}
	}

}

 

예제 - 2

  • newMember.html
  • NewMemberServlet.java
  • 매핑 이름 : newMember
  • 폼 데이터 서버로 전송 및 출력

newMember.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>회원가입 폼</title>
		<style>			
			#id, #pwd { width: 100px;}
			table { margin:0 auto; width:600px; }
		</style>
			
	</head>
	<body>
		<div id="wrap">
	        <h3 align="center">회원 가입</h3>
	        <hr>
	        <form id="newMemberForm" name="newMemberForm" method="post" action="newMember">
	          <table>
	          	<tr><td> 성명</td><td><input type="text" id="name" name="name"></td></tr>
	            <tr><td> ID</td><td><input type="text" id="id" name="id"></td></tr>
	            <tr><td>비밀번호</td><td><input type="password" id="pwd" name="pwd"></td></tr>
	            <tr><td>휴대폰 번호</td><td><input type="text" id="hp1" name="hp1" size="3"> 
	                    - <input type="text" id="hp2" name="hp2" size="4">
	                    - <input type="text" id="hp3" name="hp3" size="4"></td></tr>   
	            <tr><td>학년</td><td><input type="radio" id="year1" name="year" value="1" >1학년
	                                     <input type="radio" id="year2" name="year" value="2">2학년
	                                     <input type="radio" id="year3" name="year" value="3">3학년
	                                     <input type="radio" id="year4" name="year" value="4">4학년</td></tr>
	            <tr><td>관심분야</td>
	                  <td><input type="checkbox"  id="web" name="interest" value="웹 프로그래밍">웹 프로그래밍
	                         <input type="checkbox"  id="design" name="interest" value="파이썬">파이썬
	                         <input type="checkbox"  id="bigdata" name="interest" value="빅데이터">빅데이터
	                         <input type="checkbox"  id="java" name="interest" value="자바">자바 프로그래밍</td></tr>
	            <tr><td>학과</td>
	                  <td><select id="department" name="department">
	                               <option value="">선택하세요</option>
								   <option value="경영학과">경영학과</option>
								   <option value="산업공학과">산업공학과</option>
								   <option value="경제학과">경제학과</option>
								   <option value="전자공학과">전자공학과</option>
								   <option value="컴퓨터학과">컴퓨터학과</option>
	                          </select></td></tr>
	             <tr>
	                <td colspan="2" align="center">
	                    <br><input type="submit" value="완료">
	                    <input type="reset" value="취소">
	                </td>
	            </tr>             
	          </table>
      		</form>	
      	 </div>            
    </body>
</html>

 

NewMemberServlet.java

package sec02;

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;

/**
 * Servlet implementation class NewMemberServlet
 */
@WebServlet("/newMember")
public class NewMemberServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}
	
	protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 한글 데이터 인코딩
		request.setCharacterEncoding("utf-8");
		
		// <form> 태그 안에 입력된 데이터 받아오기
		String name = request.getParameter("name");
		String id = request.getParameter("id");
		String pwd = request.getParameter("pwd");
		String phone = request.getParameter("hp1")+request.getParameter("hp2")+request.getParameter("hp3");
		// 라디오 버튼
		String grade = request.getParameter("year");
		
		// 체크박스 : 동일한 name 속성으로 여러 개의 값이 전달되는 경우 배열로 받음
		String[] interest = request.getParameterValues("interest");
		
		// select
		String dpt = request.getParameter("department");
		
		
		System.out.println("이름 : " + name);
		System.out.println("아이디 : " + id);
		System.out.println("비밀번호 : " + pwd);
		System.out.println("휴대폰 번호 : " + phone);
		System.out.println("학년 : " + grade);
		System.out.print("관심분야 : ");
		for(int i=0; i<interest.length; i++) {
			System.out.print(interest[i] + " ");
		}
		System.out.println();
		System.out.println("학과 : " + dpt);
	}

}

 

<form> 태그를 이용해 서블릿에 데이터 전송 및 출력 예제

 

bookForm.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>도서 정보 등록</title>
	</head>
	<body>
	  <form name="formLogin" method="post" action="bookInsert" >
	  	<h2>도서 정보 등록</h2>
	  	도서번호 : <input type="text" name="book_no"><br>
	  	도서명 : <input type="text" name="book_name" ><br>
	  	저자 : <input type="text" name="book_author"><br>
	  	가격 : <input type="text" name="book_price"><br>
	  	발행일 : <input type="text" name="book_date"><br>
	  	재고 : <input type="text" name="book_stock"><br>
	  	출판사번호 : <input type="text" name="book_pubNo"><br>
	    <input type="submit" value="등록">  <input type="reset" value="취소">
	  </form>
	</body>
</html>

 

BookServlet.java

package sec02;

import java.io.IOException;
import javax.servlet.ServletConfig;
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 BookServlet
 */
@WebServlet("/bookInsert")
public class BookServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see Servlet#init(ServletConfig)
	 */
	public void init(ServletConfig config) throws ServletException {
		System.out.println("init 메서드 호출");
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}
	
	// 클라이언트의 <form> 태그를 통해 데이터 전달받아서 콘솔창에 출력
	// request : 클라이언트 -> 서버로 오는 데이터
	protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 한글 데이터 인코딩
		request.setCharacterEncoding("utf-8");
		
		// <form> 태그 안에 입력된 데이터 받아오기
		// 파라미터 : bookForm.html에서 받아오고자 하는 데이터의 name 속성값
		String bookNo = request.getParameter("book_no");
		String bookName = request.getParameter("book_name");
		String bookAuthor = request.getParameter("book_author");
		String bookPrice = request.getParameter("book_price");
		String bookDate = request.getParameter("book_date");
		String bookStock = request.getParameter("book_stock");
		String bookPubNo = request.getParameter("book_pubNo");
		
		System.out.println("도서번호 : " + bookNo);
		System.out.println("도서명 : " + bookName);
		System.out.println("저자 : " + bookAuthor);
		System.out.println("가격 : " + bookPrice);
		System.out.println("발행일 : " + bookDate);
		System.out.println("재고 : " + bookStock);
		System.out.println("출판사번호 : " + bookPubNo);
	}

}