프로그래밍/스프링

2. 서블릿 - 1)서블릿 생명주기, 초기화

돌비돌비돌비 2018. 11. 18. 21:16

2.1 서블릿 시작하기


서블릿 : JVM 기반에서 웹 개발을 하기 위한 명세이자 API다. Java EE에 포함된 스펙 중의 하나로 자바에서 HTTP 요청과 응답을 처리하기 위한 내용들을 담고 있다.


자바를 실행하려면 JRE가 필요

-> 서블릿을 실행하려면 웹 애플리케이션 컨테이너가 필요


2.1.1. 서블릿 설정


그래들을 사용할 예정.



InitServlet.java
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;

@WebServlet("/init")
public class InitServlet extends HttpServlet{
 @Override
 public void init() throws ServletException{
  System.out.println("init call");
 }
}


HttpServlet은 추상 클래스이다. init메소드는 초기화에 대응되는 메서드이므로 한번만 호출이 된다.



gradlew appStartWar
http://localhost:8080/init

콘솔에서 gradlew appStartWar를 입력후 브라우저로 http://localhost:8080/init에 접속한다.

그러면 콘솔에서 "init call"을 확인할 수 있다.



아래는 위 방식을 기존 web.xml에서 URL매핑을 설정하는 방식이다.

<servlet>
    <servlet-name>Init<&/servlet-name>
    <servlet-class>InitServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Init</servlet-name>
    <url-parttern>/init</url-parttern>
</servlet-mapping>


servletConfig.getInitParameter를 이용해서 web.xml 또는 WEbInitParam 어노테이션의 정보를 서블릿 초기화 시 전달한다.

import java.io.IOException;

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

@WebServlet(
		name="initServlet", urlPatterns = {"/init"},
		initParams = {@WebInitParam(name="siteName", value="jpub")}
		)
public class InitServlet extends HttpServlet{
	
	private String myParam = "";
	
	@Override
	public void init(ServletConfig servletConfig) throws ServletException{
		System.out.println("init call");
		this.myParam = servletConfig.getInitParameter("siteName");
		System.out.println("site name : " + myParam);
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
		resp.getWriter().println("hello");
	}
}