스프링 ch2-13 ~ ch2-16

서현우·2022년 7월 2일
0

스프링의정석

목록 보기
61/85

ch2-13 ~ ch2-16

  • Servlet과 JSP가 변환 및 실행되는 순서와 과정
  • JSP의 저장소 4개 - pageContext, request, session, application
  • JSP의 EL, JSTL 사용 방법
  • Filter - 요청의 전처리, 후처리

Servlet

  • 스프링은 서블릿을 사용.
  • @WebServlet을 클래스에 붙이고, HttpServlet을 상속 받아야 한다.
    (톰캣 라이브러리 또는 pom.xml로 javax.servlet패키지를 임포트해야 @WebServlet을 사용 가능하다.)
  • @WebServlet은 스프링의 @Controller + @RequestMapping와 같다.
  • 서블릿의 구조는 크게 init(), service(), destroy()로 되어있다.

흐름을 보면 init(), service()까지는 for문과 비슷한 점이 있다.
1. 요청이 들어오면, 서블릿 객체가 저장되어있는 map형태의 저장소인 Children을 뒤져서, 서블릿 인스턴스가 존재하는지 확인한다
2. 없으면 서블릿 클래스를 로딩해서 인스턴스를 생성하고 init()으로 초기화 한다.
3. service()을 실행해서 작업을 수행한 뒤 응답을 보낸다.
4. 이제 서블릿의 인스턴스가 존재하므로, 요청이 계속 들어와도 인스턴스 생성이나 초기화 없이 바로 service()를 실행하고, 응답을 보낸다.
즉 서블릿은 기본적으로 싱글톤이고, 초기화를 한번 한 뒤에는
요청 --> service() --> 응답을 반복한다.
5. 마지막으로 distroy()가 실행되고 종료된다.

JSP(Java Server Pages)

  • 서블릿과 비슷하다. JSP는 서블릿으로 변환된다.
<%@ %> - 임포트
<%! %> - 클래스 영역으로 들어감. 
<% %> - 메서드 영역으로 들어감.
<%= %> - 값 출력 - 출력문으로 변경
  1. 요청이 들어오면 서블릿 객체가 있는지 확인한다.
  2. 첫번째 호출에는 없으므로 jsp를 서블릿 소스파일로 변환하고, .class로 컴파일한다.
  3. 서블릿 인스턴스를 생성하고 응답을 보낸다.
  4. 그 이후에는 요청 -> 서블릿 인스턴스 -> 응답을 반복한다.

스프링은 빠른 초기화이고 서블릿은 늦은 초기화가 기본이다.
But web.xml에 DispatcherServlet은 빠른 초기화로 세팅되어있다.

JSP의 기본 객체

  • 생성 없이 사용할 수 있는 객체로, jsp가 servlet으로 변환 되면 기본으로 가지고 있는 객체이다.
    request, response, pageContext, session, application, out, page ...

유효범위(scope)와 속성(attribute)

HTTP는 stateless이므로 저장소가 필요하다.
이 저장소는 4개가 있는데, 접근범위와 생존기간에 따라 구분되고 map으로 되어있다.
setAttribute(), getAttribute()로 저장소를 사용한다.

  1. pageContext는 lv를 저장한다. pageContext에 저장 하면 EL로 쓸 수 있다. 접근범위는 같은 page안에서만이고 Jstl의 기본 저장소이다.
  2. application은 접근범위가 webApp전체에서 접근 가능한 공통저장소이고, 단 1개만 존재한다.
  3. session은 클라이언트마다 1개씩 있는 개별저장소이다. id나 장바구니 같이 개별 값을 저장하기에 좋다. But 서버 부담이 제일 크므로 최소한의 data만 저장해야 한다.
  4. request는 요청 할 때마다 생기고, 각 요청은 독립적이다. forword로 다른 jsp페이지로 request에 저장된 데이터를 넘겨줄 수 있다.

서블릿의 URL패턴 우선순위

  1. exact maping
  2. 경로 맵핑
  3. 확장자 맵핑
  4. 기본 맵핑
    But 스프링은 DispatcherServlet이 모든 요청을 받도록 web.xml에 설정되어있다.

EL

<%= 값 %>를 편하게 쓰기 위해서 사용.
pageContext, request, session, application에 lv를 저장하고, 이 순서로 각 Scope를 검색한다.
각각 getAttribute()는 requestScope.name처럼 Scope를 붙여서 받거나, 우선순위대로 검색해서 name만 적어도 받을 수 있다.
객체의 getter가 있을 때, getter로 받을 수 있다.
request.getParameter("id")는 param.id로 받을 수 있다.

JSTL(JSP Standard Tag Library)

core라이브러리, fmt라이브러리를 임포트해서 사용한다.
<% ~ %>를 편하게 쓰기 위해서 사용한다.
기본적으로 pageContextScope에 저장된다.

Filter

공통적인 요청의 전처리와 응답의 후처리에 사용한다.

이미지 파일 넣는 법

src/main/webapp/resources에 img폴더를 만들어서 이미지 넣기.
servlet-context.xml에 resources 경로가 맵핑되어있다.

profile
안녕하세요!!

0개의 댓글