Servlet

2022. 10. 2. 23:45·백엔드/Servlet

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{
}

'백엔드 > Servlet' 카테고리의 다른 글

MVC 패턴으로 DB SELECT 하기  (0) 2022.09.24
MVC 패턴  (0) 2022.09.24
'백엔드/Servlet' 카테고리의 다른 글
  • MVC 패턴으로 DB SELECT 하기
  • MVC 패턴
가든_
가든_
  • 가든_
    Code Garden
    가든_
  • 전체
    오늘
    어제
    • 글 목록 (60)
      • 프로그래밍 언어 (11)
        • JAVA (0)
        • C++ (2)
        • C# (9)
      • 개발툴 (24)
        • Visual Studio (0)
        • Visual Studio Code (1)
        • Eclipse (1)
        • Unity (19)
        • Unreal (0)
        • Spring (1)
        • SpringBoot (0)
        • Vue (2)
      • 디자인 패턴 (6)
      • 백엔드 (4)
        • MySQL (1)
        • Servlet (3)
      • 프론트엔드 (4)
        • HTML (3)
        • CSS (0)
        • Javascript (1)
      • 알고리즘 (10)
        • 공식 (3)
        • 백준 (6)
        • SW Expert Academy (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    c#
    Proxy 패턴
    12738
    ()=>
    구조적 UML 다이어그램
    Reflex
    Adaptee
    MVC
    오브젝터 어댑터
    컴파일 상수
    다이어그램 그리기
    상태공간트리
    행동 UML 다이어그램
    chatGPT
    HTML
    스택
    런타임 상수
    DI
    SetTile
    구조패턴
    Java
    Factory 패턴
    swea2112
    클래스 어댑터
    FixedUpdate
    Abstract Factory 패턴
    Adapter 패턴
    UniRX
    Unity
    RDBM
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
가든_
Servlet
상단으로

티스토리툴바