서버쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 서버클래스이다.
서블릿이 되기위한 조건은 HttpServlet을 상속받는 것이다.
서블릿 라이프 사이클을 갖는다. - 관리 - Tomcat(WebApplication Server - jsp - api,jar, Servlet -api.jar)
서블릿 생명주기 : init()-service() - destory()
main이 없어도 되는 이유는 브라우저에서 호출해준다.(@WebServlet)
스프링으로 따지면 , (@WebServlet-서블릿) 이 @Controller + @RequestMapping(스프링)
두개 차이점은 스프링은 @Controller + @RequestMapping을 메소드 앞에 쓴다. = 메소드마다 url을 갖는다.
@WebServlet은 클래스 앞에온다.
서버쪽에서 요청,http 프로토콜을 사용한다.
서블릿은 화면을 처리하지않고(할 수는 있지만 생산성이 떨어진다) 컨트롤 계층의 역할을 한다.
JSP는 화면은 담당한다. (View 계층이다)
JSP는 서블릿의 부분집합이다.
정리하면, 자바 > 서블릿 > JSP(html+css+js+java+orcle)
package com.ch5;
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
/**
* 서블릿이 되기위한 조건은 HttpServlet을 상속받는 것이다.
* 자바 > 서블릿
* 서블릿 라이프 사이클을 갖는다. - 관리 - Tomcat(WebApplication Server - jsp - api,jar, Servlet -api.jar)
* init()-service() - destory()
*
*/
@WebServlet("/hello")
public class HelloServlet extends HttpServlet{
/**
* 시리얼번호는 가상번호가 쓰는 번호이다.
*/
private static final long serialVersionUID = 1L;
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
System.out.println("service 호출 ");
}
@Override
public void destroy() {
System.out.println("service호출");
}
@Override
public void init() throws ServletException {
System.out.println("init호출");
}
}
클라이언트가 웹 서버에 요청하면 웹 서버는 그 요청을 톰캣과 같은 웹어플리케이션 서버에 위임한다. -> 그러면 WAS는 각 요청에 해당하는 서블릿을 실행한다.
서블릿의 특징은
서블릿이(DELECT/GET/HEAD/POST) request를 수행하기 위해 Service()를 통해서 호출한다.
클라이언트 요청 시 public service() 메소드를 먼저 호출한 후 다시 protected Service() 호출한다. 그런 다음 다시 request 종류에 따라 doxxx() 메소드를 호출하는 과정으로 실행된다.
package com.example.demo.ch5;
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet{
/**
* 시리얼번호는 가상번호가 쓰는 번호이다.
*/
private static final long serialVersionUID = 1L;
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException {
System.out.println("service 호출 ");
}
@Override
public void destroy() {
System.out.println("service호출");
}
@Override
public void init() throws ServletException {
System.out.println("init호출");
}
}
최초의 한 번은 init이 실행되지만, 새로고침을 하면 service만 호출된다.
서블릿 초기화 : 서블릿이 생성 또는 리로딩때 단 한번만 수행된다.
서블릿이 초기화 될 때 자동 호출되는 메소드 (개발자가 신경쓰지 않아도 된다.)
Service 브라우저 새로고침 누르면 service메소드만 호출되고 처리된다.
destory
index.jsp
demo!!!
<br>
hello
별다른 init이나 service 호출이 없다.
Servelt , ServletConfig 인터페이스를 구현해 제공하며, GenericServlet 추상 클래스가 이 두 인터페이스의 추상 메소드를 제공한다.
GenericServlet을 HttpServlet이 상속받는다.