programing

Tymeleaf가 있는 Spring Boot - CSS를 찾을 수 없음

codeshow 2023. 10. 19. 22:53
반응형

Tymeleaf가 있는 Spring Boot - CSS를 찾을 수 없음

먼저 말씀드릴 것은 제가 지금 한동안 해결책을 모색하다가 지금 상당히 절박하다는 것입니다.

Spring Boot로 실행 시 cs 파일을 html 페이지에서 접근할 수 없습니다.

html.file

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:th="http://www.thymeleaf.org"
      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
    <head lang="en">
        <title th:text='#{Title}'>AntiIntruder</title>
        <meta charset="UTF-8" />
        <link rel="stylesheet" type="text/css" media="all" href="../assets/css/style.css" th:href="@{/css/style.css}" />
    </head>
    <body>
...

Application.java

@SpringBootApplication // adds @Configuration, @EnableAutoConfiguration, @ComponentScan
@EnableWebMvc
public class Application extends WebMvcConfigurerAdapter {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

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

폴더 구조:

folder structure

제가 한번 넣어봤는데요.css폴더를 에 넣다static폴더 및/또는 addResourcesHandler를 제거합니다. 상대 경로별 CSS 및 기타 사항을 참조합니다.그 어떤 것도 이 문제를 해결할 수 없을 것 같습니다.만약 당신이 이 문제를 해결하려고 했지만 해결책을 찾지 못했다면 제가 무시당하지 않는다는 것을 알 수 있도록 저에게도 알려주세요.

1. 사용자 지정 리소스 경로 사용

웹 구성에서

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

당신의 것을.style.css이 폴더 안의 파일

src/main/resources/assets/css/

당신이 보기에 그 이후는

<link rel="stylesheet" type="text/css" th:href="@{/assets/css/style.css}" />

.

2. 스프링 부트에서 미리 정의된 경로 사용

제거한다.addResourceHandlers웹 환경설정에서

집어넣어요style.css다음 폴더 안에

  • src/main/resources/META-INF/resources/assets/css
  • src/main/resources/resources/assets/css/
  • src/main/resources/static/assets/css/
  • src/main/resources/public/assets/css/

그리고 보기에

<link rel="stylesheet" type="text/css" th:href="@{/assets/css/style.css}" />

.

참고: 다음을 제거할 수 있습니다.assets여기 폴더.이 작업을 수행하려면 미리 정의된 리소스 폴더와 보기에서 제거하십시오.th:href. 하지만 당신이 명시적으로 언급했기 때문에 저는 그대로 유지했습니다.assets/당신의 질문에 경로가 있습니다.그래서 저는 당신이 필요로 하는 것이assets/사용자의 리소스 URL에 입력합니다.

는 .@EnableWebMvcApplication.java파일을 제거하자 마자 CSS를 사용할 수 있게 되었습니다.localhost:8080/css/style.css적용되지 않았습니다.지금까지 그 이유를 찾지 못했습니다.@EnableWebMvc문제를 일으키고 있었습니다

그런 다음에 다음과 같은 매핑된 컨트롤러를 제거했습니다./**사용자 정의 오류 페이지를 표시하기 위해 구현한 것입니다.

@RequestMapping("/**")
public String notFound() {
    return "errors/404";
}

이것도 제거하고 CSS도 작동중입니다. =)

정적 폴더에 CSS를 넣으면 addResourceHandler 메서드가 필요 없습니다.

.../static/css/app.css

또는 자산 폴더에 저장하려면 다음을 수행해야 합니다.

.addResourceLocations("classpath:/assets/") <-- without the * at the end
.../assets/css/app/css

두 경우 모두 CSS는 다음을 통해 사용 가능해야 합니다.

th:href="@{/css/app.css}"

CSS 폴더를 리소스/정적 폴더에 넣습니다.

제 경우에는 파일 읽기 권한에 문제가 있었습니다.다른 프로젝트에서 'style.css' 파일을 복사했는데 브라우저에서 읽을 수 없습니다.style.css'를 다시 생성한 후 모든 것이 정상적으로 작동했습니다.

제 충고는 다음과 같습니다.css아래 폴더static폴더, addResourceHandler를 제거하고 절대 경로로 cs에 도달합니다(예:/css/style.css).

그래서 저는 타임리프에서 작동하기 위해서 스타일시트에 대한 고정적인 참조를 제거해야 했기 때문에.

<link rel="stylesheet" type="text/css" media="all" href="../assets/css/style.css" th:href="@{/css/style.css}">

되었다

<link rel="stylesheet" th:href="@{/css/bootstrap.css}"> 

저는 여러 종류의 구성과 파일 경로 이름 변경을 시도하는 데 몇 시간을 보냈습니다.이유는 모르겠지만 이것이 스프링 부츠 5에서 내 CSS와 js를 로드하게 한 유일한 것입니다.

먼저 WebMvcConfigurer로 구성 클래스 중 하나를 구현합니다.

@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {
//and overide this configuration method like this    
@Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/webjars/**", "/resources/**");
    }
}

이제 이렇게 HttpSecurity 구성을 덮어쓸 수 있습니다.

@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter{
 
   @Override
    public void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                        .antMatchers("/", "/index").anonymous()
                        .antMatchers("/**/*.*").permitAll()
                .anyRequest().authenticated();
    }
}

this ("/**/*.*") regex text will allow files with anny extension

부트스트랩과 같은 웹자 라이브러리를 사용하는 경우 이 구성을 WebSecurityConfiguration에 추가합니다.

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

이 주제가 2022년에도 여전히 관련이 있다면요.저도 비슷한 문제가 있었는데 이렇게 해결했습니다.

/templates/file.html의 이 링크

<link rel="stylesheet" type="text/css" media="all" ref="../static/css/styles.css">

application.properties 를 추가했습니다.

spring.mvc.static-path-pattern=/static/**

저의 css 경로는

 src/main/resources/static/css/

도움이 되는 링크

언급URL : https://stackoverflow.com/questions/29562471/springboot-with-thymeleaf-css-not-found

반응형