我正在使用Spring Boot Web应用程序。我在访问CSS,JS和图像文件等静态资源时遇到问题。
当我没有@Controller classes
时,SimpleUrlHandlerMapping
已成功处理了静态资源请求。
但是在用@Controller
标记一个类之后,静态资源UR仅定向到该类内部的方法(通过RequestMappingHandlerMapping
)。
我缺少一些配置吗? 我的控制器类如下,
@Controller
public class LoginController {
@RequestMapping(name="/", method = RequestMethod.GET)
public String home() {
return "index";
}
@RequestMapping(name="login", method = RequestMethod.POST)
public String login() {
return "home";
}
在我的.HTML文件中,我引用了如下静态资源,
<link rel="stylesheet" type="text/css"
href="bootstrap/css/bootstrap.css"
th:href="@{bootstrap/css/bootstrap.css}">
<script src="bootstrap/js/bootstrap.js"
th:src="@{bootstrap/js/bootstrap.js}"></script>
<script src="jquery/jquery-3.4.1.min.js"
th:src="@{jquery/jquery-3.4.1.min.js}"></script>
目录结构如下, enter image description here
我也尝试添加如下资源,
@Configuration
public class XbrlWebApp implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}
但是这也不起作用。当访问静态资源时,使用类似url的网址,
http://localhost:8080/ {contextpath} /bootstrap/css/bootstrap.css
它返回相同的html页面内容,而不是css文件。
答案 0 :(得分:0)
如果您使用的是JAR封装,则无需进行任何配置,因为只要将所有内容都放在static文件夹下,springboot都会自动配置处理静态内容。例如,将js文件放在resources/static/js
下,将css放在resources/static/css
和默认实现应该使用它。您可以使用以下链接来引用它:
<link rel="stylesheet" type="text/css"
href="css/bootstrap.css"
th:href="@{bootstrap/css/bootstrap.css}">
<script src="js/bootstrap.js"
th:src="@{bootstrap/js/bootstrap.js}"></script>
如果使用WAR打包,请尝试以下配置进行目录结构设置:
@Configuration
public class XbrlWebApp implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**")
.addResourceLocations("/resources/","classpath:/other-resources/","classpath:/static/");
}
并在html中使用:
<link rel="stylesheet" type="text/css"
href="resources/static/bootstrap/css/bootstrap.css"
th:href="@{bootstrap/css/bootstrap.css}">
<script src="resources/static/bootstrap/js/bootstrap.js"
th:src="@{bootstrap/js/bootstrap.js}"></script>
<script src="jquery/jquery-3.4.1.min.js"
th:src="@{jquery/jquery-3.4.1.min.js}"></script>
如果您要创建WAR,则所有资源实际上都会复制到webapps/resources
文件夹中,同时保留文件夹结构。因此,请尝试上述配置。
答案 1 :(得分:0)
这完全是我的错误。 在@RequestMapping方法中,
@RequestMapping(name="/", method = RequestMethod.GET)
public String home() {
return "index";
}
我使用了“名称”属性。它应该是“值”。由于没有找到“值”属性,因此无论发出什么GET http请求,所有内容都将重定向到相同的方法,并返回index.html页。因此静态资源也一样。弹簧配置工作正常。