<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<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/springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<url-pattern>/</url-pattern>
會匹配到/login這樣的路徑型的url,不會匹配到模式爲*.jsp這樣的後綴型url。故經過視圖解析器後返回jsp視圖時不會再進入DispatcherServlet。說到爲什麼JSP頁面的請求並不會命中這個Servlet,那是因爲servlet容器內建的JSP Servlet將會被調用,而這個容器內建的JSP Servlet已經默認地映射在了*.jsp上。但還是能攔截到靜態資源,如*.js,*.css。
<url-pattern>/*</url-pattern>
會匹配所有的url:路徑型的和後綴型的url(包括/login,*.jsp,*.js和*.html等)。故經過視圖解析器後返回jsp視圖時會再進入DispatcherServlet,導致找不到對應的controller所以報404錯。
No mapping found for HTTP request with URI [/Shiro-Spring/WEB-INF/jsp/login.jsp] in DispatcherServlet with name ‘springmvc’