클라이언드의 요청에 따라 동적으로 서비스 제공
서버 쪽에서 실행되는 자바 클래스
JSP/Servlet 컨테이너에서 실행
독자적으로 실행 불가
보안 기능을 안전하게 수행 가능
빠르고 효율적인 동작
서로 다른 클라이언트가 동일한 서블릿을 요청했을 때,
메모리에 로드된 서블릿 재사용
JSP/Servlet 컨테이너
톰캣, JEUS, Web Logic, 웹 스피어, JBOSS
Interface: Servlet, ServletConfig
Abstract: GenericServlet
Class: HttpServlet
package sec01.ex01;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FirstServlet extends HttpServlet{
@Override
public void init() throws ServletException {
System.out.println("init 메서드 호출");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet 메서드 호출");
}
@Override
public void destroy() {
System.out.println("destroy 메서드 호출");
}
}
보안을 위해 서블릿 클래스 이름 대신 서블릿 매핑 이름을 사용해 요청 전송
<servlet>
<servlet-name>연결명</servlet-name>
<servlet-class>패키지명.서블릿클래스명</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>연결명</servlet-name>
<url-pattern>/서블릿매핑명</url-pattern>
</servlet-mapping>
예시
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<servlet>
<servlet-name>aaa</servlet-name>
<servlet-class>sec01.ex01.FirstServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>bbb</servlet-name>
<servlet-class>sec01.ex01.SecondServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>aaa</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
<servlet-name>bbb</servlet-name>
<url-pattern>/second</url-pattern>
</servlet-mapping>
http://IP주소:포트번호/프로젝트이름(컨텍스트이름)/서블릿매핑이름
http://127.0.0.1:8090/pro05/first
http://localhost:8090/pro05/first
여러 서블릿을 설정하면 복잡해지는 web.xml 대신
소스 코드에 직접 애너테이션 사용
해당 클래스는 HttpServlet 상속 필수
@WebServlet("/서블릿매핑이름");
public class 클래스이름 extends HttpServlet {
...
}
예시
package sec04.ex01;
...
/* Servlet implementation class ThirdServlet */
@WebServlet("/third")
public class ThirdServlet extends HttpServlet {
private static final long serialVersionUID = 1L; //서블릿 클래스 직렬화, 필요에 따라 삭제 가능
/* @see Servlet#init(ServletConfig) */
public void init(ServletConfig config) throws ServletException {
System.out.println("ThirdServlet init 메서드 호출");
}
/* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("ThirdServlet doGet 메서드 호출");
}
/* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("ThirdServlet destroy 메서드 호출");
}
}
*자바 웹을 다루는 기술