SPRING
2019.01.30 / 24:08

web.xml url-pattern / ¿Í /* ÀÇ Â÷ÀÌÁ¡

hanulbit
Ãßõ ¼ö 262

[*.do¿¡¼­ /* ·Î ¹Ù²Ù°Ô µÈ ÀÌÀ¯]

½ºÇÁ¸µ 3.1 »ùÇà ÇÁ·ÎÁ§Æ®ÀÇ web.xml(DD) ±¸¼º ½Ã url-patternÀ» *.do¿Í °°ÀÌ ¼³Á¤ÇÏ¿´´Ù.

ÀÌÀ¯´Â ´Ü¼øÇÏ´Ù.

ÇÁ·ÎÁ§Æ®¸¦ ÁøÇàÇÒ ¶§ Ç×»ó *.do¸¦ »ç¿ëÇ߱⠶§¹®ÀÌ´Ù.


ÇÏÁö¸¸ REST ¹æ½ÄÀÇ À¥ ¾îÇø®ÄÉÀ̼ÇÀ» ±¸¼ºÇϱâ À§Çؼ­´Â ´ÙÀ½°ú °°Àº URL Çü½ÄÀ» Á¦°øÇØ¾ß Çϴµ¥ ÇöÀç´Â *.do¿Í °°ÀÌ µÇ¾î Àֱ⠶§¹®¿¡ patternÀ» /* ¿Í °°ÀÌ º¯°æÇؾ߸¸ Çß´Ù.

http://localhost:8080/user/list



[Çö»ó]

ÀÌÁ¦ ³»°¡ ¸¸µé¾î ³õÀº ÇÁ·ÎÁ§Æ®´Â REST ¹æ½ÄÀ» Áö¿øÇÏ´Â spring web applicationÀÌ µÇ¾ú´Ù.

Ç㳪 controller mapping urlÀ» È£ÃâÇϸé 404 ¿¡·¯°¡ ¹ß»ýÇϸ鼭 ¾Æ·¡¿Í °°Àº ·Î±×°¡ ÂïÈù´Ù.

No mapping found for HTTP request with URI [/WEB-INF/view/common/layout/default/layout.jsp] in 

DispatcherServlet with name 'dispatcher'



[¿øÀÎ]
controller mapping urlÀ» ¸ø ã¾Æ¼­ ¹ß»ýÇÏ´Â 404°¡ ¾Æ´Ñ /WEB-INF/view/common/layout/default/layout.jsp ÀÇ ¸ÅÇÎ URLÀ» ãÀ» ¼ö ¾ø¾î¼­ ¹ß»ýÇÏ´Â ¿À·ù¿´´Ù.

ÀÌ ¿À·ù°¡ ¹ß»ýÇÏ´Â ¿øÀÎÀ» ¾Ë±â À§Çؼ­´Â ¼­ºí¸´ ÄÁÅ×ÀÌ³Ê¿Í À¥ ¾îÇø®ÄÉÀ̼ǰ£ÀÇ ¿¬µ¿ ¹æ¹ýÀ» ¾Ë¾Æ¾ß ÇÑ´Ù.
ÀÏ´Ü url-pattern¿¡ µî·ÏÇÒ ¼ö ÀÖ´Â URLÀº ´ÙÀ½°ú °°´Ù.
"/"·Î ½ÃÀÛÇÏ°í "/*"·Î ³¡³ª´Â ÆÐÅÏÀº path·Î ÀνÄ
"*."À¸·Î ½ÃÀÛÇÏ´Â °æ¿ì È®ÀåÀÚ ¸ÅĪ
"/"¸¸ Á¤ÀÇÇÑ °æ¿ì µðÆúÆ® ¼­ºí¸´ ÀǹÌ
±× ¿ÜÀÇ °æ¿ì µ¿Ä¡ ¸ÅĪ

À§ÀÇ ÆÐÅÏ ¸ÅĪ¿¡ Á¸ÀçÇÏÁö´Â ¾ÊÁö¸¸ /*´Â ¿äû ¹Þ´Â ¸ðµç URLÀ» ó¸®ÇÑ´Ù´Â Àǹ̴Ù. (¾Æ·¡¿Í °°Àº À¯ÇüÀÇ ÆÐÅÏ ¸ðµÎ)
/user/list
/user/list.do
/user/userList.jsp
/img/test.png

°á±¹ ¸ðµç ¿äûÀ» DispatcherServlet¿¡¼­ ó¸®ÇÏ°Ú´Ù°í ÁöÁ¤ÇßÀ¸´Ï jsp¿¡ ´ëÇÑ È£Ãâµµ DispatcherServletÀÌ Ã³¸®¸¦ ÇÏ·Á°í Çß´ø °ÍÀÌ´Ù.
ÀÌ·Î ÀÎÇÏ¿© jsp¿¡ ÇØ´çÇÏ´Â mapping urlÀ» ãÀ» ¼ö ¾ø¾î HTTP 404 ¿À·ù°¡ ¹ß»ýÇÏ°Ô µÈ °ÍÀÌ´Ù.


[ÇØ°á ¹æ¾È]
±×·³ ÇØ°á ¹æ¹ýÀº ¹»±î?
°á·ÐÀûÀ¸·Î ¸»ÇÏÀÚ¸é url-patternÀ» "/" ·Î ÁöÁ¤ÇÏ¸é µÈ´Ù.
ÇØ°á ¹æ¹ýÀº °£´ÜÇÏÁö¸¸ ¿Ö ÀÌ·¸°Ô ¼³Á¤Çϸé Àß µÇ´ÂÁö ±Ã±ÝÇØ Á³´Ù.

À§¿¡¼­ ¾ð±ÞÇßÁö¸¸ "/"·Î Á¤ÀÇÇÑ °æ¿ì µðÆúÆ® ¼­ºí¸´À» ÀǹÌÇÑ´Ù°í ÇÏ¿´´Ù.

ÀÌ°Ô ¹º ¸»Àΰ¡?
ÀÌ ¸»ÀÇ Àǹ̸¦ ã¾Æ º¸´Ï µðÆúÆ® ¼­ºí¸´Àº ¼­ºí¸´ ¸ÅÇÎ URL¿¡ °É¸®Áö ¾Ê´Â ¿äûµéÀ» ó¸®ÇÑ´Ù°í ÇÑ´Ù.

¶Ç Àǹ®ÀÌ »ý±ä´Ù.
³­ ¼­ºí¸´ ¸ÅÇÎÀ» "/" ¿Í °°ÀÌ ÇÑ °³¸¸ ¸¸µé¾ú´Âµ¥...°á±¹ °Å¸£´Â ÀÛ¾÷ ¾øÀÌ ³»°¡ ¸¸µé¾î ³õÀº ¼­ºí¸´ ¸ÅÇο¡ ¸ðµÎ °É¸®´Â °Í ¾Æ´Ñ°¡?
±×¸®°í µðÆúÆ® ¼­ºí¸´Àº ¹º°¡?

À§ÀÇ Àǹ®µéÀ» ÇØ°áÇϱâ À§Çؼ­ ÀÌÁ¦ tomcat ¼­ºí¸´ ÄÁÅ×À̳ʿ¡ ´ëÇؼ­ ¾ð±ÞÇÒ ¶§°¡ ¿Ô´Ù.
${TOMCAT_HOME}/conf/web.xml ÆÄÀÏÀ» ¿­¾î º¸¸é ´ÙÀ½°ú °°ÀÌ ¼¼ °³ÀÇ ¼­ºí¸´ ¸ÅÇÎÀÌ Á¸ÀçÇÑ´Ù.
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>


<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>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>

*.jsp, *.jspx¿Í °°Àº url ÆÐÅÏÀº JspServletÀÌ Ã³¸®ÇÏ°í, DefaultServletÀº spring Controller mapping°ú jsp ÆÐÅÏ¿¡ °É¸®Áö ¾Ê´Â ¿äû µéÀ» ó¸®ÇÑ´Ù´Â °á·ÐÀÌ ³ª¿Â´Ù.
Áï, DefaultServletÀº png, jpg, js, htmlµî Á¤ÀûÀÎ content¸¦ ó¸®ÇÑ´Ù´Â ¸»ÀÌ´Ù.

Á¤¸®Çϸé 
http://localhost:8080/user/userList.jsp <- JspServlet ¿äû ó¸®
http://localhost:8080/img/button.jpg <- DefaultServlet ¿äû ó¸®
http://localhost:8080/user/list <- DispatcherServlet ¿äû ó¸®


[½ºÇÁ¸µ¿¡¼­ Á¤Àû content È£Ã⠽à 404 ¿¡·¯ ¹ß»ý]
¹®Á¦°¡ »ý°å´Ù.
http://localhost:8080/user/list ´Â Á¤»óÀûÀ¸·Î µ¿ÀÛÇϴµ¥ 
http://localhost:8080/img/button.jpg ·Î È£Ãâ ÇÒ ¶§ 404 ¿¡·¯°¡ ¹ß»ýÇÑ´Ù.

DispatcherServlet with name 'dispatcher' processing GET request for [/img/button.jpg]

·Î±×¸¦ º¸¸é *.jpg È£Ã⠽à DefaultServletÀÌ Ã³¸®ÇÏ´Â °ÍÀÌ ¾Æ´Ñ DispatcherServletÀÌ Ã³¸®¸¦ ÇÏ°Ô µÇ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù.
´ç¿¬È÷ DispatcherServletÀÌ Ã³¸®¸¦ ÇÏ°Ô µÇ¸é controller mapping URLÀÌ Á¸ÀçÇÏÁö ¾ÊÀ¸´Ï 404 ¿À·ù°¡ ¹ß»ýÇÑ´Ù.

DispatcherServletÀº url-patternÀ» "/" ¿Í °°ÀÌ ¼³Á¤ÇÏ°Ô µÇ¸é¼­ tomcatÀÇ server.xml¿¡ Á¤ÀǵǾî ÀÖ´Â url-pattern "/"À» ¹«½ÃÇϱ⠶§¹®ÀÌ´Ù.
°á±¹ DispatcherServlet url-patternÀ» ÀçÁ¤ÀÇÇÏ°Ô µÇ¾î¼­ DefaultServletÀº ´õÀÌ»ó µ¿ÀÛÇÒ ¼ö ¾ø°Ô µÈ °ÍÀÌ´Ù.

½ºÇÁ¸µ¿¡¼­´Â À̸¦ ÇØ°áÇϱâ À§Çؼ­ <mvc:default-servlet-handler /> ¼³Á¤À» Áö¿øÇÑ´Ù.

<mvc:default-servlet-handler /> ¼³Á¤Àº ³»ºÎÀûÀ¸·Î DefaultServletHttpRequestHandler°¡ ´ã´çÇÏ°Ô µÇ°í, ÀÌ Çڵ鷯(ÄÁÆ®·Ñ·¯)´Â /**·Î ¸ÅÇεǾî ÀÖ´Ù°í ÇÑ´Ù. (¾Æ·¡ Åäºñ´Ô ±Û Âü°í)

DefaultServletHttpRequestHandler°¡ ÇÏ´Â ¿ªÇÒÀº DispatcherServletÀÌ Ã³¸® ¸øÇÏ´Â ¸ÅÇÎ urlÀ» DefaultServletÀ¸·Î ³Ñ±â´Â °ÍÀÌ´Ù.

µåµð¾î Á¤¸® ³¡...
À̶ó°í »ý°¢ÇÏ¸é ¿À»ê.
<mvc:default-servlet-handler /> ¼³Á¤À» Ãß°¡ÇÏ´Ï http://localhost:8080/user/list È£Ã⠽à 404¿¡·¯°¡ ¹ß»ýÇÑ´Ù.
·Î±×¸¦ È®ÀÎÇØ º¸´Ï ÀÌ»óÇÑ ºÎºÐÀÌ ÀÖ¾ú´Ù. 
¾Æ·¡¿Í °°ÀÌ SimpleUrlHandlerMapping¿¡¼­ 󸮸¦ ÇÏ°í ÀÖ´Â °ÍÀÌ´Ù.
SimpleUrlHandlerMapping - Matching patterns for request [/user/list] are [/**]

µðÆúÆ® Çڵ鷯 ¸ÅÇÎÀÎ DefaultAnnotationHandlerMappingÀÌ Ã³¸®ÇØ¾ß Çϴµ¥ ¿Ö SimpleUrlHandlerMappingÀÌ Ã³¸®¸¦ ÇÏ°Ô µÈ °ÍÀϱî?
ÀÌÀ¯´Â µÎ °³ ÀÌ»óÀÇ Çڵ鷯 ¸ÅÇÎÀÌ µî·ÏµÇ¾úÀ» °æ¿ì¿¡´Â µðÆúÆ® Àü·«ÀÌ ¹«½ÃµÇ±â ¶§¹®ÀÌ´Ù.

°á±¹ <mvc:annotation-driven /> ¼³Á¤À» ÅëÇØ DefaultAnnotationHandlerMappingÀÌ ÀÚµ¿ µî·ÏµÇ°Ô ¼³Á¤ÇÏ¿´°í, ÀÌ·Î½á ¸ðµç ¿äûÀÌ Á¤»óÀûÀ¸·Î µ¿ÀÛÇÏ¿´´Ù.

´ÜÁö url-pattern¸¸ Á¤¸®ÇÏ·Á°í Çߴµ¥ ²¿¸®¿¡ ²¿¸®¸¦ ¹°¾î¼­ ½ºÇÁ¸µ±îÁö ¼³Á¤±îÁö ¿À°Ô µÇ¾ú´Ù.

Áö±Ý±îÁö url-pattern¿¡ ´ëÇؼ­ ´ë¼ö·ÓÁö ¾Ê°Ô »ý°¢Çߴµ¥ ±î¸é ±ò¼ö·Ï °øºÎÇØ¾ß ÇÒ °ÍµéÀÌ »ê´õ¹ÌÀÌ´Ù.
±×·¡µµ ¿À´Ã ÇÏ·ç ³»°¡ ¹º°¡¸¦ ¹è¿ï ¼ö ÀÖ¾ú´Ù´Â °Í¿¡ º¸¶÷À» ´À³¤´Ù.