美文网首页SpringBoot
SpringBoot与JSP集成

SpringBoot与JSP集成

作者: 意识流丶 | 来源:发表于2019-01-05 23:56 被阅读2次

SpringBoot内嵌Web容器的,推荐打成jar包不是war包,如果使用JSP打成war包使用外部容器,这就相当于失去了一些SpringBoot的特性了,所以官方并不推荐使用JSP。

模板引擎其实都差不多,jsp也可以算是模板引擎,SpringBoot推荐的Thymeleaf主要嵌入到html的标签属性,这样对前端很友好,确实要使用的话可以这样。

引入依赖,包括使用jstl标签依赖和支持jsp模板的依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

注:tomcat-embed-jasper依赖中不要添加<scope>provided</scope>
provided表明对于编译和测试有效,但在运行时候无效,IDEA下默认不提供
servlet-api.jar时,使用scope=provided就会缺少对应的jar包,在下面测试的时候就会发现出现404了,谷歌浏览器下访问会直接下载文件

controller层
@Controller
public class WelcomeController {
    @GetMapping("/hello")
    public String welcome() {
        return "welcome";
    }
}
welcome.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>hello,welcome</title>
</head>
<body>
hello,welcome
</body>
</html>
Springboot配置文件,主要配置jsp文件路径
 spring:
  mvc:
    view:
      prefix: /jsp/
      suffix: .jsp

前缀后缀写错了控制台会发出警告:Path with "WEB-INF" or "META-INF"

来源于org.springframework.web.servlet.resource.ResourceHttpRequestHandler类的isInvalidPath方法

protected boolean isInvalidPath(String path) {
        if (!path.contains("WEB-INF") && !path.contains("META-INF")) {
            if (path.contains(":/")) {
                String relativePath = path.charAt(0) == '/' ? path.substring(1) : path;
                if (ResourceUtils.isUrl(relativePath) || relativePath.startsWith("url:")) {
                    if (logger.isWarnEnabled()) {
                        logger.warn("Path represents URL or has \"url:\" prefix: [" + path + "]");
                    }

                    return true;
                }
            }

            if (path.contains("..") && StringUtils.cleanPath(path).contains("../")) {
                if (logger.isWarnEnabled()) {
                    logger.warn("Path contains \"../\" after call to StringUtils#cleanPath: [" + path + "]");
                }

                return true;
            } else {
                return false;
            }
        } else {
            if (logger.isWarnEnabled()) {
                logger.warn("Path with \"WEB-INF\" or \"META-INF\": [" + path + "]");
            }

            return true;
        }
    }

注:自建webapp目录,jsp文件要放在webapp下,不能放在WEB-INF

image.png

启动后访问http://localhost:8080/hello

image.png

webapp改为WEB-INF就会出现

image.png

如果以上配置都没问题的情况下还是显示404,可以用spring-boot:run的方式启动

image.png

总结:SpringBoot与JSP集成后推荐大家使用spring-boot:run的方式启动,就肯定没问题的

至于原因可以参考:

https://segmentfault.com/a/1190000009785247

注:以上集成的前提是单模块项目,多模块项目不适合使用

如果main 方法所在的项目是maven顶级项目,则用main方法运行,可以访问jsp
如果main方法所在的项目是maven的子模块项目(如 Main-Parent项目中,包含maven-A子模块,正好main方法就在maven-A模块中),用main方法运行,无法访问jsp

相关文章

  • SpringBoot集成JSP

    SpringBoot我就不介绍了,这里主要将SpringBoot集成JSP,首先我们要知道SpringBoot默认...

  • SpringBoot与JSP集成

    SpringBoot内嵌Web容器的,推荐打成jar包不是war包,如果使用JSP打成war包使用外部容器,这就相...

  • SpringBoot集成jsp

    1、创建Maven项目 2、引入pom.xml依赖 2、创建properties配置文件 3、创建jsp文件夹 4...

  • Springboot集成jsp

    1.引入依赖,在pom.xml文件中加入 2.配置application.properties文件,指定jsp文件...

  • springboot集成jsp

    一、创建项目 第一步 创建spring Initializr 第二步 packing 选择war 第三步 core...

  • SpringBoot集成Jsp

    第一步:创建项目 第二步:添加依赖 第三步:创建jsp页面存放文件夹 第四步:解决鼠标右键没有创建jsp文件选项问题

  • springboot(一):集成jsp

    1.注解 @RestController <=> @Controller + @ResponseBody@GetM...

  • 1、Springboot 集成 jsp

    pom.xml文件 org.apache.tomcat.embed

  • springboot视图层技术

    1.springboot与jsp的整合jsp页面,如果发现new中没有jsp页面可以从protectstructu...

  • SpringBoot 集成

    SpringBoot 集成 redis SpringBoot集成mongodb SpringBoot集成Beetl...

网友评论

    本文标题:SpringBoot与JSP集成

    本文链接:https://www.haomeiwen.com/subject/vyxjrqtx.html