Springboot 集成jsp 以及多模块下jsp页面找不到问题解决

概述:

Springboot集成jsp主要有以下几个步骤:

1、在pom.xml中添加依赖

2、新建web路径

3、配置application.properties支持jps

Springboot集成JSP步骤详细:

1、引入依赖:

主要引入以下几个依赖项:

<!--jsp支持-->
<!-- servlet 依赖. -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>
<!-- tomcat 的支持.-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

2、新建webapp/WEB-INF目录:

在src/main下新建目录 webapp/WEB-INF/jsp,目录结构如下图:

Springboot 集成jsp 以及多模块下jsp页面找不到问题解决

3、配置application.properties:

# 页面默认前缀目录
spring.mvc.view.prefix=/WEB-INF/jsp/
# 响应页面默认后缀
spring.mvc.view.suffix=.jsp

4、编写测试Controller:

@Controller
public class StudentController {
    @RequestMapping("ee")
    public String tt(Map<String, Object> map){
        map.put("name", "SpringBoot");
        map.put("date", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        return "stu";
    }

    @RequestMapping("jtest")
    public String mm(Model mode){
        mode.addAttribute("name", "This is a Test");
        mode.addAttribute("date", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        return "stu";
    }
}

注意:使用@Controller注解 而不是@RestController,另外 以上两个接口都可以使用

 

理论上按上面步骤,一个简单的web工程就可以使用jsp了,但是如果项目工程是使用多模块方式,则需要另外的配置。

 

多模块项目中使用JSP:

比如有下面一个多模块工程,需要在其中一个模块中使用jsp:

Springboot 集成jsp 以及多模块下jsp页面找不到问题解决

解决方法1:

在edit configuration中配置模块的工作路径,具体如下:

Springboot 集成jsp 以及多模块下jsp页面找不到问题解决

 

解决方法2:

@Configuration
public class GlobalConfig {
    @Bean
    public WebServerFactoryCustomizer<TomcatServletWebServerFactory> customizer() {
        return (factory) -> {
            factory.addContextCustomizers((context) -> {
                        //模块中webapp相对路径
                        String relativePath = "tt-web/src/main/webapp";
                        File docBaseFile = new File(relativePath);
                        // 路径是否存在
                        if (docBaseFile.exists()) {
                            context.setDocBase(docBaseFile.getAbsolutePath());
                        }
                    }
            );
        };
    }
}