서블릿 생성과 HttpServletRequest 정리
03 Apr 2023스프링 MVC 1편 강의 정리
Servlet 생성
@ServletComponentScan
: 어노테이션이 적용된 패키지와 하위 패키지에서 서블릿을 찾아서 등록해주는 어노테이션
@ServletComponentScan
@SpringBootApplication
public class ServletApplication {
public static void main(String[] args) {
SpringApplication.run(ServletApplication.class, args);
}
}
@WebServlet
: 서블릿을 선언할 때 사용하는 어노테이션- 이름과 urlPatterns를 정의할 수 있음
- 정의된 urlPatterns에 해당하는 요청을 받게 됨
- 이름과 URL 매핑은 중복되어선 안됨
- 요청이 올 때, 상속받은 HttpServlet의
service
메서드가 실행됨
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 {
super.service(req, resp);
}
}
- 위의 HttpServletRequest, HttpServletResponse를 출력하면 각각 org.apache.catalina.connector.RequestFacade, org.apache.catalina.connector.ResponseFacade를 확인할 수 있음
- 인터페이스인 HttpServletRequest와 HttpServletResponse를 구현한 WAS의 구현체
Logging
application.properties에 아래 설정을 추가하면 요청값에 대한 상세한 로그를 볼 수 있다.
운영환경에서는 성능 문제가 있을 수 있으므로 개발 환경에서만 사용하도록 한다.
logging.level.org.apache.coyote.http11=debug
HttpServletRequest
- 서블릿은 HTTP 요청 메시지를 파싱해서 그 결과를
HttpServletRequest
객체로 제공 -
HTTP 요청 메시지
POST /save HTTP/1.1 Host: localhost:8080 Content-Type: application/x-www-form-urnencoded username=kim&age=20
- Start line
- HTTP 메소드, URL, 쿼리 스트링, 스키마, 프로토콜
- Header
- Body
- form 파라미터 형식 조회
- 메세지 바디 데이터 직접 조회
- Start line
- 해당 요청이 시작부터 끝날 때까지 유지되는 임시 저장소 기능 제공
- 저장:
request.setAttribute(name, value)
- 조회:
request.getAttribute(name)
- 저장:
- 세션 관리 기능
request.getSession(create: true);
기본 사용
- HttpServletRequest 제공 정보
- 기본 요청 정보
- getMethod()
- getProtocol()
- getScheme()
- getRequestURL()
- getRequestURI()
- getQueryString()
- isSecure()
- 헤더 정보
- request.getHeaderName()
- request.getHeader(name)
- 호스트, 포트 정보
- request.getServerName()
- request.getServerPort()
- 언어 정보
- request.getLocales()
- request.getLocale()
- 쿠키 정보
- request.getCookies()
- cookie.getName()
- cookie.getValue()
- 내용 정보
- request.getContentType()
- request.getContentLength()
- request.getCharacterEncoding()
- remote 정보
- request.getRemoteHost()
- request.getRemoteAddr()
- request.getRemotePort()
- local 정보
- request.getLocalName()
- request.getLocalAddr()
- request.getLocalPort()
- 기본 요청 정보