Study/Java&Spring

Servlet(서블릿)

kdhoooon 2021. 6. 11. 22:37

Servlet 이란?


  • JAVA 웹 어플리 케이션의 구성요소 중 동적인 처리를 하는 프로그램의 역할
  • WAS에 동작하는 JAVA클래스
  • HttpServlet 클래스를 상속받아야 함

 

<예시 코드>

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class TenServlet
 */
@WebServlet("/test")
public class TenServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TenServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		// response로 들어올 자료형을 미리 알려줌
		response.setContentType("text/html;charset=utf-8");
		
		//PrintWriter 객체를 response.getWriter()를 통해 생성하여 화면에 출력 할 객체를 생성한다. 
		PrintWriter out = response.getWriter();
		out.print("<h1> test h1>");
				
		out.close();
	}

}

위의 코드에서 @WebServlet("/test") 이 부분에서 /test 는 클래스명 뒤에 오게 될 주소명이된다.

위와 같은 경우에는 "localhost:8080/클래스명/test" 가 주소가 된다.

 

 

버전에 따른 Servlet 작성 방법

1. Servlet 3.0 spec 이상에서 사용하는 방법

  • web.xml 파일을 사용하지 않습니다.
  • 자바 어노테이션(annotation)을 사용합니다.
  • 앞에서 실습했던 first web에서 사용합니다.

2. Servlet 3.0 spec미만에서 사용하는 방법

  • servlet을 등록할 때 web.xml 파일에 등록합니다.

 

<2.5버전에서 web.xml 코드>

<?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_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>exam25</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>TenServlet</display-name>
    <servlet-name>TenServlet</servlet-name>
    <servlet-class>exam.TenServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>TenServlet</servlet-name>
    <url-pattern>/ten</url-pattern>
  </servlet-mapping>
</web-app>

 

 

생명주기


  •  WAS 는 서블릿 요청을 받으면 해당 서블릿이 메모리에 있는지 확인합니다.
  • if(메모리에 없음){

- 해당 서블릿 클래스를 메모리에 올림

- init() 메소드를 실행

}

- service()메소드를 실행

  • WAS가 종료되거나, 웹 어플리케이션이 새롭게 갱신될 경우 destroy() 메소드가 실행 됩니다.

 

  • Service(request, response) 메소드가 없어도  doGet, doPost 가 가능한 이유는 HttpServlet 의 service 메소드를 상속받아서 실행하기 때문입니다.

 

- Service 메소드

  • 클라이언트의 요청이 GET일 경우에는 자신이 가지고 있는 doGet(request, response)메소드를 호출
  • 클라이언트의 요청이 Post일 경우네는 자신이 가지고 있는 doPost(request, response)메소드를 호출