- 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 스펙이 제공하는 요청, 응답 메시지 자체를 이해할 필요가 있음
'Learning-log > Spring & JPA' 카테고리의 다른 글
(스프링MVC1편-백엔드 웹 개발 핵심 기술) 2-(6) HTTP요청 데이터 : GET 쿼리 파라미터, (7) HTTP요청 데이터 : POST HTML Form (0) | 2023.05.04 |
---|---|
(스프링MVC1편-백엔드 웹 개발 핵심 기술) 2-(4)HttpServletRequest 기본 사용법, (5) HTTP요청 데이터 - 개요 (0) | 2023.05.02 |
(스프링MVC1편-백엔드 웹 개발 핵심 기술) 2-(1) 프로젝트 생성 (0) | 2023.05.01 |
(스프링MVC1편-백엔드 웹 개발 핵심 기술) 1-(5) 자바 백엔드 웹 기술 역사 (0) | 2023.05.01 |
(스프링MVC1편-백엔드 웹 개발 핵심 기술) 1-(4) HTML, HTTP API, CSR, SSR (0) | 2023.04.30 |