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 해서 확인
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(); }
|