본문 바로가기
WEB

Servlet (서블릿)이해하기 + 실습예제

by 댕꼬 2022. 3. 22.

Servlet


Servlet이란

자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하며, 흔히 "서블릿"이라 불린다. 자바 서블릿은 웹 서버의 성늘을 향상하기 위해 사용되는 자바 클래스의 일종이다. 

JSP와 비슷하지만 JSP는 HTML 문서 안에 Java코드를 포함하는 반면, 서블릿은 자바코드안에 HTML을 포함하고 있다는 점에서 차이점이 있다.

 

Servlet JSP
자바 코드 안에 HTML 포함 HTML 문서안에 Java코드 포함

 

 

Servlet 동작흐름

 

서블릿의 동작흐름

 

Servlet Life-Sycle

- Init() : 서블릿이 메모리에 로드될 때 한번만 호출 (코드 수정 시 다시 호출) 🔴

- doGet() : GET방식으로 data전송 시 호출 🟡

- doPost() : POST방식으로 data전송 시 호출 🟡

- service() : 모든 요청은 service()를 통해 doXXX()메소드로 이동 🟡

- destroy() : 서블릿이 메모리에서 해제되면 호출🔴

 

🔴 : 최초 요청 시 한번만 실행 / 🟡 : 요청시마다 반복 실행

 

 

 

Parameter 전송방식

  GET POST
특징 전송되는 데이터가 URL뒤 QueryString으로 전달 URL과 별도로 전송
HTTP header 뒤 body에 입력 스트림 데이터로 전달
장점 간단한 데이터를 빠르게 전송
form tag뿐만 아니자 직접 URL에 입력하여 전송가능
데이터의 제한이 없음.
최소한의 보안유지 효과를 볼 수 있음
단점 데이터양에 제한이 있다(URL창만큼)
보안상의 문제
전달 데이터의 양이 같은 경우 GET보다 느리다
(전송패킷을 body에 구성해야하므로)

 

GET방식 참고

 

 

SingleParamServlet.java

package com.ssafy.basic;

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;

/*
 * 안녕하세요 댕꼬님!!! 
 * 아이디의 글자색을 서울 : 파랑, 대전 : 오렌지, 구미 : 핑크, 광주 : 초록, 부울경 : 보라
 */

@WebServlet("/singleparam.ssafy")		
public class SingleParamServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet call!!!!");
//		1. data get
		String name = request.getParameter("username");
		String id = request.getParameter("userid");
		int area = Integer.parseInt(request.getParameter("area"));
		
//		2. logic >> 인사의 글자색을 서울 : 파랑, 대전 : 오렌지, 구미 : 핑크, 광주 : 초록, 부울경 : 보라
		String color[] = {"blue", "orange", "pink", "green", "purple"};
		
//		3. response page
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("	<body>");
		out.println("	<h2 style=\"color:" + color[area] + "\">안녕하세요. " + name + "(" + id + ")님!!!</h2>");
		out.println("	</body>");
		out.println("</html>");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doPost call!!!!");
//		1. data get
		request.setCharacterEncoding("utf-8");		//doGet부분이랑 유일하게 다른 것 내부적으로io가 일어나기때문에 인코딩설정, get은 url로 넘어오기 때문에 ㄱㅊ
		String name = request.getParameter("username");			//name으로 가져온다
		System.out.println(">>>>>>>>>>>>" + name);
		String id = request.getParameter("userid");
		int area = Integer.parseInt(request.getParameter("area"));
		
//		2. logic >> 인사의 글자색을 서울 : 파랑, 대전 : 오렌지, 구미 : 핑크, 광주 : 초록, 부울경 : 보라
		String color[] = {"blue", "orange", "pink", "green", "purple"};
		
//		3. response page
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("	<body>");
		out.println("	<h2 style=\"color:" + color[area] + "\">안녕하세요. " + name + "(" + id + ")님!!!</h2>");
		out.println("	</body>");
		out.println("</html>");
	}

}

 

single.html

<!DOCTYPE html>
<html lang="ko">
<head>
	<title>SSAFY-파라미터전달</title>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
	<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</head>
<body>
	<div class="container">
		<div class="col-lg-5">
			<h5 class="text-center">Servlet을 이용한 파라미터 전달(Single)</h5>
			<form name="paramform" method="post" action="/bw/singleparam.ssafy">
				<div class="form-group">
					<label for="userid">아이디:</label> <input type="text"
						class="form-control" placeholder="아이디 입력" name="userid">
				</div>
				<div class="form-group">
					<label for="username">이름:</label> <input type="text"
						class="form-control" placeholder="이름 입력" name="username">
				</div>
				<div class="form-group">
					<label for="area">지역:</label> <select name="area"
						class="custom-select">
						<option value="0">서울</option>
						<option value="1" selected>대전</option>
						<option value="2">구미</option>
						<option value="3">광주</option>
						<option value="4">부울경</option>
					</select>
				</div>
				<button type="submit" class="btn btn-primary">전송</button>
			</form>
		</div>
	</div>
</body>
</html>

 

실행화면

 

 

'WEB' 카테고리의 다른 글

JSP(Java Server Page)  (0) 2022.03.26
Cookie(쿠키)  (0) 2022.03.25
MVC Pattern 이해하기  (0) 2022.03.23

댓글