스프링 부트 환경에서 Servlet 등록하고 사용해 보자.
원래 서블릿이 동작하기 위해서는
WAS(웹 애플리케이션 서버 like 톰캣)을 직접 설치하고,
그 위에 서블릿 코드를 클래스 파일로 빌드해서 올리고,
톰캣 서버를 실행한다.
but 과정이 너무 번거롭다...
Spring Boot가 톰캣(WAS)를 내장하고 있기 때문에, 톰캣 설치 없이 서블릿 코드를 실행할 수 있습니다.
Spring Initializr를 통해 만든 프로젝트를 열어
# ServletApplication (프로젝트명+Application)
package practice01.servlet;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@ServletComponentScan //서블릿 찾아서 알아서 등록해줌. -> 서블릿 자동 등록.
@SpringBootApplication
public class ServletApplication {
public static void main(String[] args) {
SpringApplication.run(ServletApplication.class, args);
}
}
@ServletComponentScan
: 만든 서블릿 코드를 모두 찾아 WAS(톰캣)에 등록해 줍니다. (이거만 써주면 자동으로 등록해 줌.)
: 스프링 부트는 서블릿을 직접 등록해서 사용할 수 있도록 @ServletComponentScan을 지원합니다.
# hello.servlet.basic.HelloServlet
(main > java > "packageName" > "new folder" > "HelloServlet.java")
@WebServlet(name = "helloServlet", urlPatterns = "/hello") // localhost:8080/hello가 들어오면 얘기 실행됨.
public class HelloServlet extends HttpServlet { //HttpServlet 상속
@Override // ~/hello 가 실행되면 이 service가 실행됨.
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
//아무것도 응답한게 없어서 /hello로 가면 처음에는 웹페이지가 빈화면
System.out.println("HelloServlet.service");//"HelloServlet.service" 출력.
//ServeltRequest나 ServletResponse 둘다 인터페이스라서 그걸 구현한 객체가 출력된다.
System.out.println("request = " + request); //was서버가 servlet을 구현하는 그 구현체
System.out.println("response = " + response);
String username = request.getParameter("username"); //url로 넘어오는 쿼리 파라미터 쉽게 받아오기
System.out.println("username = " + username);
response.setContentType("text/plain"); //단순 문자를 보낼 거야 //얘랑 밑에는 header 정보에 들어감.
response.setCharacterEncoding("utf-8"); // 문자 인코딩 정보
response.getWriter().write("hello "+username); //http 바디에 데이터 들어감.
}
}
@WebServlet
: 서블릿 애노테이션 (Servlet Annotation)
@WebServlet(name = "helloServlet", urlPatterns = "/hello")
- name: 서블릿 이름
- urlPatterns: URL 매핑 -> 브라우저 주소 + "urlPatterns"로 검색되면 이 서블릿이 실행됩니다.
ex-localhost:8080/hello
→ name, urlPatterns 파라미터 모두 겹치면 안 됩니다. 유일해야 매핑될 때 오류 없이 동작할 수 있습니다.
public class HelloServlet extends HttpServlet { ... }
: HttpServlet을 상속받고 어느 url에 요청이 들어오면 응답할지에 대한 설정을 @WebServlet 어노테이션으로 할 수 있습니다.
public void service(ServletRequest request, ServletResponse response) { ... }
: HTTP 요청을 통해 매핑된 URL이 호출되면 서블릿 컨테이너는 이 메서드를 실행합니다.
: ~/urlPatterns가 호출되면 이 service 함수가 실행됩니다.
ServletRequest, ServletResponse 인터페이스를 통해 쉽게 http 요청과 응답을 가져올 수 있습니다.
ServletRequest와 ServletResponse를 구현한 객체가 request, reponse 입니다.
System.out.println("request = " + request);
System.out.println("response = " + response);
: request, response에는 WAS 서버가 구현한 servlet 구현체가 들어가 있습니다.( not 인터페이스)

String username = request.getParameter("username");
: url로 넘어오는 쿼리 파라미터 쉽게 받아오기

System.out.println("username = " + username);
: 변수 username에 저장한 값 console에 출력

response.setContentType("text/plain");
response.setCharacterEncoding("utf-8");
: header에 들어가는 response에 대한 정보
: 그냥 문자("text/plain")로 보낼 거고, 문자는 utf-8로 인코딩(브라우저가 글자 읽을 수 있도록 변환)해서 보낼게~
response.getWriter().write("hello "+username);
: http 바디 안에 들어가는 내용 작성.
: 실제 웹 페이지에 보이는 내용.
