민스씨의 일취일장

LogT | Java Spring의 서블릿과 JSP에 대해 알게된 모든 내용과 고민들 본문

Programming Language & Framework/JAVA & Spring

LogT | Java Spring의 서블릿과 JSP에 대해 알게된 모든 내용과 고민들

읻민스 2023. 1. 10. 22:56
반응형

Java Spring의 JSP와 Servlet에 대해 공부한 내용을 시간순으로 기록하고 있다.


2022년 1월 10일

Servlet

  • JSP와 Servlet은 거의 같은 존재이다. 이 Servlet을 발전시킨 것이 Spring이다.
  • @WebServlet = @Controller + @RequestMapping

JSP (Java Server Pages)

  • HTML에 작성한 Java 코드를 작성한 것이다. 
  • <% %>를 사용해 HTML 코드와 구별된다.
  • <%= %>를 사용해 로컬변수(local variable)을 호출할 수 있다.
  • JSP는 요청 시 WebServlet 객체로 변환된다. 이렇게 요청 시에 변환 및 초기화 되는 것을 lazy-init이라고 부른다. (cf. 스프링은 객체를 생성 초기화 해놓고 요청을 기다리는데 이를 early-init이라 부른다.) [@@@JSP 호출과정을 참고!]
  • JSP로 작성된 HTML코드들은 Servlet 객체에서 println 또는 write 함수로 표현된다. 
out.println("<html>");
out.write("</html>");

JSP의 기본객체

JSP가 Servlet 객체로 변환되면서 자동으로 주입되는 객체(service 메서드의 지역변수)들이 있다. 그런 객체들은 JSP에 실제 코드상에 존재하진 않지만 마치 import된 것처럼 사용할 수 있다. 이런 객체를 JSP의 기본객체라고 부른다.

HttpServletRequest request
HttpServletResponse response
HttpSession session
ServletContext application
ServletConfig config
Object page
PageContext pageContext
JspWriter out
Throwable exception

URL Mapping & Servlet

URL Pattern

요청된 URL은 우선순위에 따라서 매핑이 이루어진다.

우선수위. 종류 URL Pattern
1. exact mapping 정확히 일치하는 URL
2. path mapping 일치하는 path (ex. /java/*)
3. extension mapping 일치하는 어미 (확장자) (ex. *.do)
4. default mapping /

Servlet의 children과 servletMapping

ServeltContext내에는 servlet들을 참조하는 children이라는 Map과 url pattern과 servlet을 매핑하는 servletMapping이라는 Map객체가 있다. 요청시 servletMapping에서 URL Pattern에 맞는 Servlet(Key값)을 찾으면 children의 참조값을 따라가 Servlet이 실행된다. 맞는 URL 패턴이 없다면 default mapping으로  DefaultServlet이 실행된다.

Spring의 DispatcherServlet

Servlet을 발전시켜 만들어진 Spring도 위와같은 매핑을 따른다. 하지만 가장 큰 차이는 Servlet에서 매핑하는 URL패턴은 항상 default mapping이다. 이 때 실행되는 DefaultServlet을 스프링에서는 DispatcherServlet이라고 한다. 이 DispatcherServlet내에 WebServlet에 존재했던 URL Mapping Map이 존재한다.

728x90
반응형