springmvc11

解读中央调度器 < url-pattern/ >

1 .do

在没有特殊要求的情况下,springmvc 的中央调度器 DispatcherServlet 的< url-pattern/ >常使用后缀匹配方式,如写为 *.do 或者 *.action , *.mvc 等


2 /

可以写为 / ,因为DispatcherServlet会将向静态资源的获取请求,例如 .css .js .jpg .png 等资源的获取请求,作为是一个普通的Controller请求。中央调度器会调用处理器映射器为其查找相应的处理器。当然也是找不到的,所以在这种情况下,所有的静态资源获取请求也均会报404错误。


发起的请求是由哪些服务器处理的:

http: //localhost:8080/05_url_pattern/index.jsp tomcat
http: //localhost:8080/05_url_pattern/images/1.jpg tomcat
http: //localhost:8080/05_url_pattern/html/test.html tomcat
http: //localhost:8080/05_url_pattern/some.do springmvc框架(DispatcherServlet)


tomcat本身能处理静态资源的访问,像html,图片,js文件等都是静态资源


tomcat的web.xml文件有一个 servlet 名称为 default,在服务器启动时创建。如下:

<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern> // "/" 表示静态资源和未映射的请求都给这个default处理
</servlet-mapping>

这个名叫 default 的 servlet 作用:
1 处理静态资源
2 处理未映射到其它servlet的请求


使用 ” / “ 后,无法访问静态资源,可以访问动态资源

// web.xml
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--
使用框架的时候,url-pattern可以使用两种方式
1.使用扩展名方式,语法 *.xxxx , xxxx时自定义扩展名。常用的方式 *.do, *.action, *.mvc等等
http://localhost:8080/myweb/some.do
http://localhost:8080?myweb/other.do

2.使用斜杠 "/"
当你的项目使用了 / ,它会替换 tomcat 中的 default.
导致所有的静态资源都给DispatcherServlet处理,默认情况下DispatcherServlet没有处理静态资源的能力,
没有控制器对象能处理静态资源的访问,所以静态资源(html,js,图片,css)都是404

动态资源some.do可以访问,原因时我们程序中有MyController控制器对象,能处理some.do请求
-->
<url-pattern>/</url-pattern>
</servlet-mapping>

posted @ 2021-04-18 21:37  青竹之下  阅读(31)  评论(0编辑  收藏  举报