美文网首页springboot
SpringBoot--实战开发--整合JSP(九)

SpringBoot--实战开发--整合JSP(九)

作者: 无剑_君 | 来源:发表于2019-05-07 17:40 被阅读70次

    一、整合Web

    starter pom
    添加依赖:

      <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
    

    二、静态资源

    当我们在浏览器访问SpringBoot项目: http://127.0.0.1:8080/ 的时候,SpringBoot默认从下面的文件夹中加载静态资源:

    /BOOT-INF/classes/static/
    /BOOT-INF/classes/public/
    /BOOT-INF/classes/resources/
    /META-INF/resources/
    

    三、SpringBoot支持的模板引擎

    SpringBoot除了支持JSP外,还支持比较多的模版引擎:
    Thymeleaf
    FreeMarker
    Groovy
    Velocity

    四、SpringBoot整合JSP

    使用JSP作为模板引擎。

    1. 配置
      application.properties
    spring.mvc.view.prefix=/WEB-INF/jsp/
    spring.mvc.view.suffix=.jsp
    
    1. 创建控制器
    @Controller
    public class IndexController {
        @GetMapping("/index")
        public ModelAndView  index(){
            ModelMap model = new ModelMap();
            model.addAttribute("name", "Spring Boot");
            return new ModelAndView("index", model);
        }
    }
    
    
    1. 创建视图文件
      在main中创建webapp\WEB-INF\jsp目录。
      创建web目录

    index.jsp

    <%@page contentType="text/html;charset=utf-8" language="java" %>
    <html>
    <head>
        <title>主页</title>
    </head>
    <body>
    ${name}
    </body>
    </html>
    
    1. 常见问题:
    1. 服务器端日志输出为:
      o.s.w.s.r.ResourceHttpRequestHandler : Path with "WEB-INF" or "META-INF": [WEB-INF/views/home.jsp]
      原因是spring boot默认不使用jsp,需要在pom中引用jsp的编译程序:
      解决,添加Maven依赖:
    <!--jsp页面使用jstl标签 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
    <!-- 使用jsp引擎,springboot内置tomcat没有此依赖 -->
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <!--一定不要添加以provided生命周期,否则后果很严重-->
        <!--<scope>provided</scope>-->
    </dependency>
    

    填坑记录:
    一定不要添加 <scope>provided</scope>这个,有的环境可以。
    例:
    使用win10+idea2018.2+apache-maven-3.5.4+springboot2.1.4.RELEASE 是没有问题的。
    问题说明:
    compile(默认)
    含义:compile 是默认值,如果没有指定 scope 值,该元素的默认值为 compile。被依赖项目需要参与到当前项目的编译,测试,打包,运行等阶段。打包的时候通常会包含被依赖项目。
    provided
    含义:被依赖项目理论上可以参与编译、测试、运行等阶段,相当于compile,但是再打包阶段做了exclude的动作。
    适用场景:例如, 如果我们在开发一个web 应用,在编译时我们需要依赖 servlet-api.jar,但是在运行时我们不需要该 jar 包,因为这个 jar 包已由应用服务器提供,此时我们需要使用 provided 进行范围修饰。

    附:
    JSTL使用:

    <%@page contentType="text/html;charset=utf-8" language="java" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
        <title>主页</title>
    </head>
    <body>
    <table>
        <c:forEach var="s" begin="1" end="5" step="2">
            <%--<c:forEach var="user" items="${users}">--%>
            <tr>
                <td> ${name}:${s}</td>
            </tr>
        </c:forEach>
    </table>
    </body>
    </html>
    

    相关文章

      网友评论

        本文标题:SpringBoot--实战开发--整合JSP(九)

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