스프링 부트에서는 webapp 폴더 대신 JSP 템플릿과 함께 리소스 템플릿 폴더를 사용하시겠습니까?
Spring Boot MVC 프로젝트를 시작하여 2개의 폴더가 있다는 것을 알게 되었습니다.resources하나는 '라 불린다.templates그리고 또 한 명.static이 폴더 설정이 정말 마음에 들어요.
문제는 뷰에 JSP 템플릿을 사용한다는 것입니다.를 배치할 수 없었습니다..jsp내부 템플릿templates폴더와 작업을 수행했습니다.제가 해야 할 일은 이 모든 것을webapp와 같은 레벨의 폴더src그리고.resourcesJSP 템플릿을 배치하면 뷰를 찾을 수 있습니다.
에서 실제로 JSP 템플릿을 사용하려면 무엇을 재설정해야 합니까?templates안에 있는 폴더resources?
메이븐 문서에 따르면 src/main/resources결국 이 될 것이다WEB-INF/classes전쟁에서.
이것은, Spring Boot 의 기능을 발휘합니다.application.properties:
spring.mvc.view.prefix = /WEB-INF/classes/templates
spring.mvc.view.suffix = .jsp
Java 구성을 선호하는 경우 다음과 같이 하십시오.
@EnableWebMvc
@Configuration
public class ApplicationConfiguration extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver jspViewResolver() {
InternalResourceViewResolver bean = new InternalResourceViewResolver();
bean.setPrefix("/WEB-INF/classes/templates/");
bean.setSuffix(".jsp");
return bean;
}
}
전체 예시로 업데이트
이 예는 Spring의 이니셜라이저("웹" 종속성이 있는 그라들 프로젝트)를 기반으로 했습니다.방금 덧붙였습니다.apply plugin: 'war'에게build.gradle, 아래 파일 추가/삭제, 프로젝트 구축:gradle war어플리케이션 서버(Tomcat 8)에 도입했습니다.
이 샘플 프로젝트의 디렉토리 트리는 다음과 같습니다.
\---src
+---main
+---java
| \---com
| \---example
| \---demo
| ApplicationConfiguration.java
| DemoApplication.java
| DemoController.java
|
\---resources
+---static
\---templates
index.jsp
응용 프로그램 구성Java: 위 참조
데모 어플리케이션자바:
@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(DemoApplication.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(DemoApplication.class, args);
}
}
DemoController.java:
@Controller
public class DemoController {
@RequestMapping("/")
public String index() {
return "index";
}
}
index.jsp:
<html>
<body>
<h1>Hello World</h1>
</body>
</html>
공식 정보:
자원 처리:
리소스 링크는 Tymeleaf 및 FreeMarker용으로 자동 구성된 ResourceUrlEncodingFilter를 통해 템플릿에서 런타임에 다시 작성됩니다.JSP. 소스를 사용할 때는 이 필터를 수동으로 선언해야 합니다.
지원되는 템플릿엔진
REST 웹 서비스뿐만 아니라 Spring MVC를 사용하여 동적 HTML 콘텐츠를 제공할 수도 있습니다.Spring MVC는 Tymeleaf, FreeMarker 및 JSP를 포함한 다양한 템플릿 기술을 지원합니다.
[...]
JSP는 가능하면 피해야 합니다. JSP를 내장된 서블릿 컨테이너와 함께 사용할 때는 몇 가지 알려진 제한이 있습니다.
[..]
이러한 템플릿엔진 중 하나를 기본 설정으로 사용하는 경우 템플릿은 src/main/resources/templates에서 자동으로 선택됩니다.
스프링 부트 JSP의 제한
- Tomcat에서는 전쟁 패키징을 사용하는 경우, 즉 실행 가능한 전쟁이 작동하며 표준으로 배포될 수도 있습니다.
(Tomcat(톰캣)- Tomcat에서 하드 코딩된 파일 패턴 때문에 실행 가능한 jar가 작동하지 않습니다.
- Jetty를 사용하면 전쟁 패키징을 사용할 수 있습니다. 즉, 실행 가능한 전쟁은 작동하며 표준 컨테이너에도 전개할 수 있습니다.
- Undertow는 JSP를 지원하지 않습니다.
- 커스텀 error.jsp 페이지를 작성해도 에러 처리를 위한 기본 뷰가 덮어쓰지는 않습니다.대신 커스텀에러 페이지를 사용해야 합니다.
기술 변경
합니다.JSP filesapplication.properties
spring.mvc.view.prefix: /WEB-INF/views/
spring.mvc.view.suffix: .jsp
JSP를 사용한 스프링 부트 예시
하실 JSP스프링 부트의 예를 다음에 나타냅니다.
https://github.com/joakime/spring-boot-jsp-demo
요약하자면, 지금까지 나에게 맞는 답변은 하나도 없었다.빈 스프링 부트 스타터 프로젝트를 사용합니다.
스프링 또는 서블릿 내부가 유선 연결된 것처럼 보이므로 JSP가 (또는 하위 폴더)에 있어야 합니다.에서 검색되는 기본 Tymeleaf 템플릿과는 달리/resources/templates.
모든 종류의 변경을 시도했지만 실제로 여러 가지 설정을 변경할 수 없었습니다.그것은 단지 복잡성을 야기했을 뿐이고 더 이상 JSP를 지원할 수 없었다.JSP를 하고 있는 는, 「」에 주세요./webapp또, 다음과 같은 컨트롤러를 사용해 제로 설정을 추가하는 것으로도 동작합니다.
@GetMapping("/foo") public String serveFoo() { return "relative-path-inside-webapp/foo.jsp"; }
에서는, 「」, 「」는,/webapp폴더는 Spring Toolsuite에도 숨겨지기 때문에 수동으로 "소스 폴더"로 구성해야 합니다.
가정하다welcome.jspsrc\main\webapp\WEB-INF\jsp\welcome.jsp이런 이 있습니다.spring.mvc.view.prefix: /WEB-INF/jsp/ ★★★★★★★★★★★★★★★★★」spring.mvc.view.suffix: .jsp
'아까운'과 쓸 수 있어요.mvn spring-boot:run원하는 경우 jar 파일을 실행합니다.java -jar java -jar spring-boot-web-jsp.jar copy "just copy" 명령어 just csrc\main\webapp\WEB-INF로로 합니다.src\main\resources\META-INF\resources
파일welcome.jsp 한다src\main\resources\META-INF\resources\WEB-INF\jsp\welcome.jsp
또한 이 대답에 따르면 그는found that since 1.4.3 version and above stops supporting the embedded JSPs
응용 프로그램 구성에 있는 템플릿 폴더에서 JSP Resolved를 가져올 수 있습니다.
@Bean
@Description("Thymeleaf template resolver serving HTML 5")
public ClassLoaderTemplateResolver templateResolver() {
var templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setPrefix("/templates/");
templateResolver.setCacheable(false);
templateResolver.setSuffix(".jsp");
templateResolver.setTemplateMode("JAVASCRIPT");
templateResolver.setCharacterEncoding("UTF-8");
return templateResolver;
}
@Bean
@Description("Thymeleaf template engine with Spring integration")
public SpringTemplateEngine templateEngine() {
var templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
@Bean
@Description("Thymeleaf view resolver")
public ViewResolver viewResolver() {
var viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setCharacterEncoding("UTF-8");
return viewResolver;
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
}
언급URL : https://stackoverflow.com/questions/46183633/spring-boot-use-resources-templates-folder-with-jsp-templates-instead-of-webapp
'programing' 카테고리의 다른 글
| $routeParams는 해결 기능에서 작동하지 않습니다. (0) | 2023.03.08 |
|---|---|
| 반응에서 상수를 정의하는 방법JS (0) | 2023.03.08 |
| 몽구스 모델을 어떻게 다 세지? (0) | 2023.03.08 |
| Node.js를 사용하는 JSON의 문자열 크기에는 제한이 있습니까? (0) | 2023.03.08 |
| java.displaces를 클릭합니다.Bootstrap Method Error : Retrofit 초기화 시 콜사이트 #4 부트스트랩 메서드의 예외 (0) | 2023.03.08 |