programing

스프링 부트부터 스태틱html을 사용하려면 어떻게 해야 하나요?

shortcode 2023. 3. 5. 21:43
반응형

스프링 부트부터 스태틱html을 사용하려면 어떻게 해야 하나요?

여기서 스프링 부츠 샘플 웹 스태틱 프로젝트를 진행해서 폼을 바꿨어요

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>

이 는 동일한 페이지인덱스 2.2.html을 하기 위해 되었습니다.static더더: :

import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class Rester {

    @RequestMapping(value = "/rand", produces = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    private RandomObj jsonEndpoint() {
        return new RandomObj();
    }

    @RequestMapping(value = "/tw")
    public String somePg() {
        return "index2";
    }
}

json URL은 정상적으로 동작하지만 localhost:8080/tw에 접속하려고 하면 공백 페이지가 표시되고 콘솔에 다음 오류가 나타납니다.

2017-02-22 15:37:22.076 ERROR 21494 --- [nio-8080-exec-9] o.s.boot.web.support.ErrorPageFilter     : Cannot forward to error page for request [/tw] as the response has already been committed. As a result, the response may have the wrong status code. If your application is running on WebSphere Application Server you may be able to resolve this problem by setting com.ibm.ws.webcontainer.invokeFlushAfterService to false

내가 뭘 잘못하고 있나요?

정적 파일은 컨트롤러가 아닌 리소스에서 제공되어야 합니다.

Spring Boot에서는 다음 중 하나의 디렉토리에 있는 정적 웹 리소스가 자동으로 추가됩니다.

/META-INF/resources/  
/resources/  
/static/  
/public/

삭제:
https://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boothttpsspring.io/blog/2013/12/19/
https://spring.io/guides/gs/serving-web-content/httpsspring.io/guides/gs//

Boot에서는 " " " " "/META-INF/resources/,/resources/,static/ ★★★★★★★★★★★★★★★★★」public/디렉토리는 정적 콘텐츠에 사용할 수 있습니다.

'만들기'를 수 요.static/ ★★★★★★★★★★★★★★★★★」public/「 」의 resources/디렉토리 및 스태틱콘텐츠를 저장합니다.또, 다음의 방법으로 액세스 할 수 있습니다.http://localhost:8080/your-file.ext (을 참조해 .)server.port8080)

할 수 .spring.resources.static-locations application.properties.

예를 들어 다음과 같습니다.

spring.resources.static-locations=classpath:/custom/

, 그럼 에는 '어울릴 수 .custom/[ ] 아래의 resources/스태틱 파일을 처리합니다.

이는 Spring Boot 2에서 Java config를 사용하여 실행할 수도 있습니다.

@Configuration
public class StaticConfig implements WebMvcConfigurer {

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

이 통합은 다음 내용을 매핑합니다.custom 「」에의 디렉토리.http://localhost:8080/static/**urlurl을 합니다.

하고 .:: Spring Boot :: (v2.0.4.RELEASE) with Spring Framework 5

Spring Boot 2.0에서는 Java 8이 최소 버전으로 필요합니다.인터페이스의 디폴트 메서드, 기능 콜백, javax.time 등의 새로운 API 등의 Java 8 기능을 이용하기 위해 많은 기존 API가 업데이트되었습니다.

정적 콘텐츠

기본적으로는 Spring Boot은 클래스 경로 내의 디렉토리(또는 리소스) 또는 ServletContext의 루트에서 정적 콘텐츠를 제공합니다.Spring MVC의 ResourceHttpRequestHandler를 사용하여 자신의 동작을 추가하여 변경할 수 있습니다.WebMvcConfigurer「 」를 .addResourceHandlers★★★★★★ 。

리소스는 본본음음음음음음음음음음음음에 ./**에 배치되어 있습니다./static디렉토리로 이동합니다.단, 웹 컨텍스트컨피규레이션클래스 내에서 스태틱액션을 프로그래밍 방식으로 커스터마이즈 할 수 있습니다.

@Configuration @EnableWebMvc
public class Static_ResourceHandler implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // When overriding default behavior, you need to add default(/) as well as added static paths(/webapp).

        // src/main/resources/static/...
        registry
            //.addResourceHandler("/**") // « /css/myStatic.css
            .addResourceHandler("/static/**") // « /static/css/myStatic.css
            .addResourceLocations("classpath:/static/") // Default Static Loaction
            .setCachePeriod( 3600 )
            .resourceChain(true) // 4.1
            .addResolver(new GzipResourceResolver()) // 4.1
            .addResolver(new PathResourceResolver()); //4.1

        // src/main/resources/templates/static/...
        registry
            .addResourceHandler("/templates/**") // « /templates/style.css
            .addResourceLocations("classpath:/templates/static/");

        // Do not use the src/main/webapp/... directory if your application is packaged as a jar.
        registry
            .addResourceHandler("/webapp/**") // « /webapp/css/style.css
            .addResourceLocations("/");

        // File located on disk
        registry
            .addResourceHandler("/system/files/**")
            .addResourceLocations("file:///D:/");
    }
}
http://localhost:8080/handlerPath/resource-path+name
                    /static         /css/myStatic.css
                    /webapp         /css/style.css
                    /templates      /style.css

봄에는 모든 요청이 Dispatcher Servlet을 통과합니다.DispatcherServlet(프론트 컨트롤러)을 통한 정적 파일 요청을 피하기 위해 MVC 정적 콘텐츠를 구성합니다.

~하듯이@STEEL스태틱 리소스가 컨트롤러를 통과하지 않아야 한다고 말했습니다. ThymleafView Resolver는 뷰 이름 형식을 컨트롤러로 가져와서prefix그리고.suffix를 참조해 주세요.

앞서 기술한 바와 같이 일부 폴더(/META-INF/resources/, /resources/, /static/, /public/)는 기본적으로 정적 콘텐츠를 제공합니다.컨트롤러의 설정이 잘못되면 이 동작이 중단될 수 있습니다.

사용자가 컨트롤러의 기본 URL을 정의하는 것은 일반적인 함정입니다.@RestController주석 대신@RequestMapping컨트롤러 상단의 주석을 표시합니다.

이것은 틀렸습니다.

@RestController("/api/base")
public class MyController {

    @PostMapping
    public String myPostMethod( ...) {

위의 예에서는 index.html을 열지 않습니다.Spring은 기본적으로 POST 메서드를 기대하고 있습니다.왜냐하면myPostMethod는 "/" 경로에 매핑됩니다.

대신 다음을 사용해야 합니다.

@RestController
@RequestMapping("/api/base")
public class MyController {

    @PostMapping
    public String myPostMethod( ...) {

pom.xml에 Tymeleaf 의존성을 추가해야 했습니다.이 의존성이 없으면 스프링 부트는 정적 리소스를 찾을 수 없습니다.

 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

JAVA Spring-boot App에서 정적 콘텐츠를 신속하게 제공할 수 있습니다.thymeleaf(참조: 소스)

Spring Boot 플러그인은 이미 추가되어 있을 것입니다.apply plugin: 'org.springframework.boot'및 필요한 경우buildscript

그럼 Tymeleaf를 추가해 주세요.build.gradle==>

dependencies {
    compile('org.springframework.boot:spring-boot-starter-web')
    compile("org.springframework.boot:spring-boot-starter-thymeleaf")
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

home.html이 에 추가되어 있다고 가정합니다.src/main/resources이 파일을 처리하려면 컨트롤러를 작성해야 합니다.

package com.ajinkya.th.controller;

  import org.springframework.stereotype.Controller;
  import org.springframework.web.bind.annotation.RequestMapping;

  @Controller
  public class HomePageController {

      @RequestMapping("/")
      public String homePage() {
        return "home";
      }

  }

바로 그거야! 이제 gradle 서버를 재시작해. ./gradlew bootRun

언급URL : https://stackoverflow.com/questions/42393211/how-can-i-serve-static-html-from-spring-boot

반응형