今天在搭建ssm框架式进行测试,发现请求的jsp文件的图片无法显示。查看页面源代码为:
jsp页面的代码为:
通过localhost:8080/yycgmain/images/welcome.gif是404。
问题的原因就是springMVC对于静态资源的拦截,在web.xml中,我在DispatcherServlet之后设置了
这里表示拦截了除.jsp结尾的所有请求,当然相应的css/js/img等资源的请求也被拦截了。
解决方法:
方法1:在springmvc.xml中添加<mvc:resources>,列出需要加载的静态资源所在的位置,这样请求来时默认servlet来处理这些静态资源,而不是通过前端控制器。
其中的location标识项目目录webapp下的静态资源的实例路径。mapping表示映射的虚拟路径,即请求中使用的路径。此项目中的静态资源文件夹如下图所示:
方法2:在web.xml中使用默认的servlet,专门用来处理静态资源请求:
<!-- 使用默认servlet处理静态资源请求 --> <!--后缀名为css/gif/jps/png/js的静态资源不拦截--><servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> <url-pattern>*.js</url-pattern> <url-pattern>*.png</url-pattern> <url-pattern>*.gif</url-pattern> <url-pattern>*.jpg</url-pattern></servlet-mapping>注意:此servlet的配置要放在前端控制器的配置之前,否则会失效
附录:
1.pageContext.request.contextPath表示的究竟是什么:
该项目的结构如下:
根据页面源代码可知,${pageContext.request.contextPath}=yycgmain,即当前项目的名称。在tomcat的webapps下,有着名为yycgmain的文件夹,即此项目的工程目录:
因此,jsp页面中常用的src="${pageContext.request.contextPath }/images/welcome.gif表示访问tomcat下webapps中项目文件名下的静态资源