Spring_study- Servlet

도연·2023년 10월 12일
0

moyeon_spring-study

목록 보기
3/3

서블릿(Servlet)

먼저 웹 서버는 원래 클라이언트 요청에 대해 정적인 페이지로만 응답할 수 있다.
but 웹 서버에 프로그램을 붙여 동적인 페이지 생성이 가능하다.
서블릿도 이 프로그램 중 하나이다.

서블릿 컨테이너

보통 웹 서버와 Servlet 사이에 Servlet Containner 를 두어 클라이언트 요청에 대한 스레드 풀을 관리한다.
Servlet Container는 웹 서버의 요청이 있을 때마다 스레드를 생성, 요청에 맞는 Servlet 메서드를 호출하여 웹 서버로 다시 전달하는 역할을 한다.

대표적으로 WAS로 알려진 Apache Tomcat이 있지만 , WAS는 (Web Server + Servlet Container) 두개가 합쳐진 더 넓은 개념이다.

처리 과정

사용자 요청이 들어오면 서블릿 컨테이너가 사용자 요청과 매핑된 서블릿을 찾음
(설정 파일의 servlet 태그에 정의되어 있음)
서블릿 인스턴스를 찾았는데 없으면 생성해서 사용
서블릿 컨테이너에 스레드 생성
*미리 만든 reqeust,respons를 인자로 해당 서블릿의 서비스()메서드를 실행

HttpServeletRequest Interface

  1. 인퍼페이스 기능
    --> 서블릿 컨테이너는 웹 서버로부터 들어온 클라리언트의 요청을 넘겨 받아 , httpServletReqeust 인터페이스의 객체를 생성 , 이 객체에 클라이언트의 요청사항들을 담아 서블릿 서비스 메서드에 전달 , 클라이언트의 요청에 관한 많은 정보를 내장시키고 있다.

  2. 인터페이스의 내장 메서드
    httpServletRequest 인터페이스는 내부적으로 ServletRequest 인터페이스를 상속 받는다.
    따라서 내장 메서드들은 ServletRequest or httpServletRequest 인터페이스의 멤버이다.

Servlet을 사용 할 때의 장점

Servlet 형태

public class MyServlet extends HttpServlet {
	public void init(ServletConfig config) throws ServletException { // 생성될 때 호출
    	super.init();
        }
    public void destroy() {  // 소멸 될 떄 호출
    	super.destroy();
    protected void service(HttpServletRequest request, HttpServletResponse response) {
    super.service(request,response);
    }
}

service 로직 수행

public abstract class HttpServlet extends GenericServlet {
	protected void service(HttpServletRequest req, HttpServletResponse resp) trhows IOException{
    
    String method = req.getMethod();
    
    if(method.equals("GET")) {
    	doGet(req, resp);
        } else if (emthod.equals("HEAD")) {
        	doHead(req,resp);
        } else if (method.equals("POST")) {
        	doPost(req,resp);
        } else if (method.equals("PUT")) {
        	doPut(req, resp);
        } else if (method.equals("DELETE")) {
        	doDelete(req,resp) ;
        } else if (method.equals("OPTIONS")) {
        	doOptions(req,resp);
        } else if (method.equals("TRACE")) {
        	doTrace(req,resp);
        } else {
        	String errMsg ="http.method_not_implemented";
            resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED , errMsg);
        }
}
profile
모연

0개의 댓글