Spring MVC的困惑url-pattern /和/*的區別


今天在寫項目時發現一個spring 總是報org.springframework.web.servlet.DispatcherServlet noHandlerFound警告: No mapping found for HTTP request with URI [/myspring/WEB-INF/jsp/index.jsp] in DispatcherServlet with name ‘spring’ 錯誤,也就是找不到我的index.jsp 。

Java代碼如下:

@RequestMapping(“/test/exception”)
public ModelAndView doTestException01(String name) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject(“name”, name);
modelAndView.setViewName(“index”);
return modelAndView;
}

Spring配置文件如下:

<bean id=”viewResolver”
class=”org.springframework.web.servlet.view.InternalResourceViewResolver”>
<property name=”prefix” value=”/WEB-INF/jsp/” />
<property name=”suffix” value=”.jsp” />
</bean>

web配置文件如下:

<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

后來發現原來是web配置文件出錯了,出錯的原因是url-pattern的問題,將<url-pattern>/*</url-pattern>改成

<url-pattern>/</url-pattern>后,問題解決了。

其中/和/*的區別:
< url-pattern > / </ url-pattern >   不會匹配到*.jsp,即:*.jsp不會進入spring的 DispatcherServlet類 。
< url-pattern > /* </ url-pattern > 會匹配*.jsp,會出現返回jsp視圖時再次進入spring的DispatcherServlet 類,導致找不到對應的controller所以報404錯。

總之,關於web.xml的url映射的小知識:
< url-pattern>/</url-pattern>  會匹配到/login這樣的路徑型url,不會匹配到模式為*.jsp這樣的后綴型url
< url-pattern>/*</url-pattern> 會匹配所有url:路徑型的和后綴型的url(包括/login,*.jsp,*.js和*.html等)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM