当前位置: 首页 > 知识库问答 >
问题:

Spring Boot应用程序中thymeleaf和jasper文件的共存

孙宏扬
2023-03-14

我试过了,在一个项目中jasper和thymeleaf都不能共存,因为我想用jsp必须注释掉Spring-boot-starter-thymeleaf依赖的包,这样它才能运行。寻找一种解决方案,使碧玉和沉香能够共存。如果有人使用servlet-context.xml(在Spring Boot中混合thymeleaf和jsp文件),我在stackoverflow上得到了一个解决方案,其中jasper和thymeleaf共存。但我的需求是,如果我使用spring-boot-starter-web,如何在pom.xml中包含这些属性。

共有1个答案

孟意致
2023-03-14

我能够在Spring boot中从嵌入式jar构建中运行HTML和JSP页面。但是,如果您希望通过在命令提示符中复制Jar来独立运行它,那么您需要复制JSP页面文件夹结构,因为它将不在Jar内容中,并且您需要稍微更改pom文件,以便Jar可以向其添加外部内容。

步骤1:添加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:项目结构和文件创建

<!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>
<!DOCTYPE html>
<html lang="en">
<head>
  <title>Hello</title>
</head>
<body>
   JSP PAGE: Hello ${name}
</body>
</html>

步骤3:在您的application.properties中为内部视图解析设置thymeleaf视图名称和JSP配置。

#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:创建用于服务Thymeleaf和JSP页面的控制器:

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:在某些情况下,您可能需要创建一个配置类SpringConfig.class(例如),用于JSP页面的视图解析。但是可选的,我不在我的配置文件中使用它。

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。这将打开我们的sample.html文件,其中参数名位于页面中心,并且使用这个URL:http://localhost:8080/jasper?name=rohit将打开sample.jsp页面,其中参数名位于页面中心。

 类似资料:
  • 在我的项目中,我想使用特定于环境的属性文件。例如,如果我在开发中运行它,它应该使用应用程序。dev.properties,对于生产,它应该使用应用程序。产品属性等等。 我有下面两个文件在我的资源文件夹。 application.properties(用于生产) application.dev.properties(用于开发) 我有一个属性像下面的每个文件。 为了刺激 给德夫 我有一门课,如下所示

  • 我想启用或禁用具有外部配置的SSL/TLS,这些配置可以在应用程序启动期间提供。应用程序应该支持http和HTTPS的所有crud操作。 既然上面的属性是不推荐使用的,那么我如何在不使用配置文件的情况下实现它。

  • 本文向大家介绍SpringBoot中的Thymeleaf用法,包括了SpringBoot中的Thymeleaf用法的使用技巧和注意事项,需要的朋友参考一下 Thymeleaf Thymeleaf是最近SpringBoot推荐支持的模板框架,官网在thymeleaf.org这里。 我们为什么要用Thymeleaf来作为模板引擎呢?官网给了我们一个非常令人信服的解释: Thymeleaf is a m

  • 这是我使用SpringBoot的第一天,我试图理解体系结构,因此我开始构建一个hello world应用程序: 在我的pom.xml中,在maven-shade-plugin下,我将mainClass声明如下: 文件目标是src/main/java/com/demo/helloworld.java,该文件中的代码是: 我错过了什么?

  • 我需要在Spring-boot应用程序中使用默认的ObjectMapper作为单个实例。我是否可以简单地在应用程序内部@autowire ObjectMapper(在Spring-boot应用程序中默认创建的实例)而不创建@bean(因为我不想更改ObjectMapper的任何功能) https://docs.spring.io/spring-boot/docs/current/reference

  • 我有一个SpringBoot应用程序。 在属性文件上: 但在浏览器上,我看到: 在配置文件中: 关于申请。特性: IntelliJ IDEA也被设置为UTF-8 和 我还试着把