스프링 부트 환경에서 서블릿을 등록하고 사용해보자!
스프링 부트는 서블릿을 직접 등록해서 사용할 수 있도록 @ServletComponentScan
을 지원한다.
hello.servlet.ServletApplication.java
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);
}
}
ServletApplication
을 실행해보면 아직은 아무것도 안 뜨는 것이 맞다!
실제로 동작하는 서블릿 코드를 등록해보자.
hello.servlet.basic.HelloServlet.java
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 request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("HelloServlet.service");
System.out.println("request = " + request);
System.out.println("response = " + response);
String username = request.getParameter("username");
System.out.println("username = " + username);
}
}
💡 @WebServlet 서블릿 어노테이션
@WebServlet
어노테이션은 해당 클래스를 서블릿으로 사용할 수 있게 해주는 어노테이션이다!
name
: 서블릿 이름urlPatterns
: URL 매핑
HTTP 요청을 통해 매핑된 URL이 호출되면 서블릿 컨테이너는 다음 메서드를 실행한다.
protected void service(HttpServletRequest request, HttpServletResponse response)
HelloServlet.service
request = org.apache.catalina.connector.RequestFacade@6b9269e0
response = org.apache.catalina.connector.ResponseFacade@2498f1e5
username = yeonju
request
, response
객체를 생성한다.request
, response
객체를 전달한다.response
를 기반으로 HTTP 응답 메시지를 생성해서 웹 브라우저로 전송한다.서블릿은 개발자가 HTTP 요청 메시지를 편리하게 사용할 수 있도록 개발자 대신에 HTTP 요청 메시지를 파싱한다. 그리고 그 결과를 HttpServletRequest
객체에 담아서 제공한다.
HttpServletRequest
를 사용하면 다음과 같은 HTTP 요청 메시지를 편리하게 조회할 수 있다.
해당 HTTP 요청이 시작부터 끝날 때까지 유지되는 임시 저장소 기능
request.setAttribute(name, value)
request.getAttribute(name)
request.getSession(create: true)
🔗 코드 확인하기
위의 코드를 입력한 뒤,
위 사진과 같이, postman에서 POST localhost:8080/request-header
입력, Body
에 hello!
를 입력한 뒤 send
를 하면
이렇게 정보가 뜬다!
여기에서 주목할 부분은 [Content 편의 조회] - request.getContentLength() = 6
부분!
이 값이 6으로 뜨는 이유는 hello!
를 Body
에 입력해서 보냈기 때문이다!
HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법을 알아보자.
주로 다음 3가지 방법을 사용한다.
💡
url?keyA=valueA&keyB=valueB
/url?username=hello&age=20
content-type: application/x-www-form-urlencoded
username=hello&age=20