JSP 报错:ReferenceError: $ is not defined

时间:2022-07-28
本文章向大家介绍JSP 报错:ReferenceError: $ is not defined,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

运行 SpringMVC 项目时,JSP 的代码报错:

ReferenceError: $ is not defined

JSP 相关代码如下:

...
<script src="js/jquery-3.3.1.min.js"></script>
<script>
    $("#btn").on("click", function () {
        $.ajax({
            type: "post",
            url: "register",
            data: $("form").serialize(),
            success: function (data) {
                console.log(data);
                alert("注册成功");
            },
            error: function (xhr, type, errorThrown) {
                console.log("xhr:" + xhr + " type:" + type + " errorThrown:" + errorThrown);
            }
        });
    });
</script>
...

web.xml 文件相关配置如下:

<servlet>
    <servlet-name>springMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/spring-mvc.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>springMVC</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

这是因为配置的 DispatcherServlet 的映射路径为 / 时,会覆盖掉 tomcat 的 default 配置,所以需要在 SpringMVC 文件中进行配置,对静态资源进行放行:

...
<!-- 配置放行静态资源 -->
<mvc:default-servlet-handler/>
...

这样,发出静态资源请求后,然后 DispatcherServlet 会对请求进行映射匹配,如果匹配不成功,就会转交给 tomcat 的 default 进行处理。

如果不使用 SpringMVC 框架,这些静态资源请求都会由 tomcat 的 default 进行处理。

Tomcat 的 default 配置为在请求路径匹配完其他所有 Servlet 还是没有匹配到的情况下,请求会被发到 default,由 DefaultServlet 进行处理;一般请求的静态资源,无效路径等等都会通过 DefaultServlet 进行处理。