jasper와 thymeleaf 프로젝트에서 시도했지만, 공존 할 수는 없습니다. JSP를 사용하고 싶습니다. Spring-boot-starter-thymeleaf는 패키지를 실행하여 실행할 수 있습니다. 재스퍼와 타임 라이트가 모두 존재할 수 있도록 솔루션을 찾고 있습니다. jasper와 thymeleaf가 공존하는 servlet-context.xml (Mixing thymeleaf and jsp files in Spring Boot)을 사용하는 경우 stackoverflow에 대한 해결책이 있습니다. 하지만 spring-boot-starter-web을 사용하고 있다면 pom.xml에 이러한 속성을 포함시키는 방법이 필요합니다.스프링 부트 응용 프로그램에서 thymeleaf와 jasper 파일이 함께 존재합니다.
답변
스프링 부트 내부에 내장 된 jar 빌드에서 HTML 및 JSP 페이지를 실행할 수있었습니다. 그러나 명령 프롬프트에서 Jar 파일을 복사하여 독립적으로 실행하려면 Jar 내용에 없으므로 JSP 페이지 폴더 구조를 복사해야합니다. 그러면 jar 파일을 추가 할 수 있도록 pom 파일을 약간 변경해야합니다 그것에 대한 외부 콘텐츠.
1 단계 : 생성 소스 폴더 SRC/메인/자원에서 프로젝트 구조 및 파일 생성
: 추가 Thymeleaf 및 JSP 종속 은 pom.xml 파일
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
2 단계에 종속 아래에있는 추가 폴더 템플릿, 그 하위 폴더 thymeleaf 만듭니다. 그리고
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello</title>
</head>
<body>
THYMELEAF PAGE: <p th:text="${name}"></p>
</body>
</html>
하위 폴더보기를 만들 SRC/메인/웹 애플리케이션/WEB-INF에서 HTML 파일의 sample.html (말을) 만들 수 있습니다. 내부 뷰 해결을위한 thymeleaf 뷰 이름과 JSP의 구성을 설정하여 application.properties에서 :보기는 JSP 파일, sample.jsp (말)
<!DOCTYPE html>
<html lang="en">
<head>
<title>Hello</title>
</head>
<body>
JSP PAGE: Hello ${name}
</body>
</html>
만들기 3 단계에서.
#tomcat-connection settings
spring.datasource.tomcat.initialSize=20
spring.datasource.tomcat.max-active=25
#Jasper and thymeleaf configaration
spring.view.prefix= /WEB-INF/
spring.view.suffix= .jsp
spring.view.view-names= views
spring.thymeleaf.view-names= thymeleaf
#Embedded Tomcat server
server.port = 8080
#Enable Debug
debug=true
management.security.enabled=false
4 단계 :
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class TestController {
@RequestMapping(value="/jasper", method=RequestMethod.GET)
public String newjasper(Map<String, Object> m, String name){
//System.out.print("-- INSIDE JSP CONTROLER ------");
m.put("name", name);
return "views/sample";
}
@RequestMapping(value="/thymeleaf", method=RequestMethod.GET)
public String newthymeleaf(Map<String, Object> m, String name){
//System.out.print("-- INSIDE HTML CONTROLER ------");
m.put("name", name);
return "thymeleaf/sample";
}
}
5 단계 : Thymeleaf 및 JSP 페이지를 제공하기위한 컨트롤러를 만들기 당신이 JSP에 대한 뷰 해결을위한 구성 클래스 SpringConfig.class (말)을 만드는 데 필요한 어떤 경우를 페이지. 그러나 선택적으로, 나는 그것을 나의 설정 파일에서 사용하지 않는다.
import org.springframework.web.servlet.view.JstlView;
@Configuration
public class SpringConfig {
@Value("${spring.view.prefix}")
private String prefix;
@Value("${spring.view.suffix}")
private String suffix;
@Value("${spring.view.view-names}")
private String viewNames;
@Bean
InternalResourceViewResolver jspViewResolver() {
final InternalResourceViewResolver viewResolver = new
InternalResourceViewResolver();
viewResolver.setPrefix(prefix);
viewResolver.setSuffix(suffix);
viewResolver.setViewClass(JstlView.class);
viewResolver.setViewNames(viewNames);
return viewResolver;
}
}
6 단계 : jsp와 html 모두에 대한 테스트 응용 프로그램입니다.
브라우저에서이 URL을 누르십시오 : http://localhost:8080/thymeleaf?name=rohit. 이렇게하면 매개 변수 이름이 페이지 중앙에 있고이 URL이있는 sample.html 파일이 열립니다. http://localhost:8080/jasper?name=rohit은 매개 변수 이름이 가운데에있는 sample.jsp 페이지를 엽니 다.
viewresover javadoc.
는 제어기에 의해 반환 된 뷰 이름이 리졸버 여부에 의해 해결 될 인가 여부를 결정한다 이름 패턴의 세트를 지정한다. 예를 -for 여러 뷰 리졸버를 구성하는 응용 프로그램에서, Thymeleaf 및 JSP + JSTL 레거시 페이지 - 또 다른 하나 하나 이 속성이 이 뷰 리졸버 때 스프링에 의해 뷰가 해결 된 것으로 간주 될 때 설정 그 대신 다음 결정자에게 주문서에 따라 을 요청해야합니다.
지정된 뷰 이름 패턴이 완료 뷰 이름이 될 수 있지만, 또한 * 와일드 카드를 사용할 수 있습니다. "인덱스를 ", " USER_", "관리자/*", 등 또한
있습니다 이러한보기 이름 패턴은 접두사 또는 접미사를보기 이름에 적용하기 전에 확인되므로 개를 포함해서는 안됩니다. 따라서 보통 /WEB-INF/templates/orders/*.html 대신/* 주문을 지정합니다.
실제로 뷰의 이름을 지정하십시오.이 패턴 해석기는 으로 처리 할 수 없습니다.
이러한 패턴은 setViewNames (String [])의 형식과 같은 형식으로 지정할 수 있지만 제외 목록으로 사용할 수 있습니다. viewResolver.setViewNames (viewNames);