首页 文章

Spring Boot应用程序中百万美元和jasper文件的共存

提问于
浏览
-1

我试过,在一个项目中都是jasper和thymeleaf,但是不能共存,因为我想用jsp必须注释掉Spring-boot-starter-thymeleaf依赖于包,这样才能运行 . 寻找解决方案,以便碧玉和百里香可以共存 . 我得到了stackoverflow的解决方案,如果有人使用servlet-context.xml(Mixing thymeleaf and jsp files in Spring Boot),其中jasper和thymeleaf共存 . 但我的要求是如果我使用spring-boot-starter-web,如何在pom.xml中包含这些属性 .

2 回答

  • 0

    我能够从Spring引导中的嵌入式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步:项目结构和文件创建

    在源文件夹src / main / resources下创建文件夹模板,在该文件下创建子文件夹thymeleaf . 并创建一个html文件sample.html(比如说)

    <!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 / main / webapp / WEB-INF下创建子文件夹视图 . 在视图下创建一个jsp文件,sample.jsp(比如说)

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <title>Hello</title>
    </head>
    <body>
       JSP PAGE: Hello ${name}
    </body>
    </html>
    

    第3步:在application.properties中设置百万富翁视图名称和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:在某些情况下,您可能需要为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的应用程序 .

    当您在浏览器中点击此网址时:http://localhost:8080/thymeleaf?name=rohit . 这将在页面中心打开带有参数名称的sample.html文件,并使用此URL:http://localhost:8080/jasper?name=rohit将打开带有参数名称的sample.jsp页面 .

  • 0

    来自viewresover javadoc .

    指定一组名称模式,这些模式将应用于确定控制器返回的视图名称是否将由此解析程序解析 . 在配置多个视图解析器的应用程序中 - 例如,一个用于Thymeleaf,另一个用于JSP JSTL遗留页面 - 此属性确定何时视图将被视图解析器解析,并且当Spring应该简单地询问下一个解析器时链 - 根据它的顺序 - 而不是 . 指定的视图名称模式可以是完整的视图名称,但也可以使用* wildcard:“index . ”,“user _”,“admin / *”等 . 另请注意,在应用任何前缀之前检查这些视图名称模式或视图名称的后缀,因此它们不应包含这些 . 因此,通常您可以指定订单/ 而不是/WEB-INF/templates/orders/.html . 指定视图的名称 - 实际上是这个视图解析器无法处理的.patterns . 这些模式可以使用与setViewNames(String [])中相同的格式指定,但可以作为排除列表使用 . viewResolver.setViewNames(视图名);

相关问题