반응형
Notice
Recent Posts
Recent Comments
Link
불로구
[JSP 웹 프로그래밍] 서블릿(Servlet) 이란? 본문
반응형
서블릿?
- 서버 쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스
- 자바의 일반적인 특징을 모두 가진다.
- 독자적으로 실행 불가, 컨테이너에서 실행
동작과정
- 클라이언트가 웹 서버에 요청
- 웹 서버는 요청을 톰캣과 같은 웹 애플리케이션 서버에 위힘
- WAS는 각 요청에 해당하는 서블릿을 실행
- 서블릿은 요청에 대한 기능 수행
- 결과 반환
- 클라이언트에 전송
특징
- 서버 쪽에서 실행되면서 기능 수행
- 동적인 여러 가지 기능 제공
- 스레드 방식
- 객체지향, 컨테이너 종류에 상관없이 실행 (플랫폼 독립적)
- 보안 기능 적용 쉬움
서블릿 기능 수행 과정
- 클라이언트로부터 요청 받음
- DB연동과 같은 비즈니스 로직 처리
- 처리된 결과를 클라이언트에 돌려준다.
응답과 요청 수행 API
- 요청 API : javax.servlet.http.HttpServletRequest 클래스
- 응답 API : javax.servlet.http.HttpServletResponse 클래스
서블릿에서 클라이언트의 요청 얻기
- String getParameter(String name) : name의 값을 알고 있을 때 name에 대한 값 받기
- String[] getParameterValues(String name) : 같은 name에 대해 여러 개의 값을 얻을 때 사용
- Enumeration getParameterNames() : name 값을 모를 때 사용
회원가입처럼 여러개 값이 많아 기억하기 힘들 때
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Enumeration enu = request.getParameterNames();
while(enu.hasMoreElements()) {
String name=(String) enu.nextElement();
String[] values = request.getParameterValues(name);
for(String str : values) {
System.out.println("name = " + name + ", value = " + str);
}
}
}
서블릿의 응답 처리 방법
- doGet()이나 doPost() 메서드 안에서 처리
- javax.servlet.http.HttpServletResponse 객체 이용
- setContentType()을 이용해 클라이언트에게 전송할 데이터 종류(MIME-TYPE)를 지정
- 클라이언트와 서블릿의 통신은 자바 I/O의 스트림 이용
MIME-TYPE
- 톰캣 컨테이너에서 미리 설정해 높은 데이터 종류를 MIME-TYPE이라 한다.
- ex) HTML로 전송 : text/html 일반 텍스트 : text/plain XML 데이터로 전송 : application/xml
서블릿이 클라이언트에 응답하는 과정
- setContentType()을 이용해 MIME-TYPE을 지정
- 데이터를 출력할 PrintWriter 객체 생성
- 출력 데이터를 HTML 형식으로 생성
- PrintWriter의 print()나 println()으로 데이터 출력
GET VS POST 방식
-
GET방식
- 서블릿에 데이터 전송 시 데이터가 URL 뒤에 name=value 형식으로 전송
- 여러 데이터를 전송 시 & 로 구분해서 전송, 보안 취약
- 전송 데이터 최대 255자
-
POST방식
- 서블릿에 데이터를 전송 시 TCP/IP 프로토콜 데이터의 HEAD 영역에 숨겨진 채 전송
- 보안에 유리, 전송 데이터 용량 무제한
- 전송 시 서블릿에서 또 다시 가져오는 작업을 하기 때문에 GET보다 처리속도가 늦다
예제
-HTML
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script type="text/javascript">
function fn_login(){
console.log("클릭됨");
var frmLogin = document.getElementsByName("frmLogin")[0];
var user_id = frmLogin.user_id.value;
var user_pw = frmLogin.user_pw.value;
if((user_id.length == 0 || user_id == "") || (user_pw.length == 0 || user_pw == "")){
alert("아이디와 비밀번호는 필수입니다.");
}else{
frmLogin.method="post";
frmLogin.action="../login5";
frmLogin.submit();
}
}
</script>
</head>
<body>
<form name="frmLogin" method="post" action="../login5" encType="UTF-8">
아이디 : <input type="text" name="user_id"><br>
비밀번호 : <input type="password" name="user_pw"><br>
<input onClick="fn_login()" type="button" value="로그인">
<input type="reset" value="리셋">
<input type="hidden" name="user_address" value="울산임">
</form>
</body>
</html>
-JSP
package sec01.ex03;
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;
/**
* Servlet implementation class LoginServlet5
*/
@WebServlet("/login5")
public class LoginServlet5 extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void init() throws ServletException {
System.out.println("servlet5 init 호출");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
String id = request.getParameter("user_id");
String pw = request.getParameter("user_pw");
String address = request.getParameter("user_address");
System.out.println("아이디 : " + id);
System.out.println("패스워드 : " + pw);
System.out.println("주소 : " + address);
PrintWriter out = response.getWriter();
String data = "<html>";
data += "<body>";
data += "아이디 : " + id + "<br>";
data += "패스워드 : " + pw + "<br>";
data += "주소 : " + address;
data += "</body></html>";
out.print(data);
}
}
반응형
'프로그래밍 > WEB' 카테고리의 다른 글
(Servlet) 서블릿 DB 연동하기 (1) (0) | 2021.03.15 |
---|---|
(Servlet) 서블릿 GET, POST 동시 요청 (0) | 2021.03.15 |
(Servlet) 서블릿 여러 개의 값 전송 (0) | 2021.03.14 |
(Servlet) 서블릿 동작 과정, 애너테이션 (0) | 2021.03.13 |
[JSP] - (Servlet) 로그인 (0) | 2021.03.11 |
Comments