当前位置: 首页 > 知识库问答 >
问题:

Spring MVC无法提供静态资源

太叔昊苍
2023-03-14

我试图提供一个静态资源(css文件)。

我已经注册了位置和处理程序

  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
      registry.addResourceHandler("/resources/**").addResourceLocations("classpath:/resources/");
    }
}

所以Tomcat的记录器显示到资源的正确映射

将URL路径[/resources/**]映射到类型为[类org.springframework.web.servlet.resource.ResourceHttpRequestHandler]的处理程序上

当浏览器呈现视图时,检查器显示404错误,试图获取静态资源。

应用初始化器。Java语言

@Configuration
@ComponentScan("com.learning")
@EnableWebMvc
public class ApplicationInitializer extends WebMvcConfigurerAdapter implements WebApplicationInitializer {

    private final Logger LOGGER = Logger.getLogger(ApplicationInitializer.class.getName());
    public static final String DISPATCHER_SERVLET_NAME = "dispatcher";

    @Autowired
    private ApplicationContext applicationContext;

    public ApplicationInitializer() {
    }

    //region Context Initialization Area
    public void onStartup(ServletContext servletContext) throws ServletException {
        WebApplicationContext springContext = getSpringApplicationContext();
        MyDispatcherServlet dispatcherServlet = new MyDispatcherServlet(springContext);

        servletContext.addListener(new ContextLoaderListener(springContext));
        servletContext.setSessionTrackingModes(EnumSet.of(SessionTrackingMode.COOKIE));
        servletContext.getSessionCookieConfig().setHttpOnly(true);

        ServletRegistration.Dynamic dispatcher = servletContext.addServlet(DISPATCHER_SERVLET_NAME, dispatcherServlet);
        dispatcher.addMapping("/");
        dispatcher.setLoadOnStartup(1);

    }

    private WebApplicationContext getSpringApplicationContext() {
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        LOGGER.info(String.format("Registering springApplicationContext: %s", context));
        // Loads into container first
        context.register(ApplicationInitializer.class);
        LOGGER.info(String.format("Registration success of springApplicationContext: %s", context));
        return context;
    }
    //endregion

    //region ViewResolver Region
    @Bean
    public ViewResolver viewResolver() {
        //Runs after coontroller ends its execution. It receives the view name to be processed.
        ThymeleafViewResolver resolver = new ThymeleafViewResolver();
        resolver.setTemplateEngine(templateEngine());
        resolver.setCharacterEncoding("UTF-8");
        return resolver;
    }

    @Bean
    public TemplateEngine templateEngine() {
        // Processes the template
        SpringTemplateEngine engine = new SpringTemplateEngine();
        engine.setEnableSpringELCompiler(true);
        engine.setTemplateResolver(templateResolver());
        return engine;
    }

    private ITemplateResolver templateResolver() {
        //Resolves templates with provided prefix and suffix
        SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
        resolver.setApplicationContext(applicationContext);
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".html");
        resolver.setTemplateMode(TemplateMode.HTML);
        return resolver;
    }
    //endregion

    //region ResourceHandler Region
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("classpath:/resources/");
    }
    //endregion
}

你好html

h1 {
    color: red;
    text-align: center;
}
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title></title>
    <link rel="stylesheet" href="/resources/css/MyCss.css" th:href="@{/resources/css/MyCss.css}"/>
</head>
<body>
    <h1 th:text="'Hello ' + ${name}">Hello World</h1>
</body>
</html>

它应该显示为正在运行的代码段。。。但正如我提到的,应用程序无法找到并加载资源。

日志文件

有什么帮助吗?

共有1个答案

漆雕欣德
2023-03-14

<代码>http://localhost:8080/resources/css/MyCss.css

您缺少webapp名称:

<代码>http://localhost:8080/webapp_name/resources/css/MyCss.css

在您的:<代码>链接rel=“样式表”

使用Spring URL标记,以便更好地解析您的URL。

下面是我如何导入引导。最小css:

<link rel="stylesheet" href='<spring:url value="/resources/bootstrap/bootstrap.min.css"/>' type="text/css" />

不要忘记添加标记库,如下所示:

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
 类似资料:
  • 本文向大家介绍SpringMVC访问静态资源的方法,包括了SpringMVC访问静态资源的方法的使用技巧和注意事项,需要的朋友参考一下 在SpringMVC中常用的就是Controller与View。但是我们常常会需要访问静态资源,如html,js,css,image等。 默认的访问的URL都会被DispatcherServlet所拦截,但是我们希望静态资源可以直接访问。该肿么办呢? 在配置文件:

  • 问题内容: 这是我的项目文件夹 这是我index.js中的静态文件配置 这是我的index.html 这是我的nginx配置 但是我在所有脚本上都得到404。另一个奇怪的是,这些文件上的mime-type设置为 我在这里做错了什么? 我有一个项目,该项目具有相同的项目结构,并且具有相同的配置,但它适用于此项目,在这种情况下不起作用。 问题答案: 您无需配置Nginx 和 Express即可提供静态

  • 问题内容: 我正在尝试在Web应用程序中提供静态资源,并且尝试了: 但是在Spring 5中不推荐使用WebMvcConfigurerAdapter。现在如何访问静态资源? 问题答案: 春季5-静态资源 从文档中:

  • 我使用了本教程,但无法访问索引。带有以下内容的html:http://localhost:8080/或http://localhost:8080/src/main/public/index.html IndexHtmlController:

  • 我不确定这些静态资源是如何加载的,但是在我添加了一个新的控制器映射后,我没有在日志中找到静态资源警告消息的映射。 GET/testproject/org/css/style没有映射。css 让我先解释一下我的项目配置,以便更容易理解问题。 所有JSP位置(视图具有不同的文件夹,用于为不同的模块分隔JSP) 静态资源定位 应用性质 在application.properties添加最后一个配置后,现

  • 有没有任何方法使Spring靴与泽西服务静态内容?我已经学习了一系列关于将Swagger集成到Spring Boot应用程序中的教程和代码示例。我可以让它交付基本的Swagger.json,但我不能让Swagger UI工作。 正如我所说的,我的应用程序运行良好,http://localhost:8080/swagger.json向我显示了普通的json文档,但http://localhost:8