스프링 부트부터 스태틱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.port
8080)
할 수 .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
스태틱 리소스가 컨트롤러를 통과하지 않아야 한다고 말했습니다. Thymleaf
View 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
'programing' 카테고리의 다른 글
org.internate 를 선택합니다.휴지 상태예외:lob 스트림에 액세스할 수 없습니다. (0) | 2023.03.05 |
---|---|
각도로 HTML 텍스트 이스케이프JS 지시어 (0) | 2023.03.05 |
wc_admin_report에서 get_order_report_data 함수를 덮어쓰는 방법을 Word press 합니다. (0) | 2023.03.05 |
AngularJS에 의해 생성된 선택 목록에 대한 사전 선택 방법은 무엇입니까? (0) | 2023.03.05 |
WordPress의 플러그인 기능 재정의 (0) | 2023.03.05 |