清茶书香

一杯清茶,一本书籍,一个下午。


  • 首页

  • 归档

  • 分类

  • 关于

  • 搜索
Redis JPA Solr SpringData SpringMVC localRepository local Mapper 事务 Mybatis JDBC AOP DI IOC 常用函数 触发器 存储过程 Promise Gateway SpringCloud vue-cli axios es6 webpack npm vue 个性化 zsh 终端 caffeine jvm缓存 guava cache validation Mapping MapStruct comment 小程序 建站 WeHalo config logback plugins database idea maven spring https http nginx password RabbitMQ 秒杀系统 Windows MySQL 数据备份 halo SpringBoot shell Linux ip Optional Stream Lambda k8s Docker 列编辑 vim MacOS 图片合成 Java 远程联调 nps 内网穿透

SpringBoot整合Sping MVC

发表于 2019-07-23 | 分类于 spring系列 | 0 | 阅读次数 194

添加依赖

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

网页模板引擎

Thymeleaf

Thymeleaf模板引擎是SpringBoot官方强烈建议使用的模板引擎,它可以完美兼容普通html网页。使用thymeleaf模板引擎后在SpringBoot环境中是显示动态的网页内容,而以本地直接运行则是显示静态的内容(Thymeleaf模板引擎的文件后缀也是.html)。

添加依赖

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

表达式

变量表达式

使用示例:

<!DOCTYPE html>
<!-- 需要添加一个文件头,声明th命名空间 -->  
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
    ${session.user.name}
    <li th:each="book : ${books}">hello spring mvc</li>
    <span th:text="${book.author.name}">hello spring boot</span>
</body>
</html>

星号表达式

URL表达式

赋值、字符串拼接

赋值操作

Thymeleaf中赋值使用th:text属性,如:

<p th:text="${message}"> description </p>
字符串拼接
方式一:
<span th:text="'Welcome to our application, ' + ${user.name} + '!'">
方式二:
<span th:text="|Welcome to our application, ${user.name}!|">

分支语句

用法示例:

<a th:if="${myself=='yes'}" > ok </a>

上面的例子中只有th:if条件成立才显示a标签内容

用法示例:

<a th:unless=${session.user != null} th:href="@{/login}" >Login</a>

th:unless 于 th:if 恰好相反,只有表达式中的条件不成立,才会显示其内容。

循环语句

用法示例:

<tr th:each="collect,iterStat : ${collects}"> 
   <th scope="row" th:text="${collect.id}">1</th>
   <td>
      <img th:src="${collect.webLogo}"/>
   </td>
   <td th:text="${collect.url}">Mark</td>
   <td th:text="${collect.title}">Otto</td>
   <td th:text="${collect.description}">@mdo</td>
   <td th:text="${terStat.index}">index</td>
</tr>

iterStat称作状态变量,属性有:

  • index:当前迭代对象的 index(从0开始计算)
    count: 当前迭代对象的 index(从1开始计算)
  • size:被迭代对象的大小
  • current:当前迭代变量
  • even/odd:布尔值,当前循环是否是偶数/奇数(从0开始计算)
  • first:布尔值,当前循环是否是第一个
  • last:布尔值,当前循环是否是最后一个

FreeMarker

JSP

SpringBoot官方建议我们使用Thymeleaf模板引擎取代JSP视图,如果我们就想使用JSP怎么办呢?可以,做好下面几步配置就可以了

修改打包方式

<project>
     ...
    <packaging>war</packaging>
     ...
</project>

添加JSP依赖

<!--配置支持jsp-->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

配置视图解析器

下面时yml格式的配置文件

spring:
  mvc:
    view:
      prefix: /WEB-INF/ #配置JSP文件前缀
      suffix: .jsp      #配置JSP页面后缀

如果用properties格式的配置文件,则配置如下

spring.mvc.view.prefix=/WEB-INF/
spring.mvc.view.suffix=.jsp

相信大家也已经看出来了,两种格式的配置文件都是一样的,yml格式时SpringBoot支持的格式,在Idea编辑器中yml并不比properties格式的难用,会自动转换成对应的格式(eclipse就算了,不会提示,还不会转换)。而且很显然yml格式的可以减少大量的重复性前缀(比如spring.mvc.view等等),这样可以一定程度上减少配置文件的大小。

注:
1、jsp页面必须放到webapp目录或webapp/WEB-INF/下
2、如果使用了jsp作为视图,则工程只能打成war包部署(因为jar包不会将webapp目录下的东西打进去)
3、运行时如果是开发那就还是用启动类启动而不需要用tomcat容器

返回JSON

SpringBoot默认内部已经提供了对以下三种JSON类库的支持:

  • Gson
  • Jackson
  • JSON-B

Jackson是默认的JSON转换库

要自动以Jackson转换JSON的参数,可以通过定义ObjectMapper bean来实现,如:

@Bean
public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
        return mapper;
}

也可以通过设置spring.jackson.*属性实现

文件上传

SpringBoot 2.1版本解决Tomcat最大支持10M文件上传问题

@Bean
public TomcatServletWebServerFactory tomcatEmbedded() {
    TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
    tomcat.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
        if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol<?>)) {
            //-1 means unlimited
            ((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1);
        }
    });
    return tomcat;
}

SpringBoot 1.5版本解决Tomcat最大只能上传10M文件问题

@Bean
public TomcatEmbeddedServletContainerFactory tomcatFactory() {
    TomcatEmbeddedServletContainerFactory tomcatFactory = new TomcatEmbeddedServletContainerFactory();
    tomcatFactory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
        if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol<?>)) {
            //-1 means unlimited
            ((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1);
        }
    });
    return tomcatFactory;
}

放行静态资源

SpringBoot默认会将classpath:/static/作为静态资源处理, 我们可以通过下面的配置重写该参数:

#指定请求url符合什么格式时才会当成静态资源处理
spring.mvc.static-path-pattern=/** 

# 指定静态资源去哪里找
spring.resources.static-locations=classpath:/static/ 

#这个属性的默认值是:
#spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/

这两个属性其实就相当于在xml中配置的

<mvc:resources mapping="/**" location="/static/" />

这一章介绍了spring mvc的知识,而我们还是没有用到太多的配置,这其实就是spring boot的强大之处,它可以大量缩减我们之前用ssm时的配置工作量。那么spring boot的配置文件能配置那些东西呢?请看下一章的SpringBoot配置文件详解。

Bennett wechat
欢迎收藏我的微信小程序,方便查看更新的文章。
  • 本文作者: Bennett
  • 本文链接: https://hibennett.cn/archives/springboot-springmvc
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# SpringBoot # spring # SpringMVC
Java8新特性~函数式编程
了解SpringBoot配置文件
  • 文章目录
  • 站点概览
Bennett

Bennett

60 日志
28 分类
74 标签
RSS
Github E-mail Gitee QQ
Creative Commons
Links
  • MacWk
  • 知了
0%
© 2020 — 2023 hibennett.cn版权所有
由 Halo 强力驱动
|
主题 - NexT.Pisces v5.1.4

浙公网安备 33010802011246号

    |    浙ICP备2020040857号-1