URL 패턴
@WebServlet으로 서블릿을 URL에 매핑할 때 사용한다. Spring에서도 동일한 URL 패턴을 사용한다.
종류 | URL pattern | 매칭 URL |
1. exact(정확한) mapping | /login/hello.do | http://localhost/login/hello.do |
2. path(경로) mapping | /login/* | http://localhost/login/ http://localhost/login/hello http://localhost/login/hello.do http://localhost/login/test/ |
3. extension(확장자) mapping | *.do | http://localhost/hi.do http://localhost/login/hello.do |
4. default mapping | / | http://localhost/ http://localhost/hello.do http://localhost/login/ http://localhost/login/hello http://localhost/login/hello.do |
각 번호는 우선순위를 나타낸다. default mapping은 모든 주소와 매칭이 된다. 하지만 우선순위가 제일 낮기 때문에 앞선 우선순위에서 매칭이 안될 때만 default mapping으로 매칭된다.
HelloServlet
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
Spring에서도 URL 패턴 사용 가능
@RequestMapping("/hello")
private void main() {
System.out.println("Hello - private");
}
ServletContext
서블릿의 이름과 URL 매핑이 Map형태로 저장되어있다. 요청이 오면 servletMappings 에서 요청과 일치한 URL패턴(key)의 value 값(서블릿 이름)을 찾는다. children(서블릿) 에서 해당 서블릿 이름에 해당하는 서블릿으로 처리한다.
ex)
1. 브라우저에서 /hello 로 요청
2. servletMappings에서 /hello에 대한 key값 찾기
3. 해당 value값(서블릿이름)에 해당하는 children(서블릿)의 key값을 찾는다.
4. 해당 값에 대응하는 서블릿을 처리한다.
요청 URL에 대응하는 서블릿이 없다면??
404 NOT FOUND 에러가 발생한다.
스프링의 DispatcherServlet
스프링에서는 요청 URL에 대응하는 서블릿이나 JSP를 사용하지 않기 때문에 모든 요청을 "/" 즉, Default Servlet으로 처리한다. 이를 DispatcherServlet이라고 한다.
모든 요청을 먼저 이 곳에서 받고 DispatcherServlet 안에서 내부적으로 요청에 해당하는 URL을 해당 Controller로 매핑시켜준다.
스프링의 기본 설정
Tomcat에 있는 web.xml (전체 설정)
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
spring 프로젝트의 web.xml (프로젝트별 개별 설정)
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
기존 톰캣에 설정되어있던 DefaultServlet을 spring이 엎어치기해서 appServlet이라는 이름의 서블릿으로 등록했으며 서버로 오는 모든 요청을 DispatcherServlet로 받게 된다.
'프로그래밍 > Spring' 카테고리의 다른 글
[Spring] @RequestParam에 대해 알아보자 (0) | 2021.12.31 |
---|---|
[Spring] Servlet/JSP Filter에 대해 알아보자 (0) | 2021.12.31 |
[Spring] Servlet/JSP Scope에 대해 알아보자 (0) | 2021.12.30 |
[Spring] Servlet에 대해 간단히 알아보자 (0) | 2021.12.30 |
[Spring] 관심사의 분리와 MVC 패턴에 대해 알아보자 (0) | 2021.12.29 |