中央调度器DispatcherServlet的映射路径,不能随意乱配置,否则会导致各种问题
一·在web.xml文件中配置一个 DispatcherServlet:
案例如下
<servlet>
<servlet-name>myweb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 自定义springmvc读取的配置文件的位置-->
<init-param>
<!-- springmvc的配置文件的位置属性-->
<param-name>contextConfigLocation</param-name>
<!-- 指定自定义文件的位置-->
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!-- 在tomcat启动后,创建servlet对象实例
local-on-startup:表示tomcat启动后创建对象的顺序。他的值是整数,数值越小,tomcat创建对象的时间越早,大于等于0的整数
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<!-- 使用框架的时候,url-pattern可以使用两种值:-->
<!-- 1.使用扩展名方式:-->
<!-- 语法格式:*.xxx (其中xxx是自定义的扩展名)。-->
<!-- 例如:*.do,*.action,*.mvc等等(表示:http://localhost:8080/工程名/xxx.do,据可以访问这个servlet程序)-->
<!-- 2.使用斜杠方式:-->
<!-- 语法格式:"/+访问路径"-->
<servlet-name>myweb</servlet-name>
<!-- 拦截路径方式一: <url-pattern>*.do</url-pattern>-->
<!-- 拦截路径方式二-->
<url-pattern>/</url-pattern>
<!-- 拦截路径方式三: <url-pattern>/*</url-pattern>-->
</servlet-mapping>
二· DispatcherServlet 拦截路径:若随意配置其拦截路径
注意:web可以为其他字符
举例如下:
1.配置路径:/web/
<url-pattern>/web/</url-pattern>
测试结果:报404
2.配置路径:/web/*
<url-pattern>/web/*</url-pattern>
测试结果:报404
3.配置路径:/web/*.do
<url-pattern>/web/*.do</url-pattern>
测试结果:启动组件失败
4.配置路径:/web*.do
<url-pattern>/web*.do</url-pattern>
测试结果:启动组件失败
5.配置路径:*.*
<url-pattern>*.*</url-pattern>
测试结果:404
三· DispatcherServlet 拦截路径:正确配置其拦截路径
方案一:/(推荐)
<url-pattern>/</url-pattern>
<!--
/ : 拦截所有请求(包括静态资源,不包括动态资源),
当我们调用静态资源交给中央调度器处理,会报404错误。
解决办法:使用默认的servlet处理静态资源,
即springMVC配置文件中加上:<mvc:default-servlet-handler/>
-->
方案二:*.do (推荐)
<url-pattern>*.do</url-pattern>
<!--
注意:do可以为其他字母
其中的url-pattern最好使用.do,但是有时候开发android工程的时候,
请求可能为resetfull格式,就不能使用这个url-pattern,
这时使用 / 作为url-pattern,但是,对于其静态资源的的请求,
中央调度器不能为它找到相应的处理器,就会抛出404错误
-->
方案三:/*(不推荐)
<url-pattern>/*</url-pattern>
<!--
/* : 能够拦截处理所有请求(包括静态,动态资源),
当我们我们调用的静态,动态资源没有相应的处理器处理该请求时,会报404错误
解决办法:使用默认的servlet处理静态资源,
即springMVC配置文件中加上:<mvc:default-servlet-handler/>
-->
四·综上所述:
中央调度器 DispatcherServlet 配置的拦截路径,只能为上述三种可行方案中的任意一种方案,若随意使用其他的配置方案,都很可能出问题