그럼 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에 적용할 수 있다.
-체인 구조로 순차적으로 실행된다.
'개발 소발 > 개발 java(기초)' 카테고리의 다른 글
인텔리J intelliJ 기초 단축키 - 1 (0) | 2019.09.19 |
---|---|
REST API란 무엇인가? (0) | 2019.03.06 |
JAVA Exception,error의 차이, Exception 핸들링방법 (0) | 2019.02.12 |
JAVA static의 개념, 추상클래스(abstract)와 인터페이스(Interface)의 차이 (0) | 2019.02.11 |
JAVA 오버라이딩,오버로딩overriding,overloading (0) | 2019.02.08 |