6. url-pattern
6. url-pattern
配置详解:
*.do
在没有特殊要求的情况下,SpringMVC 的中央调度器 DispatcherServlet 的
<url-pattern/>
常使用后辍匹配方式,如写为
.do
或者.action
,*.mvc
等。/
可以写为/,因为 DispatcherServlet 会将向静态资源的获取请求,例如.css、.js、.jpg、.png
等资源的获取请求,当作是一个普通的 Controller 请求。中央调度器会调用处理器映射器为
其查找相应的处理器。当然也是找不到的,所以在这种情况下,所有的静态资源获取请求也均会报 404 错误。
<servlet-mapping>
<servlet-name>myweb</servlet-name>
<!--
使用框架的时候, url-pattern可以使用两种值
1. 使用扩展名方式, 语法 *.xxxx , xxxx是自定义的扩展名。 常用的方式 *.do, *.action, *.mvc等等
不能使用 *.jsp
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>
静态资源访问方式一
在 springmvc 配置文件中声明 <mvc:default-servlet-handler/>
原理是:加入这个标签后,框架会创健控制器对象 DefaultServletHttpRequestHandler(类似我们自己创建的 MyController)
DefaultServletHttpRequestHandler 这个对象可以把接收的请求转发给 tomcat 的 default 这个 servlet。
<!--1. 第一种处理静态资源的方式-->
<mvc:default-servlet-handler />
<!--2. default-servlet-handler 和 @RequestMapping注解 有冲突, 需要加入annotation-driven 解决问题-->
<mvc:annotation-driven />
在 Tomcat 中,有一个专门用于处理静态资源访问的 Servlet 名叫 DefaultServlet。其 <servlet-name/>
为 default。可以处理各种静态资源访问请求。该 Servlet 注册在 Tomcat 服务器的 web.xml 中
静态资源访问方式二
使用 <mvc:resources/>
(掌握)
在 Spring3.0 版本后,Spring 定义了专门用于处理静态资源访问请求的处理器
ResourceHttpRequestHandler。并且添加了mvc:resources/标签,专门用于解决静态资源无法访问问题。需要在 springmvc 配置文件中添加如下形式的配置:
<!--第二种处理静态资源的方式-->
<mvc:resources mapping="/images/**" location="/images/" />
<mvc:resources mapping="/html/**" location="/html/" />
<mvc:resources mapping="/js/**" location="/js/" />
<!--images/**:可以表示 images/p1.jpg , images/user/logo.gif , images/order/history/list.png-->
<!--mvc:resources和@RequestMapping有一定的冲突-->
<mvc:annotation-driven />
<!--使用一个配置语句,指定多种静态资源的访问-->
<!--<mvc:resources mapping="/static/**" location="/static/" />-->
原理:
mvc:resources 加入后框架会创建 ResourceHttpRequestHandler 这个处理器对象。
让这个对象处理静态资源的访问,不依赖 tomcat 服务器。
mapping: 访问静态资源的 uri 地址, 使用通配符 **
location: 静态资源在你的项目中的目录位置。