web.xml组件匹配中,/与/*的区别

    以前我就发现三大组件中,教程中配置的url-pattern的值有的是/,有的是/*,但是当时注意力都在DispcherServlet上了,就飘过去了。今天花了半天时间来吸取这个教训。
    我的bug一直出现org.springframework.web.servlet.DispatcherServlet.noHandlerFound No mapping for GET /shirotest4_war/login.jsp的错误,我就寻思控制器找不到处理器,于是在处理器中加了日志输出,但是日志输出了,还是找不到处理器,那么处理器执行了,怎么含找不到视图,就越走越远了。


    罪魁祸首就在这!

    <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

/与/*规则匹配有以下区别:
< url-pattern > / </ url-pattern > 不会匹配到*.jsp,只会是url类型(如:/log、/demo),*.jsp不会进入spring的DispatcherServlet类。
< url-pattern > /* </ url-pattern > 会匹配*.jsp,会出现返回jsp视图时再次进入spring的DispatcherServlet 类,导致找不到对应的处理器。
    以上原因就是第二种,我从视图解析器,到dispacherServlet执行流程,也没想到会执行了两次servlet!

原文地址:https://www.cnblogs.com/theStone/p/13997214.html