SpringMVC(五):中央调度器的url-pattern设置为 “/“

中央调度器的url-pattern设置为 “/”

1、DispatcherServlet的url-pattern中两种配置

  1. 使用扩展名方式, 语法 *.xxxx , xxxx是自定义的扩展名。 常用的方式 *.do, *.action, *.mvc等等,不能使用 *.jsp。
  2. 使用斜杠 “/”,当你的项目中使用了 / ,它会替代 tomcat中的default。导致所有的静态资源都给DispatcherServlet处理, 默认情况DispatcherServlet没有处理静态资源的能力。没有控制器对象能处理静态资源的访问。所以静态资源(html,js,图片,css)都是404.动态资源some.do是可以访问,的因为我们程序中有MyController控制器对象,能处理some.do请求。

2、如果非要将url-pattern设置为"/"呢?

一般情况下,不推荐这么做,非要这么做的话,为了能够正确访问静态资源,有两种解决方法。

2.1第一种解决方式

在springmvc的配置文件中加入:

<mvc:default-servlet-handler />

加入这个标签后,框架会创健控制器对象DefaultServletHttpRequestHandler(类似我们自己创建的MyController) ,DefaultServletHttpRequestHandler这个对象可以把接收的请求转发给 tomcat的default这个servlet。除此之外,由于default-servlet-handler 和 @RequestMapping注解 有冲突, 需要加入annotation-driven 解决问题:

 <mvc:annotation-driven />

2.2第二种解决方式

使用mvc:resources标签,加入这个标签后, 框架会创建 ResourceHttpRequestHandler这个处理器对象。让这个对象处理静态资源的访问,不依赖tomcat服务器。
mapping属性:访问静态资源的uri地址,使用通配符 **,表示目录下的所有文件
location:静态资源在你的项目中的目录位置。
示例如下,表示访问的uri是/images/下的文件时候,文件所在的位置是/images/

 <mvc:resources mapping="/images/**" location="/images/" />

mvc:resources和@RequestMapping有一定的冲突,因此需要加入:

 <mvc:annotation-driven />

猜你喜欢

转载自blog.csdn.net/qq_41984117/article/details/109305043