Servlet은 class 위에 @ServletComponentScan을 통해 Servlet을 자동 등록할 수 있다. Spring이 자동으로 내 Package 및 하위 패키지들로부터 Servlet을 다 찾아서 실행할 수 있도록 도와준다.
@ServletComponentScan
우선 Java Class를 하나 생성하고, 클리스가 HttpServlet을 상속할 수 있도록 하고, @WebServlet 어노테이션을 추가한다. 이제 /hello로 오면 아래 코드가 실행된다. 매핑된 url이 호출되면 서블릿 컨테이너는
@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
}
[Control + O] → service(req:HttpServletRequest...)를 상속한다. 매핑된 url이 호출되면 Servlet이 호출되면 이 service 메서드가 호출된다.
@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// soutm
System.out.println("HelloServlet.service");
// soutv
System.out.println("request = " + request);
System.out.println("response = " + response);
}
}
요청 파라미터를 넣어서 HttpServletRequest를 다음과 같이 테스트를 수행할 수 있다.
@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);
}
}
# HttpServletResponse 메시지 테스트
@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
...
// 위 두 줄은 Header에 들어간다
response.setContentType("text/plain");
response.setCharacterEncoding("utf-8");
// HTTP Message Body에 데이터를 넣는다
response.getWriter().write("hello" + username);
}
}
# Request 메시지 로그로 확인하는 법
운영 서버에 이런 요청 정보를 담으면 과부하가 발생하므로 개발 과정에서만 추가하기!
// application.properties
logging.level.org.apache.coyote.http11=debug
스프링 부트에 내장된 Tomcat 서버를 통해 서블릿 컨테이너 안에 서블릿을 생성한다.
브라우저로부터 서버로 아래와 같은 HTTP 요청메시지가 들어오면 HttpServletRequest 객체, HttpServletResponse 객체를 생성하고 Servlet 객체(싱글톤)를 호출한다. 이때 service 메서드를 호출하면서 request, reponse 객체들을 Servlet으로 전달한 후, reponse 메시지에 데이터를 넣은 후에 HTTP 응답 메시지를 브라우저로 전달한다.
'🌱 Spring > MVC ①' 카테고리의 다른 글
[Spring] HTTP 요청 데이터(HttpServletRequest) (0) | 2023.07.12 |
---|---|
[Spring] HttpServletRequest 기능과 정보 (0) | 2023.07.11 |
[Spring] 동시 요청을 위한 멀티 스레드 (0) | 2023.07.10 |
[Spring] 서블릿 (0) | 2023.07.10 |
[Spring] Web Server & Web Application Server(WAS) (0) | 2023.07.10 |