springboot

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

2019-05-07  本文已影响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>
上一篇 下一篇

猜你喜欢

热点阅读