web.xml에서
servlet-mapping 설정 시 url-pattern을 설정하는 것에 대해
정확한 정리가 되어 있지 않아서 정리해보았다.
[url-pattern별 의미]
1. "/"로 시작하고 "/*"로 끝나는 패턴은 path로 인식
-> /wedul/list, /wedul/user 등 모든 URL 패턴을 매칭
2. "*."으로 시작하는 경우 확장자 매칭
-> 과거 확장자 *.do 또는 *.ajax와 같은 패턴 매칭
3. "/"만 정의한 경우 디폴트 서블릿 의미
-> default servlet은 servlet mapping에 걸리지 않은 나머지 매핑요소들을 처리한다.
4. 그 외의 경우는 정확하게 일치하는 매칭
/* Dispathcher servlet을 /*으로 했을때의 문제
/*으로 매핑하였을 경우에 모든 매핑 패턴에 대해 매핑되어서
.jsp, .html 등 이런 요소들에 대한 매핑이 되지 않을 수 있다.
No mapping found for HTTP request with URI [/WEB-INF/jsp/article.jsp] in DispatcherServlet with name 'dispatcher
그래서 이를 해결 하기 위해서는 dispatcher servlet의 url-pattern별을
/으로 변경하여야 한다.
그렇게 되면 *.jsp, *.html 과 같은 패턴이 jspServerlet등에서 처리를 다하고, 넘어오는 요청에 대해서 Default Servlet이 잡아서 이를 처리하게하는 것이다.
그러면 jsp와 같은 패턴이 다른 서블릿에 걸리지 않는 문제를 해결할 수 있다.
1 2 3 4 5 6 7 8 | <!-- viewResolver --> <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> | cs |
※주의사항
DispatcherServlet에 / url-pattern을 지정하면서
tomcat의 server.xml에 /를 무시하기 때문에 정적 요소들에 대한 접근이 되지 않는 경우가 있을 수 있다.
그 이유는 /wedul/picture.jpg와 같은 요청이
@Controller에 정의 되어 있지 않는 경우 매핑될 곳이 없기 때문이다.
ex)
http://10.77.171.151/wedul/picture.jpg
※ 오류내용
DispatcherServlet with name 'dispatcher' processing GET request for [/img/button.jpg]
이를 해결하기 위해서는 다음 xml을 적어주면된다.
<mvc:default-servlet-handler />
이는 매핑이 안된 나머지 url을 DefaultServletHttpRequestHandler가 담당하게 하여 처리하게 하게 해준다. 내부에 url-patting은 /**로 되어있다.
[결론]
/로 했을 때 모든 url-mapping을 dispatcher-servlet에서 처리하겠다고 했으나,
처리가 안된 url에 대해서 다시 spring의 default 서블릿에게 넘겨버리는 형태이다. 그래서 정적 리소스에 대한 접근을 가능하게 해주는 것이다.
'web > Spring' 카테고리의 다른 글
Spring Rest Client Feign 소개 (1) | 2018.05.27 |
---|---|
스프링 CacheManager Ehcache (0) | 2018.05.27 |
Spring 비동기 프로세스 Callable, DeferredResult, SseEmitter (0) | 2018.05.27 |
Mabatis #, $ 차이점 (0) | 2018.05.27 |
Aop 설명과 설정방법 (0) | 2018.05.27 |