Java Web Application
- WAS에 deploy 되어 동작하는 어플리케이션.
- 자바 웹 어플리케이션에는 HTML, CSS, 이미지, 자바로 작성된 클래스(Servlet도 포함됨, package, interface 등), 각종 설정 파일들이 포함 된다.
Servlet
- Java Web Application의 구성요소 중 동적인 처리를 하는 프로그램의 역할
- WAS에서 동작하는 JAVA class이다.
- Servlet은 HttpServlet에서 클래스를 상속 받아야 한다.
- Servlet과 JSP로부터 최상의 결과를 얻으려면, 웹 페이지를 개발할 때 이 두가지(JSP, Servlet) 을 조화롭게 사용해야 한다. (ex. Web page를 구성하는 화면 HTML은 JSP로 표현하고, 복잡한 프로그래밍은 Servlet으로 구현)
Servlet의 작성 방법
3.x 버전과 그 아래 버전이 다르다는 점 유의
- Servlet 3.0 spec이상에서 사용하는 방법
- web.xml 파일을 사용 X
- Java annotation을 사용
- Servlet 3.0 spec 미만에서 사용하는 방법
- Servlet을 등록할 때 web.xml파일에 등록
Servlet의 Life Cycle

- WAS는 서블릿 요청을 받으면 해당 서블릿이 메모리에 있는지 확인 합니다.
- if (메모리에 없음) {
 해당 Servlet class를 memory에 올림
 init() 메소드를 실행
 }
- service() 메소드를 실행
- was가 종료되거나, 웹 어플리케이션이 새롭게 갱신될 경우 destroy() 메소드가 실행 된다.
- HttpServlet의 3가지 method를 override 해서 확인
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 
 | package examples;
 import java.io.IOException;
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;
 import javax.servlet.annotation.WebServlet;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 @WebServlet("/LifecycleServlet")
 public class LifecycleServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
 public LifecycleServlet() {
 System.out.println("LifecycleServlet 생성");
 }
 
 public void init(ServletConfig config) throws ServletException {
 System.out.println("init 호출!!");
 }
 
 public void destroy() {
 System.out.println("Destroy 호출!!");
 }
 
 protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 System.out.println("Service 호출!!");
 }
 }
 
 | 
service(request, response) 메소드
- HttpServlet의 service method는 template method 패턴으로 구현
- 클라이언트 요청이 GET일경우 자신이 가지고 있는 doGET(request, response) 메소드를 호출
- 클라이언트 요청이 Post일경우 자신이 가지고 있는 doPost(request, response)를 호출
- override 된 method만 정리
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 
 | @Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 resp.setContentType("text/html");
 PrintWriter out = resp.getWriter();
 out.println("<html>");
 out.println("<head><title>form</title></head>");
 out.println("<body>");
 out.println("<form method='post' action='/firstweb/LifecycleServlet'>");
 out.println("name : <input type='text' name='name'><br>");
 out.println("<input type='submit' value='ok'><br>");
 out.println("</form>");
 out.println("</body>");
 out.println("</html>");
 out.close();
 }
 
 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 resp.setContentType("text/html");
 PrintWriter out = resp.getWriter();
 String name = req.getParameter("name");
 out.println("<h1> hello " + name + "</h1>");
 out.close();
 }
 
 |