그럼 Servlet이란? 

자바엔터프라이즈 에디션에서 제공하는 웹을 만들 수 있게 제공하는것이다.

요청당 쓰레드를 사용한다.

 

지금은 직접 사용하진않지만 Spring의 기초뼈대이다.

 

서블릿은 단독으로 실행할 수 없고 서블릿 컨테이너가 실행해야한다.

 

서블릿 스펙을 준수하는 컨테이너(톰캣)가 서블릿의 라이플사이클을 이용해 실행한다.

 

라이플사이클

서블릿컨테이너가 서블릿 인스턴스의 init메소드를 호출하여 초기화한다.

 

서블릿 컨테이너가 구동될때 서블릿 리스너가 DB에 연결하고 여러가지 서블릿에 제공할 수 있다.

서블릿컨텍스트에서 꺼내서 사용한다.

 

서블릿 컨테이너가 종료할때 서블릿 리스너를 이용해 DB커넥션을 반납한다.

 

 

Java servlet API은 런타임때 빠진다. 컨테이너가 가지고있다.

 

Servlet 예제

public class HelloServlet extends HttpServlet {

    //원시적인 ServletApplication
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet");
        ApplicationContext applicationContext = (ApplicationContext) getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);

        HelloService helloService = applicationContext.getBean(HelloService.class);
        resp.getWriter().println("Hello "+ helloService.getName());
    }

    private Object getName() {
        return getServletContext().getAttribute("name");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }

    @Override
    public void init() throws ServletException {
        System.out.println("init");
    }

    @Override
    public void destroy() {
        System.out.println("destroy");
    }
}

 

서블릿에서 사용하는 두가지 기능

 

서블릿리스너

servletlistener

public class MyListener implements ServletContextListener {
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("contextInitialized");
        //서블릿보다 윗개념이기에 서블릿에서 꺼내서 사용할 수 있다.
        sce.getServletContext().setAttribute("name","사용");
    }

    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("contextDestroyed");
    }
}

-서블릿 컨테이너보다 윗개념

-서블릿컨테이너에서 발생하는 이벤트에 특정한 코드를 실행할때 사용한다.

-종료될때도 사용할 수 있다.

-(DB연결등 여러가지)

 

서블릿필터

servletfilter

public class MyFilter implements Filter {
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("Filter");
        //체인형식으로 다음필터에게 전달해주어야한다.
        filterChain.doFilter(servletRequest, servletResponse);
    }

    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("My Filter init");
    }

    public void destroy() {
        System.out.println("My Filter destroy");
    }
}

-필터를 거쳐 서블릿에간다

-요청이 들어왔을때 서블릿으로 가기전에 전처리할때 사용한다.

-여러개의 서블리셍 추가적인 작업을 하거나 특정한 URL에 적용할 수 있다.

-체인 구조로 순차적으로 실행된다.

+ Recent posts