Servlet메소드
1. Servlet 클래스 계층 구조
Servlet을 구현하기 위해 HttpServlet 클래스 상속 필요
public class firstServlet extends HttpServlet {
}
Servlet인터페이스와 ServletConfig인터페이스를 구현한 GenericServlet 추상 클래스를 HttpServlet클래스가 상속받는 구조
2. Servlet 생명 주기 메소드
Servlet 인터페이스의 생명 주기 관리 메소드
init( ) | 서블릿 생성 시 초기화 |
service( ) | 작업 수행 |
destroy( ) | 기능 종료 후 서블릿 소멸 |
또한 service( )가 무조건 실행되고 요청 종류에 따라 do시리즈 메소드가 호출되므로 service( )를 override하여 doGet( ), doPost( )...메소드로 사용 가능
init( ), destroy( )메소드는 생략 가능
Servlet 매핑
1. web.xml 에서 태그로 매핑
<servlet>
<servlet-name>test servlet</servlet-name>
<servlet-class>hdh.firstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test servlet</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
-> hdh.testServlet이라는 서블릿 클래스를 test servlet이라는 이름으로 부르겠다
-> test servlet을 /first로 요청이 들어오면 실행하겠다
2. @WebServlet 어노테이션으로 매핑
@WebServlet("/anFirst")
public class firstServlet extends HttpServlet {
}
-> /anFirst로 요청이 오면 해당 서블릿 클래스를 실행하겠다
-> 나는 xml 문서에 태그를 사용하는 방식으로 서블릿 매핑을 했고 따라서 url-pattun준거 그대로 요청 넣었고 새로고침 존나햇다 -> 똑같은 요청 여러번 보냄
근데 init은 한번만 호출되엇쥬 한 번 호출되고 나서 요청 여러번 보내도 service메소드만 호츌되쥬
근데 서블릿 컨테이너는 요청 마다 새로운 객체를 만들지 않고 동일한 요청에 대해 이미 서블릿이 존재하면 객체를 재사용한다.
-> 톰캣 실행 후 (init 메소드 실행) 페이지 새로고침해도 service만 호출됨 -> 이미 init으로 서블릿 만들어졌기때문
톰캣 종료하면 destroy뜨주
public class firstServlet extends HttpServlet {
@Override
public void init() throws ServletException {
System.out.println("init()메소드 호출");
}
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("service()메소드 호출");
}
@Override
public void destroy() {
System.out.println("destroy()메소드 호출");
}
}
나는 지금 자바 11
맥 베츄라 머덕라
인텔리제이 얼티메이트 어쩌구
톰캣버전은 8.5인가
그렇담니다
다중 서블릿 매핑도 추가하기
'백엔드' 카테고리의 다른 글
Web Application과 Web Server, Servlet과 WAS의 관계 (0) | 2023.08.02 |
---|