서블릿과 JSP - 2

뫄뫄(ahk)·2022년 8월 22일
0

Spring

목록 보기
16/18

@WebServlet으로 서블릿을 URL매핑할 때

URL패턴의 우선순위

http://localhost/context/user/info.do

위의 URL을 입력해 서버에 요청을 보낼 때,
1. 동일한 URL이 매핑된 서블릿이 요청을 받는다
ex. @WebServlet("/context/user/info.do")
2. 1번이 없다면, 경로가 동일한 패턴이 매핑된 서블릿이 요청을 받는다.
ex. @WebServlet("/context/")
3. 2번도 없다면, 확장자가 동일한 패턴이 매핑된 서블릿이 요청을 받는다.
ex. @WebServlet("
.do")
4. 4번마저 없다면 default("/") 값이 매핑된 서블릿이 요청을 받는다.
ex. @WebServlet("/")

spring에도 @RequestMapping과 사용하는 url패턴이 있다.

그렇다면 전체 서블릿의 실행과정에서 URL패턴을 통한 서블릿 매핑이 언제, 어떻게 이루어질까? 대략적으로 보자면,

먼저 Servlet을 관리하는 Servlet Context는 servletMappingchildren을 가지고 있다.
servletMappings과 children은 둘 다 맵(Map) 형태의 저장소인데 전자는 key로 url패턴을, value로는 서블릿의 이름을 가지고 있고
후자는 key로 서블릿의 이름을, value로는 서블릿의 주소를 저장하고 있다.
그래서
1. 요청이 들어오면 servlet context는
2. 먼저 servletMappings에서 요청의 url을 가지고 위의 URL패턴의 우선순위를 고려해서 일치하는 패턴의 서블릿 이름을 찾는다.
3. 찾은 서블릿의 이름을 children 객체에 가서 서블릿의 이름을 key로 가지고 있는 서블릿의 주소를 찾아 서블릿을 호출하여 요청을 처리한다

서블릿의 URL패턴 중 최하위 우선순위인 default 패턴은 정적리소스(image, css, txt)를 처리하는데 주로 사용되고, 그보다 위의 우선순위인 패턴들은 동적리소스(서블릿)을 처리하는데 사용된다.

스프링과 서블릿

스프링은 서블릿을 활용한 기술이다. 그렇다면 스프링은 서블릿과 비교했을 때 어떤식으로 요청을 처리할까? 스프링의 전체과정을 보지 않고 딱 서블릿과 비교만 해보자

  • 스프링은 Servlet Context의 servletMappings에서 default 패턴("/")만 사용한다.
  • 그리고 default패턴과 매핑된 DefaultServlet이 아닌 Dispatcher Servlet을 등록해서 모든 요청이 Dispatcher Servlet을 통하게 한다.
  • Dispatcher Servlet은 내부에 Servlet Context의 ServletMappings, children와 비슷한 구조를 가지고 있다.

톰캣 서버의 기본설정파일(web.xml)에서는 default패턴에 해당하는 요청은 DefaultServlet이 받게 되어있는데, 각 context당 개별 설정파일(web.xml)에서 default 패턴으로 Dispatcher Servlet이 요청을 받도록 설정을 덮어 씌운다.

EL(Expression Language)

EL은 local variable을 사용할 수 없다
jsp의 기본객체 중 pageContext는 lv를 EL로 사용하기 위해 lv를 저장하는 저장소로 쓰인다.

JSTL(JSTL Standard Library)

  • 자바코드를 태그화하여 가독성있게 사용할 수 있게 해준다.
  • JSTL을 사용하여 if, foreach, set 등의 다양한 기능을 tag로 사용할 수 있다.
  • <c:out value=${param.name}/>
    태그를 txt로 해석하여 script공격을 예방할 수 있다

Filter

  • 요청마다 중복되는 전,후처리에 사용한다
  • 중복코드의 관심사를 분리하기 위해 사용
  • Filter객체에 전, 후처리 기능을 구현하고 그 사이에 핵심기능을 호출하는 식으로 구현한다.
  • 로깅, 수행시간 측정등에 사용된다.

해당 요청이 오면
1. 전처리를 하고
2. 핵심기능을 호출한 다 실행되면
3. 후처리를 한다.

  • 필터를 중복 적용가능
    필터1 전처리 - 필터2 전처리 - 핵심기능 - 필터2 후처리 - 필터1 후처리
    순으로 진행된다.
  • AOP와 비슷하다
  • 필터에 urlPattern을 적용하여 원하는 요청에만 필터를 적용할 수 있다.
profile
NONONONONONOYes!

0개의 댓글