가든_ 2022. 10. 2. 23:45

Servlet?

  • 자바를 사용해서 웹페이지를 동적으로 만들 수 있는 서버 측 프로그램
  • 자바 서블릿은 웹 서버의 성능 향상을 위해 사용되는 자바 클래스의 일종이다

JSP와의 차이점

  • JSP : HTML in Java, *.jsp
  • Servlet : Java in HTML, *.java

Servlet Life-Cycle

main 메소드가 없다 → 직접적 호출 불가능

객채의 생성&사용의 주체가 Servlet Container에 있음

  1. Client에서 요청(request)
  2. Servlet Container에서 Servlet 객체 생성&초기화
    • Servlet 객체의 생성과 초기화는 한번만 일어난다!
    • init() : 서블릿이 메모리에 로드 될 때 한번 호출
      • 코드 수정으로 인해 다시 로드되면 다시 호출된다
  3. Servlet Container에서 요청에 대한 처리
    • 요청시마다 반복
    • service() : 모든 요청을 doXXX() 메소드로 이동시킴
    • doGet() : GET 방식으로 data 전송 시 호출
    • doPost() : POST 방식으로 data 전송 시 호출
  4. Servlet Container에서 Servlet 객체 제거
    • destroy() : 서블릿이 메모리에서 해제되면 호출
      • 코드가 수정되면 다시 호출된다
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("/LifeCycleTest")
public class LifeCycleTest extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public LifeCycleTest() {
        super();
        System.out.println("객체 생성합니다.");
    }

	//alt + s -> override/Implement method를 통해 오버라이드 함
	@Override
	public void destroy() {
		super.destroy();
        System.out.println("객체 제거합니다.");
	}

	@Override
	public void init() throws ServletException {
		super.init();
        System.out.println("객체 초기화합니다.");
	}
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("클라이언트 요청 서비스합니다.");
	}
}
  • 결과


Parameter 전송 방식

GET

특징

  • URL 뒤에 Query String으로 데이터 전달
  • 입력 값이 적은 경우나 데이터가 노출이 되어도 상관없는 경우 사용

장점

  • 간단한 데이터를 빠르게 전송
  • form tag & 직접 URL에 입력하는 형식으로 전송 가능

단점

  • 데이터 양에 제한 있음
  • location bar(url + parameters)를 통해 전송되는 데이터의 사이즈는 2048byte가 한계

POST

특징

  • URL과 별도로 전송
  • HTTP body에 입력 스트림 데이터로 전달

장점

  • 데이터 양에 제한이 없음
  • 최소한의 보안 효과

단점

  • GET보다 느림
    • 전송 패킷을 body에 데이터를 구성해야 하므로

URL 구조


Web Architecture

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class HelloServlet implements Servlet{

	@Override
	//자원 해제 시 호출되는 메서드
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	@Override
	//서블릿의 설정을 얻어오는 메서드
	public ServletConfig getServletConfig() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	//서블릿의 설명가져오는 메서드
	public String getServletInfo() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	//초기화, 생성자에 해당하는 역할
	public void init(ServletConfig config) throws ServletException {
		// TODO Auto-generated method stub
		
	}

	@Override
	//비즈니스 로직, 데이터 베이스 
	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
	}

}
package com.ssafy.hello;

import javax.servlet.http.HttpServlet;

//HttpServlet은 추상 클래스지만... 오버라이드 하고 싶은 기능한 오버라이드 하면 된다!
public class HelloServlet extends HttpServlet{
}