在之前的案列中,对于web.xml的<url pattern/>都配置为/
<!--对所有请求都拦截-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping
复制
它是是对所有的请求都会拦截,这样做有什么后果呢??
案例说明:
修改index.jsp
<body>
请求地址springmvc_test1.do<a href="springmvc_test.do">发起请求</a>
<!-- http://localhost:8080/springMVC/springmvc_test.do -->
<img src="images/p1.jpg" alt="图片不能正常显示">
</body>
复制
图片位置
测试结果:
在框架中,url-pattern使用 / 的方式会倒是静态资源也被拦截,资料资源包括(css,js,html,各种格式的图片)
一帮有两种方式
1.扩展名 *.xxx xxx是自定义扩展名,列如*.do,*.action,*.mvc等等,但是*.jsp是不行的
2.就是 / ,会对所有资源拦截
修改web.xml的url-pattern
<url-pattern>*.do</url-pattern>
复制
测试,图片正常显示
解决方法:
控制url_parttern的写法,对静态资源不进行拦截
使用 <mvc:default servlet handler/>
使用 <mvc:resources/>
使用 <mvc:default servlet handler/>
在springmvc的配置文件中加入 <mvc:default-servlet-handler>这个标签加入后,springmvc框架会调用服务器(Tomcat)中的名字叫“default”的servlet处理静态资源的访问。
在springMVC.xml的服务器中添加
<!--交给各自的服务器默认的处理静态资源的servlet-->
<mvc:default-servlet-handler/>
复制
说明:
在Tomcat 中,有一个专门用于处理静态资源访问的 Servlet DefaultServlet 。其<servlet name/> 为 default 。可以处理各种静态资源访问请求。该 Servlet 注册在 Tomcat 服务器的 web.xml 中。在 Tomcat 安装目录 /conf/web.xml 。
注意:
<mvc:defaultservlet handler/> 表示使用 DefaultServletHttpRequestHandler 处理器 对象。而该处理器调用了 Tomcat 的 DefaultServlet 来处理静态资源的访问请求。如果默认的 servlet名称不是 default, 需要使用属性 default servlet name 指定 servlet 的名称,
例如::<mvc:default servlet handler default servlet name= servlet 名称>
Tomcat,Jetty 默认 Servlet 的名字 -- "default"
WebLogic默认 Servlet 的名字 --- "FileServlet"
WebSphere默认 Servlet 的名字 -- "SimpleFileServlet"
使用 <mvc:resources/>
在Spring3.0.4 版本后, Spring 中定义了专门用于处理静态资源访问请求的处理器ResourceHttpRequestHandler 。并且 添加了 <mvc: 标签,专门用于解决静态资源无法访问问题。需要在 springmvc.xml 中添加如下形式的配置
<mvc:resources mapping="/images/**" location="/images/"/>
复制
location:表示资源所在的目录
mapping:表示对该资源的请求 以 / 开始的请求,如 /image/beauty.jpg ,
/images/car.png 等 。
注意:后面两个星号**,表示images目录及子目录下的所有资源
喜欢转发
明天见