웹 애플리케이션 이해
- 웹 서버: 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:
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 |