Spring MVC 5 + Thymeleaf 注解配置

Spring的配置方式一般为两种:XML配置和注解配置

Spring从3.0开始以后,推荐使用注解配置,这两种配置的优缺点说的人很多,我就不说了,自行体会,下面就用注解配置实现一个Spring MVC Web Demo

先看看项目结构:

可以看到没有任何XML配置文件,全都是Java代码实现。

  1. 使用 Maven 新建一个项目,当然你用IEDA,Eclipse新建一个空的项目一样的,然后添加依赖,依赖下面直接给出:



    4.0.0

    spring-mvc

    spring-mvc

    1.0-SNAPSHOT

    war

        <name>Spring-mvc Maven Webapp</name>
    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <failOnMissingWebXml>false</failOnMissingWebXml>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <spring.version>5.0.6.RELEASE</spring.version>
    <thymeleaf.version>3.0.9.RELEASE</thymeleaf.version>
    </properties> <dependencies>
    <!--spring相关包-->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>${spring.version}</version>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
    </dependency>
    <!--j2ee相关包 servlet、jsp、jstl-->
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
    </dependency>
    <dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
    <version>${thymeleaf.version}</version>
    </dependency>
    <!--junit-->
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
    </dependency>
    <!--jackson-->
    <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.9.5</version>
    </dependency>
    <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.5</version>
    </dependency>
    </dependencies>
    <build>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <!--配置热启动-->
    <configuration>
    <fork>true</fork>
    </configuration>
    </plugin>
    <!--servlet容器 tomcat 插件-->
    <plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    </plugin>
    </plugins>
    </build>
    </project>
  2. 新建 MvcWebConfig 配置类 实现WebMvcConfigurer接口,重写configureViewResolvers 方法即可,并且使用 @Configuration、@ComponentScan 注解 MvcWebConfig 类,下面我给出主要代码,然后说明代码的作用。

        /**
    * STEP 1 - 创建模版解析器
    */
    @Bean
    public ITemplateResolver templateResolver() {
    SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
    templateResolver.setApplicationContext(applicationContext);
    templateResolver.setPrefix("/WEB-INF/templates/");
    templateResolver.setSuffix(".html");
    templateResolver.setCharacterEncoding("UTF-8");
    templateResolver.setTemplateMode(TemplateMode.HTML);
    templateResolver.setCacheable(false);
    return templateResolver;
    } /**
    * STEP 2 - 创建模版引擎
    * 并为模板引擎注入模板解析器
    */
    @Bean
    public SpringTemplateEngine templateEngine() {
    SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    templateEngine.setTemplateResolver(templateResolver());
    templateEngine.setEnableSpringELCompiler(true); return templateEngine;
    } /**
    * STEP 3 - 注册 Thymeleaf 视图解析器
    * 并为解析器注入模板引擎
    */
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
    ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
    viewResolver.setTemplateEngine(templateEngine());
    viewResolver.setCharacterEncoding("UTF-8");
    registry.viewResolver(viewResolver);
    }
    • templateResolver 方法和XML配置的类似
    • 中文会有乱码问题,需要设置 "UTF-8",两个地方必须都要设置,否则会显示乱码
  3. 新建 MvcWebAppInitializer 类 extends 抽象类 AbstractAnnotationConfigDispatcherServletInitializer,重写以下几个方法

    @Override

    protected Class<?>[] getRootConfigClasses() {

    return null;

    }

        @Override
    protected Class<?>[] getServletConfigClasses() {
    return new Class[]{MvcWebConfig.class};
    } @Override
    protected String[] getServletMappings() {
    return new String[]{"/"};
    } @Override
    protected Filter[] getServletFilters() {
    CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
    encodingFilter.setEncoding("UTF-8");
    encodingFilter.setForceRequestEncoding(true);
    return new Filter[]{encodingFilter};
    }

    至此,配置已经全部完成。

  4. 新建 HomeController ,新建 index 视图先看看,能不能跑起来

    • index :

      @RequestMapping(value = "/", method = RequestMethod.GET)

      public String index() {

      return "index";

      }
    • 在 \WEB-INF\templates\ 目录下新建页面 index.html,并使用thymeleaf 模板引擎

<!DOCTYPE html>
<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Spring Index</title>
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" crossorigin="anonymous">
</head>
<body> <div class="container" style="margin-top: 40px;">
<div class="jumbotron">
<h1>Spring Mvc 5 + Thymeleaf</h1>
<p>出现此页面,说明配置成功,弃用xml配置,使用注解方式实现</p>
<p>mvn tomcat7:run</p>
<p><a class="btn btn-primary btn-lg" th:href="@{/home/user}" role="button">Learn more</a></p>
</div>
</div> <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.slim.min.js" crossorigin="anonymous"></script>
<script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js" crossorigin="anonymous"></script>
</body>
</html>

/home/user 页面如下:

至此页面已经完成,现在使用Maven 跑一下,命令:mvn tomcat7:run

当然你也可以用IDEA 的 Edit Configurations 新建一个Maven,如下图:



看一下效果:

没有使用任何XML文件,Spring MVC跑起来了,再试试返回json数据

  1. 在 HomeController 新建userList 方法,返回List数组

    @ResponseBody

    @RequestMapping(value = "/home/userList", method = RequestMethod.GET)

    public List userList() {

    List userList = new ArrayList<>();

    userList.add(new UserInfo(1001, "龙傲天", 23, "成都省"));

    userList.add(new UserInfo(1002, "曹孟德", 33, "河北市"));

    userList.add(new UserInfo(1003, "Chris", 32, "高新市"));

    userList.add(new UserInfo(1003, "Evans", 17, "绵阳市"));

            return userList;
    }
    • Spring 返回 json数据 直接使用 @ResponseBody 注解杰克
    • @ResponseBody 依赖 com.fasterxml.jackson
  2. 看下返回json数据的效果

没有使用任何XML文件,实现了一个Web 程序。

Ps:博客园的这个markdown 编辑器有问题,我用Typora写好了复制过来,总有些问题,将就着看吧

Spring MVC 5 + Thymeleaf 基于Java配置和注解配置的更多相关文章

  1. Spring课程 Spring入门篇 4-6 Spring bean装配之基于java的容器注解说明--@ImportResource和@Value java与properties文件交互

    1 解析 1.1 这两个注解应用在什么地方 1.2 应用方式 1.3 xml方式实现取值 2 代码演练 2.1 @ImportResource和@Value代码演练 1 解析 1.1 这两个注解应用在 ...

  2. Spring课程 Spring入门篇 4-8 Spring bean装配之基于java的容器注解说明--基于泛型的自动装配

    1 解析 1.1 什么是泛型? 1.2 泛型有什么作用? 1.3 泛型装配样式? 2 代码演练 2.1 泛型应用 1 解析 1.1 什么是泛型? Java泛型设计原则:只要在编译时期没有出现警告,那么 ...

  3. Spring课程 Spring入门篇 4-7 Spring bean装配之基于java的容器注解说明--@Scope 控制bean的单例和多例

    1 解析 1.1 bean的单例和多例的应用场景 1.2 单例多例的验证方式 1.3 @Scope注解单例多例应用 2 代码演练 2.1 @Scope代码应用 1 解析 1.1 bean的单例和多例的 ...

  4. Spring课程 Spring入门篇 4-5 Spring bean装配之基于java的容器注解说明--@Bean

    1 解析 2.1 @bean注解定义 2.2 @bean注解的使用 2 代码演练 2.1 @bean的应用不带name 2.2 @bean的应用带name   2.3 @bean注解调用initMet ...

  5. Spring框架入门之基于Java注解配置bean

    Spring框架入门之基于Java注解配置bean 一.Spring bean配置常用的注解 常用的有四个注解 Controller: 用于控制器的注解 Service : 用于service的注解 ...

  6. 基于java代码的springmvc配置

    在我的印象中,开发一个web项目首选当然是springmvc,而配置springmvc无非就是web.xml里配置其核心控制器DispatcherServlet.然后把所有的请求都交给它处理,再配个视 ...

  7. Spring Boot 2.X(三):使用 Spring MVC + MyBatis + Thymeleaf 开发 web 应用

    前言 Spring MVC 是构建在 Servlet API 上的原生框架,并从一开始就包含在 Spring 框架中.本文主要通过简述 Spring MVC 的架构及分析,并用 Spring Boot ...

  8. 开涛spring3(12.4) - 零配置 之 12.4 基于Java类定义Bean配置元数据

    12.4  基于Java类定义Bean配置元数据 12.4.1  概述 基于Java类定义Bean配置元数据,其实就是通过Java类定义Spring配置元数据,且直接消除XML配置文件. 基于Java ...

  9. 2017.3.31 spring mvc教程(二)核心流程及配置详解

    学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...

随机推荐

  1. php 接口与前端数据交互实现

    最近在做前后端数据交互的尝试,也跳了很多坑,使用的是php+bootstrap-table+js,把一些收获记录在这里,方便查询. 这个小项目,仅有3个文件,分别为: crud.html data.p ...

  2. 有效运维的 on-call 机制

    [编者按]本文作者为云告警平台OneAlert负责人,著<云计算与OpenStack>,在IT运营管理.云计算方面从业10多年. 正文 互联网技术的发展,离不开运维支撑工作,没有零bug的 ...

  3. [20181124]关于降序索引问题3.txt

    [20181124]关于降序索引问题3.txt --//链接:blog.itpub.net/267265/viewspace-2221425/,探讨降序索引中索引的键值.--//实际上使用函数sys_ ...

  4. mssql sqlserver存储过程专题

    MSSQL存储过程简介及创建方式 mssql_DB_存储过程类型简介   MSSQL sql存储过程创建简介及应用举例 MSSQL SQl server 2008 CLR 存储过程创建举例 MSSQL ...

  5. 数据库之mysql篇(2)—— mysql常识引入/用户授权

    常识引入 1.概念: 数据库:本质上是一个文件夹 1)查看本机所有数据库:show databases; 结束符:分号[:],一切数据行的结尾都以分号作为结束 2)创建数据库:create  数据库名 ...

  6. Linux学习历程——Centos 7 man命令

    一.man命令介绍 man,为单词manual的缩写,是linux下的帮助指令. 二.实例 以man命令为例,输入 man  man  获取man命令的帮助文档 可以看出,使用man命令查询到的帮助信 ...

  7. powershell脚本之windows服务与进程

    powershell脚本之windows服务与进程 服务与进程的区别: Windows服务是指系统自动完成的,不需要和用户交互的过程,可长时间运行的可执行应用程序 进程是程序运行的实例,系统会给运行中 ...

  8. Cs231n课堂内容记录-Lecture1 导论

    Lecture 1 视频网址:https://www.bilibili.com/video/av17204303/?p=2 https://zhuanlan.zhihu.com/p/21930884? ...

  9. live555源码学习1---Socket流程架构图

    怎么说呢,换了工作环境,好多软件公司禁止使用了,有道笔记也无法使用了.发现博客园还可以上传图片,以后只能在这里记录了. 越发的感觉需要尽快把live555的代码拿下.因为工作环境问题,webrtc的源 ...

  10. 你可能不知道的printf

    前言 printf可能是我们在学习C语言的过程中最早接触的库函数了.其基本使用想必我们都已经非常清楚了.但是下面的这些情况你是否已经清楚地知道了呢? 示例程序 我们来看一个示例程序,看看你能否对下面的 ...