Spring 引导 webjars:无法通过 webjar 加载 javascript 库
Spring boot webjars: unable to load javascript library through webjar
我有一个 spring 引导(我使用 Thymeleaf 进行模板化)项目,我想在其中使用一些 jQuery 库。
不幸的是,webjars 根本没有加载。我尝试了很多配置,但都失败了。
这是我的 HTML 页面的代码片段:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head lang="en">
<title>JAC</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<script src="http://cdn.jsdelivr.net/webjars/jquery/2.1.4/jquery.js"
th:src="@{/webjars/jquery/2.1.4/jquery.min.js}" type="text/javascript"></script>
<script src="http://cdn.jsdelivr.net/webjars/jquery-file-upload/9.10.1/jquery.fileupload.js" type="text/javascript"
th:src="@{/webjars/jquery-file-upload/9.10.1/jquery.fileupload.min.js}"></script>
<link href="http://cdn.jsdelivr.net/webjars/bootstrap/3.3.5/css/bootstrap.min.css"
th:href="@{/webjars/bootstrap/3.3.5/css/bootstrap.min.css}"
rel="stylesheet" media="screen" />
<link href="http://cdn.jsdelivr.net/webjars/jquery-file-upload/9.10.1/jquery.fileupload.css"
rel="stylesheet" media="screen" />
</head>
我已经在 pom 文件中添加了它们:
<dependency>
<groupId>org.webjars.npm</groupId>
<artifactId>jquery</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>3.3.5</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery-file-upload</artifactId>
<version>9.10.1</version>
</dependency>
但是在调用页面时,我在 jquery.min.js 和 jquery.fileupload.min.js 上收到了 404。
GET http://localhost:8888/webjars/jquery-file-upload/9.10.1/jquery.fileupload.min.js
2015-09-21 02:02:04.059 home:9
GET http://localhost:8888/webjars/jquery/2.1.4/jquery.min.js 404 (Not Found)
webjars 依赖项应该在 spring 引导类路径中可用,因此您应该尝试使用 src 属性引用 webjars,如下所示:
<script src="webjars/jquery/2.1.4/jquery.min.js" type="text/javascript"></script>
<script src="webjars/jquery-file-upload/9.10.1/jquery.fileupload.min.js"></script>
<link href="webjars/bootstrap/3.3.5/css/bootstrap.min.css"
rel="stylesheet" media="screen" />
<link href="webjars/jquery-file-upload/9.10.1/jquery.fileupload.css"
rel="stylesheet" media="screen" />
您引用的 jquery 库是正确的。也许您缺少资源处理程序配置。
<mvc:resources mapping="/webjars/**" location="classpath:/META-INF/resources/webjars/"/>
或者如果您使用 JavaConfig
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
如果这不起作用,请检查您的类路径中是否有 webjars(在 7Zip 中打开您的应用程序 JAR,并检查其中是否有 webjars 资源。)
检查 jquery 的 webjar 后,我通过添加 "dist" 子路径使它正常工作。
<script src="webjars/jquery/2.1.4/dist/jquery.min.js" type="text/javascript"></script>
我最终执行了 mvn clean install(从 cmd 提示符)以清理目标并正确填充所有 lib/jars。我正在使用 Spring 引导和 Intelij。
在一个博客上找到的其他答案:
When using Spring Framework version 4.2 or higher, it will
automatically detect the webjars-locator library on the classpath and
use it to automatically resolve the version of any WebJars assets.
In order to enable this feature, we’ll add the webjars-locator library
as a dependency of the application:
<dependency>
<groupId>org.webjars</groupId>
<artifactId>webjars-locator</artifactId>
<version>0.30</version>
</dependency>
In this case, we can reference the WebJars assets without using the
version; (...)
如果您使用 servlet 3.x 只需添加:
1- 使用 java 配置:
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/webjars/**").addResourceLocations("/webjars/").resourceChain(false);
registry.setOrder(1);
}
}
2- 或 xml 配置:
<mvc:resources mapping="/webjars/**" location="/webjars/">
<mvc:resource-chain resource-cache="false" />
</mvc:resources>
检查 jquery 的 webjars 后,我通过添加“ POM.XML 文件中使用的 JQUERY 库的版本
<script src = "/webjars/jquery/3.1.0/jquery.min.js"></script>
(在我的例子中,我使用的是 3.1.0 版本,仅使用您正在使用的那个版本)。
确保在添加依赖项时是否更新了 bootstrap 或 jquery 的版本,您应该更新 jsp 中的 URL的或 html 与 bootstrap 和 jquery.
的正确版本
我有一个 spring 引导(我使用 Thymeleaf 进行模板化)项目,我想在其中使用一些 jQuery 库。
不幸的是,webjars 根本没有加载。我尝试了很多配置,但都失败了。
这是我的 HTML 页面的代码片段:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head lang="en">
<title>JAC</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<script src="http://cdn.jsdelivr.net/webjars/jquery/2.1.4/jquery.js"
th:src="@{/webjars/jquery/2.1.4/jquery.min.js}" type="text/javascript"></script>
<script src="http://cdn.jsdelivr.net/webjars/jquery-file-upload/9.10.1/jquery.fileupload.js" type="text/javascript"
th:src="@{/webjars/jquery-file-upload/9.10.1/jquery.fileupload.min.js}"></script>
<link href="http://cdn.jsdelivr.net/webjars/bootstrap/3.3.5/css/bootstrap.min.css"
th:href="@{/webjars/bootstrap/3.3.5/css/bootstrap.min.css}"
rel="stylesheet" media="screen" />
<link href="http://cdn.jsdelivr.net/webjars/jquery-file-upload/9.10.1/jquery.fileupload.css"
rel="stylesheet" media="screen" />
</head>
我已经在 pom 文件中添加了它们:
<dependency>
<groupId>org.webjars.npm</groupId>
<artifactId>jquery</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>3.3.5</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery-file-upload</artifactId>
<version>9.10.1</version>
</dependency>
但是在调用页面时,我在 jquery.min.js 和 jquery.fileupload.min.js 上收到了 404。
GET http://localhost:8888/webjars/jquery-file-upload/9.10.1/jquery.fileupload.min.js
2015-09-21 02:02:04.059 home:9
GET http://localhost:8888/webjars/jquery/2.1.4/jquery.min.js 404 (Not Found)
webjars 依赖项应该在 spring 引导类路径中可用,因此您应该尝试使用 src 属性引用 webjars,如下所示:
<script src="webjars/jquery/2.1.4/jquery.min.js" type="text/javascript"></script>
<script src="webjars/jquery-file-upload/9.10.1/jquery.fileupload.min.js"></script>
<link href="webjars/bootstrap/3.3.5/css/bootstrap.min.css"
rel="stylesheet" media="screen" />
<link href="webjars/jquery-file-upload/9.10.1/jquery.fileupload.css"
rel="stylesheet" media="screen" />
您引用的 jquery 库是正确的。也许您缺少资源处理程序配置。
<mvc:resources mapping="/webjars/**" location="classpath:/META-INF/resources/webjars/"/>
或者如果您使用 JavaConfig
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
如果这不起作用,请检查您的类路径中是否有 webjars(在 7Zip 中打开您的应用程序 JAR,并检查其中是否有 webjars 资源。)
检查 jquery 的 webjar 后,我通过添加 "dist" 子路径使它正常工作。
<script src="webjars/jquery/2.1.4/dist/jquery.min.js" type="text/javascript"></script>
我最终执行了 mvn clean install(从 cmd 提示符)以清理目标并正确填充所有 lib/jars。我正在使用 Spring 引导和 Intelij。
在一个博客上找到的其他答案:
When using Spring Framework version 4.2 or higher, it will automatically detect the webjars-locator library on the classpath and use it to automatically resolve the version of any WebJars assets.
In order to enable this feature, we’ll add the webjars-locator library as a dependency of the application:
<dependency> <groupId>org.webjars</groupId> <artifactId>webjars-locator</artifactId> <version>0.30</version> </dependency>
In this case, we can reference the WebJars assets without using the version; (...)
如果您使用 servlet 3.x 只需添加:
1- 使用 java 配置:
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/webjars/**").addResourceLocations("/webjars/").resourceChain(false);
registry.setOrder(1);
}
}
2- 或 xml 配置:
<mvc:resources mapping="/webjars/**" location="/webjars/">
<mvc:resource-chain resource-cache="false" />
</mvc:resources>
检查 jquery 的 webjars 后,我通过添加“ POM.XML 文件中使用的 JQUERY 库的版本
<script src = "/webjars/jquery/3.1.0/jquery.min.js"></script>
(在我的例子中,我使用的是 3.1.0 版本,仅使用您正在使用的那个版本)。
确保在添加依赖项时是否更新了 bootstrap 或 jquery 的版本,您应该更新 jsp 中的 URL的或 html 与 bootstrap 和 jquery.
的正确版本