서블릿 기본 기능
- 클라이언트로부터 요청을 받음
- 데이터베이스 연동과 같은 비즈니스 로직 처리
- 처리된 결과를 클라이언트에게 응답
서블릿 요청과 응답 수행 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);
}
}
'Backend > Servlet' 카테고리의 다른 글
서블릿 응답 처리와 MIME-TYPE (0) | 2021.12.27 |
---|---|
GET / POST 방식 (0) | 2021.12.27 |
URL / URI / ContextPath / ServletPath (0) | 2021.12.27 |
컨텍스트 (Context) 개념 및 구성 요소 (0) | 2021.12.27 |
서블릿 프로젝트 생성 및 매핑 방법 : web.xml / annotation (0) | 2021.12.27 |