0%

200827 TIL

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 버전과 그 아래 버전이 다르다는 점 유의

  1. Servlet 3.0 spec이상에서 사용하는 방법
  • web.xml 파일을 사용 X
  • Java annotation을 사용
  1. Servlet 3.0 spec 미만에서 사용하는 방법
  • Servlet을 등록할 때 web.xml파일에 등록

Servlet의 Life Cycle

Servlet Life Cycle

  • WAS는 서블릿 요청을 받으면 해당 서블릿이 메모리에 있는지 확인 합니다.
  • if (메모리에 없음) {
    해당 Servlet class를 memory에 올림
    init() 메소드를 실행
    }
  • service() 메소드를 실행
  • was가 종료되거나, 웹 어플리케이션이 새롭게 갱신될 경우 destroy() 메소드가 실행 된다.
  • HttpServlet의 3가지 method를 override 해서 확인
1
2
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만 정리
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Override
protected 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();
}