본문 바로가기
스프링

[스프링] 웹 애플리케이션 이해, 서블릿

by moonstal 2022. 6. 9.

웹 애플리케이션 이해

  • 웹 서버: HTTP 기반, 정적 리소스 제공, NGINX, APACHE
  • 웹 애플리케이션 서버WAS: HTTP 기반, 웹 서버 기능+애플리케이션 로직 수행,톰캣 Jetty
  • 서블릿: urlPatterns의 URL이 호출-> 서블릿 코드 실행, HttpServletRequest,HttpServletResponse
  • 서블릿 컨테이너: 서블릿을 지원하는 WAS,
    • 생명주기 관리,
    • 싱글톤으로 관리: 최초 로딩 시점, 공유 변수 사용 주의, 서블릿 컨테이너 종료시 함께 종료
    • JSP도 서블릿으로 변환
    • 멀티 쓰레드 지원: WAS가 처리
  • SSR(서버 사이드 렌더링): HTML 최종 결과를 서버에서 만들어서 웹 브라우저에 전달(JSP, 타임리프)
  • CSR(클라이언트 사이드 렌더링): 동적인 화면에 사용(React, Vue.js)

서블릿

  • 서블릿 자동 등록: @ServletComponentScan
  • @WebServlet(name = "helloServlet", urlPatterns = "/hello")
  • protected void service(HttpServletRequest request, HttpServletResponse response)
  • HTTP 요청 메시지 로그: application.properties에 logging.level.org.apache.coyote.http11=debug
  • 서블릿 컨테이너 동작 방식: 내장 톰캣 서버 생성->Http 요청메세지 기반 request 실행-> 종료시 Response 기반 Http 응답 생성

HttpServletRequest

  • HttpServletRequest
    • 서블릿 HTTP 요청 메시지를 파싱-> 결과 HttpServletRequest 객체에 담아서 제공,
    • 임시 저장소 기능: request.setAttribute(name, value), request.getAttribute(name)
    • 세션 관리 기능: request.getSession(create: true)

HTTP 요청 데이터

  • GET - 쿼리 파라미터(/url?username=hello&age=20)
    • 단일 파라미터 조회: request.getParameter("username");
    • 파라미터 이름들 모두 조회: request.getParameterNames();
    • 파라미터 Map으로 조회: request.getParameterMap();
    • 복수 파라미터 조회: request.getParameterValues("username");
  • POST - HTML Form:
    • 조회 방법 get과 같음
    • content-type: HTTP 메시지 바디의 데이터 형식 지정(get방식 바디x)
    • 폼 방식: application/x-www-form-urlencoded
  • HTTP message body - 단순 텍스트

    • HTTP message body에 데이터를 직접 담아(postman전송)
    • content-type: text/plain
    • 조회 InputStream
      ServletInputStream inputStream = request.getInputStream();
      String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
  • HTTP message body - JSON

    • content-type: application/json
    • JSON 형식 파싱 -> 객체 @Getter @Setter 저장
    • 조회 ObjectMapper, InputStream
      private ObjectMapper objectMapper = new ObjectMapper();
      ServletInputStream inputStream = request.getInputStream();
      String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
      Data data = objectMapper.readValue(messageBody, Data.class);

HttpServletResponse

  • 역할
    • HTTP 응답 메시지 생성: HTTP 응답코드 지정, 헤더 생성, 바디 생성
    • 편의 기능 제공: Content-Type, 쿠키, Redirect

HTTP 응답 데이터

  • 단순 텍스트 응답: writer.println("ok");
  • HTML 응답

    response.setContentType("text/html");
    response.setCharacterEncoding("utf-8");
    PrintWriter writer = response.getWriter();
    writer.println("<html>");
    writer.println("<body>");
    writer.println(" <div>안녕?</div>");
    writer.println("</body>");
    writer.println("</html>");
  • HTTP API - MessageBody JSON 응답

    private ObjectMapper objectMapper = new ObjectMapper();
    response.setHeader("content-type", "application/json");
    response.setCharacterEncoding("utf-8");
    Data data = new Data();
    data.setUsername("kim");
    data.setAge(20);
    String result = objectMapper.writeValueAsString(data);
    response.getWriter().write(result);

링크
[https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1]

'스프링' 카테고리의 다른 글

[스프링] MVC 프레임워크  (0) 2022.06.09
[스프링] 서블릿, JSP, MVC 패턴  (0) 2022.06.09
스프링 핵심원리  (0) 2022.06.01
스프링 프로젝트  (0) 2022.01.07
IntelliJ 설치  (0) 2022.01.07