前言:在框架的使用中,如果只沒有使用spring框架 ,用到struts2框架時候,我們的struts2底層機制有一系列的過濾器,此時前端控制器(門面模式)可以就可以使用struts2的過濾器來充當前端控制器,代碼展示如下(在web.xml文件中):
<filter>
<filter-name>house</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>house</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
而當我們使用spring框架來開發時,spring具備前端控制器功能,代碼如下(web.xml文件中):
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern><!-- 不能用/* 否則會覆蓋掉已有的配置 -->
</servlet-mapping>
在第二種方案中, 這里url-pattern 的配置 中存在很大區別:
<url-pattern>/</url-pattern> 不會匹配到.jsp,不會進入spring的DispatcherServlet類
<url-pattern>/</url-pattern> 會匹配*.jsp,導致進入spring的DispatcherServlet類,然后去尋找controller,接著找不到對應的controller所以報錯。(有星號)
總之,關于web.xml的url映射的小知識:
<url-pattern>/</url-pattern> 會匹配到/login這樣的路徑型url,不會匹配到模式為.jsp這樣的后綴型url
<url-pattern>/</url-pattern> 會匹配所有url:路徑型的和后綴型的url(包括/login,.jsp,.js和*.html等)(有星號)