본문 바로가기
Learning-log/Spring & JPA

(스프링MVC1편-백엔드 웹 개발 핵심 기술) 2-(2) Hello서블릿, (3) HttpServletRequest-개요

by why제곱 2023. 5. 2.

- Hello 서블릿

  • 스프링 부트 환경에서 서블릿 등록하고 사용해보기
  • 서블릿은 톰캣 같은 웹 애플리케이션 서버 직접 설치하고 그 위에 서블릿 코드를 클래스 파일로 빌드해서 올린 다음, 톰캣 섭버를 실행하면 되지만 이 과정이 번거롭기 때문에 스프링 부트 환경에 내장돼 있는 톰캣 서버를 활용해서 서블릿 코드를 실행해볼 예정

package hello.servlet.basic;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
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 {
        System.out.println("HelloServlet.service");
    }
}
  • 위 클래스까지 작성하고 실행해봤으나 서버가 동작하지 않았고, 아래와 같은 오류 발생
BeanCreationException: Error creating bean with name 'servletComponentRegisteringPostProcessor'
  • 해결 방법 : 이 전시간에 세팅에서 Build 설정을 Gradle에서 IntelliJ 로 바꿔둔 것이 원인이었다. 이 부분을 다시 Gradle로 바꾸고 실행하면 정상적으로 작동한다.

 

  • ? 뒤의 부분을 우리는 queryParameter라고 부름 
  • 서블릿에서 이 쿼리파라미터를 읽도록 지원하는 메서드는 getParameter

 

package hello.servlet.basic;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
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);
    }
}
  • HTTP 요청 메시지를 다 보고 싶을 땐 ? 
    • resources의 application.properties에 'logging.level.org.apache.coyote.http11=debug' 를 써 넣으면 됨
  • 운영서버에 모든 요청 정보를 남기면 성능저하 발생 가능성 . 개발할 때만 하기!! 

 

 

- HttpServletRequest 개요

  • HTTP 요청 메시지를 개발자가 직접 파싱해도 사용해도 되지만 불편함
  • 서블릿은 개발자가 HTTP요청 메시지를 편리하게 사용할 수 있도록 개발자 대신에 요청 메시지를 파싱
  • HttpServletRequest를 사용하면 HTTP 요청메시지 편리하게 조회 가능
  • START LINE
    • HTTP 메서드
    • URL
    • 쿼리 스트링
    • 스키마, 프로토콜
  • 헤더
    • 헤더 조회
  • 바디
    • form 파라미터 형식 조회
    • message body 데이터 직접 조회
  • 임시 저장소 기능
  • 세션 관리 기능
  • HttpServletRequest, HttpServletResponse 를 사용할 때 가장 중요한 점은 이 객체들이 HTTP 요청 메시지, HTTP 응답 메시지를 편리하게 사용하도록 도와주는 객체라는 것. 따라서 이에 대해 깊이 이해하려면 HTTP 스펙이 제공하는 요청, 응답 메시지 자체를 이해할 필요가 있음