- 스프링 부트 환경에서 서블릿을 등록하고 사용해보자
스프링 부트는 톰캣 서버를 내장하고 있음 -> 별도의 톰캣 서버 설치 없이 서블릿 코드 실행이 가능함
환경 구성
- Gradle Project
- Spring Boot 2.6.2
build.gradle
plugins {
id 'org.springframework.boot' version '2.6.2'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
id 'war'
}
group = 'hello'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
스프링 부트 서블릿 환경 구성
package hello.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
: 서블릿을 직접 등록할 수 있도록 스프링 부트에서 지원
서블릿 등록
HelloServlet
package hello.servlet.basic;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet.service");
System.out.println("request = " + req);
System.out.println("response = " + resp);
String username = req.getParameter("username");
System.out.println("username = " + username);
resp.setContentType("text/plain");
resp.setCharacterEncoding("utf-8");
resp.getWriter().write("hello " + username);
}
}
@WebServlet
: 서블릿 어노테이션- name: 서블릿 이름
- urlPatterns: URL 매핑 주소
HTTP 요청 -> 매핑 URL 호출 -> 서블릿 컨테이너가 아래의 메서드 실행
protected void service(HttpServletRequest req, HttpServletResponse resp)
실행결과
http://localhost:8080/hello?username=world
HelloServlet.service
request = org.apache.catalina.connector.RequestFacade@25780651
response = org.apache.catalina.connector.ResponseFacade@2bbfec8e
username = world
서블릿 컨테이너 동작 방식
- 웹 브라우저에서 요청
- 웹 애플리케이션 서버(WAS)에서 HTTP 요청 메시지를 기반으로 request, response 생성
- 해당 request, response를 서블릿 컨테이너에 전달 => service(request, response)
- 서블릿 컨테이너에서 요청이 종료되면 response 객체 정보를 통해 HTTP 응답 생성
- 웹 브라우저에 응답 반환
'Backend' 카테고리의 다른 글
[Spring] 스프링 컨테이너와 스프링 빈 (0) | 2022.01.25 |
---|---|
[Spring] HTTP 요청 파라미터 사용 - @RequestParam과 @ModelAttribue (0) | 2022.01.18 |
[Spring] MVC 패턴 (0) | 2022.01.16 |
[Spring] MVC 패턴의 등장 (0) | 2022.01.15 |
[Spring] HttpServletRequest와 HttpServletResponse 다루기 (0) | 2022.01.11 |