Spring/스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
7. 서블릿 환경구성
DEV-HJ
2023. 10. 21. 23:10
반응형
스프링 부트 환경에서 서블릿 등록하고 사용해보자
참고
- 서블릿은 톰캣 같은 웹 애플리케이션 서버를 직접 설치하고, 그 위에 서블릿 코드를 클래스 파일로 빌드해서 올린 다음,
톰캣 서버를 실행하면 된다. 하지만 이 과정은 매우 번거롭다. - 스프링부트는 톰캣 서버를 내장하고 있음으로, 톰캣 서버 설치 없이 편리하게 서블릿 코드를 실행할 수 있다.
스프링 부트 서블릿 환경 구성
@ServletComponentScan
- 스프링이 자동으로 어노테이션이 주입된 패키지와 하위 패키지까지 다 뒤져서 나오는 서블릿을 자동으로
서블릿에 등록해서 실행할 수 있게 도와준다.
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);
response.setContentType("text/plain");
response.setCharacterEncoding("utf-8");
response.getWriter().write("hello "+username);
}
}
@WebServlet : 서블릿 어노테이션
- name : 서블릿 이름
- urlPatterns : URL 매핑
- name과 urlPatterns 은 중복금지
HTTP 요청을 통해 매핑된 URL이 호출되면 서블릿 컨테이너는 service 메서드를 실행한다
- service(HttpServletRequest request, HttpServletResponse response)
웹 브라우저 실행
- http://localhost:8080/hello?username="서블릿"
- 결과 : Hello 서블릿
콘솔 실행결과
HelloServlet.service
request = org.apache.catalina.connector.RequestFacade@305317e5
response = org.apache.catalina.connector.ResponseFacade@3e94ff9f
username = "서블릿"
웹 브라우저 네트워크 응답헤더
HTTP 요청 메시지 로그로 확인하기
다음 설정을 추가하자.
application.properties
logging.level.org.apache.coyote.http11=debug
요청해보면 서버가 받은 HTTP 요청 메시지를 출력하는 것을 확인할 수 있다.
이렇게하면 요청이 제대로 됬는지 확인 가능
참고 : 이런건 운영서버에 넣을땐 고민해야한다. 성능저하가 발생할 수 있으니 개발할때만 적용하자.
서블릿 컨데이너 동작 방식 설명
참고
- HTTP 응답에서 Content-Length는 웹 애플리케이션 서버가 자동으로 생성해준다
- 이거까지 개발자가 다 하면 너무 번거롭다. WAS가 많은 기능을 대신 해준다
반응형