springMVC设置静态资源过滤器,过滤js、css、images等静态资源

首先看个index.jsp首页的代码


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>主页</title>
    <script src="js/jquery.min.js"></script>
    <script>
        $(function(){
            $("#btn").click(function(){
                alert("hello btn");
                });
        });
    </script>

</head>
    <body>
        <br/>
        <button id="btn">提交</button>
    </body>
</html>

页面代码很简单,就一个简单的按钮,点击弹出“hello btn”这样一个事件。但在没有配置静态资源过滤器的情况下,springMVC会拦截掉jquery.min.js文件的加载,让这样简单的一个需求都实现不了。

<servlet>
  <servlet-name>DispatcherServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:springmvc.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>DispatcherServlet</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

在上述DispatcherServlet的配置中,我们默认该控制器会控制所有资源,所有请求。页面在加载过程中,需要请求静态资源的js文件,而这一请求被该控制器所拦截,所以demo的效果就是点击按钮没有任何反应,跟没有引入js文件是一个效果。

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

在springmvc.xml文件中加入以上三个资源映射,当然具体的文件名可以与上面的不一样。这样可以在加载js文件的时候,跳过DispatcherServlet的控制。当然还有其它方法可以实现,比如在DispatcherServlet前加上defaultServlet,先对js等静态资源进行拦截,这样该类请求就不会交由springmvc处理了。

这里提一下误区,上面提到的js/css/images三个Directory静态资源目录,千万千万不能建在WEB-INF目录下,这种目录在配置文件中识别不了,并且mvc:resources会显示红色。直接创建在webapp下面,让该类目录与WEN-INF平级。
设置有效的资源目录,在springmvc.xml文件中不会出现红色的报错,另外,映入的js文件,通过ctrl+鼠标左键可以直接访问查看。
在这里插入图片描述

发布了92 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41885819/article/details/104406937