기본적으로는 Spring Boot에서는 뷰가 저장되는 장소는 어디입니까?
Spring Boot을 사용하여 구성 부하가 높은 바닐라 Spring MVC 프로젝트를 다시 작성하는 실험을 하고 있습니다.Spring Boot Initiaizer(스프링 부트 초기화기)는 IntelliJ Spring Boot(스프링 부트)의 Spring Boot(스프링 부트)의 Spring Boot Initiaizer(자바)의 Spring Boot Initiaizer(스프링 부트).에서는 생성된 하다고 지적하고 또, 「 」는 「 」의 「 」입니다.@SpringBootApplication
이치노샘플 REST 컨트롤러가 JSON으로 동작하고 시리얼화된 오브젝트를 반환하도록 했습니다만, 표시를 하는 것은 어려운 것 같습니다.작성한 webapps 디렉토리 이외의 디폴트 설정은 다음과 같습니다.
src
`-main
`-java
`-resources
`-static
`-templates
`-webapp
`-WEB-INF
`-home.jsp
컨트롤러는 단순합니다.
@Controller
public class ViewMaster {
@RequestMapping("/home")
public String home() {
return "home";
}
}
Spring Boot (스프링 부트)(html)를 알고 싶습니다.'다'에 다음 했습니다.application.properties
404번입니다.WEB-INF 디렉토리 또는 html 파일만 리소스로 이동해도 도움이 되지 않습니다.
spring.mvc.view.prefix=/WEB-INF/
spring.mvc.view.suffix=.jsp
이러한 의존관계를 pom.xml에 포함시키려 했지만 아무 효과도 없었습니다.
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
제가 뭔가 너무 뻔한 걸 놓쳤나 봐요.누군가 지적해주시면 감사하겠습니다!
솔루션
시행착오를 거쳐 답을 찾았는데 그게 좀 짜증났다.이틀렸다면 저를 만, 않는 것 .WEB-INF
WEB-INF
로부터 「」를 참조해 주세요.view
바꿨어요.application.properties
뷰가 정상적으로 로드되었습니다.
spring.mvc.view.prefix=/view/
spring.mvc.view.suffix=.jsp
기타 조사 결과
이 연습의 목적은 최소한의 Java 기반 구성의 작업 예를 작성하는 것이었기 때문에 설정을 계속 최소화했습니다.그리고 나는 여러 SO 스레드와 포럼에 대해 많은 조언이 도움이 되지 않는다는 것을 알았다.@JBNizet은 Spring Boot 문서에 대한 코멘트로 링크를 제공했습니다.이 링크에는 아무도 언급하지 않은 매우 중요한 포인트가 기재되어 있습니다.JSP는 단순히 Spring Boot과 잘 어울리지 않습니다.이는 선택한 임베디드 컨테이너에 따라 제한이 있기 때문입니다.그래서 저는 JSP를 TymeLeaf 템플릿으로 교체해 보기로 했습니다.
새로운 작업 설정에서는, 다음의 조작이 불필요하게 됩니다.
- " " " 를 할 필요가 .
application.properties
spring.mvc.view.prefix
+spring.mvc.view.suffix
- 패키징 타입을 항아리에서 전쟁으로 변경할 필요가 없습니다.
- 주 클래스를 수정할 필요가 없습니다.
- pom.xml 을 사용합니다.
org.springframework.boot / spring-boot-starter-tomcat
org.springframework.boot / tomcat-embed-jasper
javax.servlet / jstl
기본 의 ThymeLeaf 와 "Spring Boot" "2" "ThymeLeaf" 라는 됩니다.ViewName.html
에에 in placed 에 배치되다src/main/resources/templates
.
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring4</artifactId>
</dependency>
Spring Boot 에서는 뷰가 /webapp 내에 저장되는 것을 상정하고 있지 않은 경우 뷰 페이지는 application.properties 설정(html 또는 jsp 등)에 따라 /views/폴더의 뷰 페이지로 .jsp를 설정할 수 있습니다.
spring.mvc.view.prefix=/views/
spring.mvc.view.suffix=.jsp //for .html change it to .html
또한 tomcat jasper를 사용해야 합니다.이것을 포함하지 않으면 페이지는 파일로 다운로드되는 대신 해석되지 않습니다.
spring.mvc.view.prefix=/views/
spring.mvc.view.suffix=.jsp
@Jasbin karki의 답변에 따르면 html 파일 또는 jsp 파일을 main->webapp->views 폴더에 배치하고(webapp & views 폴더를 작성해야 합니다), application.properties 파일에 다음 행을 추가했습니다.application.properties에 다음 항목을 추가합니다.
spring.mvc.view.prefix=/views/
spring.mvc.view.suffix=.html //or .jsp- if its a jsp file
이 기사를 발견하여 반환하는 경우
return "home.jsp";
그냥 '집'이 아니라요.그 후 삭제해야 합니다.
spring.mvc.view.suffix=.jsp
그렇지 않으면 .jsp를 홈에서 삭제하고 접미사를 유지합니다.
같은 문제가 있었습니다.JSP 페이지는 올바르게 배치되어 있고 application.properties에서 필요한 설정이 올바르게 설정되어 있습니다.
오랜 검토 결과 pom.xml에서 삭제해야 하는 의존관계 "spring-boot-starter-thymeleaf"가 문제의 원인임을 알게 되었습니다.실제로 이 의존관계는 웹 어플리케이션에서 XHML/HTML 파일을 지원하지만 JSP 페이지를 사용하고 있습니다.
따라서 Spring MVC에서 JSP 페이지를 사용하고 있는 경우는, 다음의 의존 관계를 삭제할 필요가 있습니다.
<!-- <dependency> -->
<!-- <groupId>org.springframework.boot</groupId> -->
<!-- <artifactId>spring-boot-starter-thymeleaf</artifactId> -->
<!-- </dependency> -->
첫 번째로 해야 할 일은 다음과 같이 pour pom에 의존성을 삽입하는 것입니다.
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
이러한 의존관계는 스프링 부팅 시 내장된 Tomcat 의존관계가 제공되며 이는 스프링 앱의 jar 내부에 Tomcat 의존관계가 없다는 효과가 있습니다.
두 번째 생각은 pon의 packaging propripties를 jar에서 아래와 같이 war로 변경하는 것입니다.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
...
<packaging>war</packaging>
....
</project>
세 번째이자 마지막으로 생각하는 것은 다음과 같은 표준 어플리케이션 부트스타일러를 리팩터링하는 것입니다.
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
어플리케이션 속성에서의 설정에는 문제가 없을지도 모릅니다만, jsp를 특정의 폴더아래에 두고, WEB-INF아래 뿐만이 아니라, 새로운 패스를 포인트 하기 위해서 설정을 리팩터 하는 것을 추천합니다.
이것이 당신에게 도움이 되길 바랍니다.
tys, pls는 종속성을 추가하려고 합니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
참고 자료 : https://github.com/lenicliu/examples/tree/master/examples-spring-boot/examples-spring-boot-jsp
spring.mvc.view.prefix
는 webapp 폴더의 상대 경로로 jsp 파일을 넣을 수 있습니다.
application.properties
삭제:
spring.mvc.view.prefix=/view/
spring.mvc.view.suffix=.jsp
추가:
spring.thymeleaf.prefix= /WEB-INF/views/
spring.thymeleaf.suffix= .html
pom.xml
재스퍼 종속성 제거:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
타임 리프 종속성 추가:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
세부사항:jsp 대신 tymeleaf 사용
<!-- Tomcat for JSP rendering -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
범위를 "기본값"으로 변경하면 문제가 해결됨
언급URL : https://stackoverflow.com/questions/36100212/by-default-where-does-spring-boot-expect-views-to-be-stored
'programing' 카테고리의 다른 글
div 클릭 시 열린 파일 브라우저 반응 (0) | 2023.03.31 |
---|---|
NextJs CORS 문제 (0) | 2023.03.31 |
Wordpress 사용자 지정 게시 유형 레이블 이름 가져오기 (0) | 2023.03.31 |
Angular 2 형제 구성 요소 통신 (0) | 2023.03.26 |
Angularjs: ng-model 업데이트 시 업데이트 안 함을 선택합니다. (0) | 2023.03.26 |