web/Spring

/과 /*의 차이점을 포함한 url-mapping 정리

반응형

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