从controller开始学起

2019-10-03 19:59 来源:未知

1. 返回数据与返回页面

在写web项目的时候,controller里的返回值一般分为两种,一种是返回页面,也就是ModeAndView,另一种是直接返回数据,比如json格式的数据。

返回一个页面,我们需要用到一些模板引擎,比如熟知的jsp,模板引擎后面会详细讲解。

返回数据一般会选择返回json数据,我们之前的demo项目中使用的@RestController就是一个返回数据的注解。

@RestController是一个组合注解,是由@Controller和@ResponseBody组合而成的。
@Controller:将返回值渲染为页面。
@ResponseBody:将返回值渲染为数据。

虽然文章标题是“学起”,但是我也不会真的从头开始讲,默认,你是懂springmvc的 o.o

2. spring boot支持的模板引擎

spring-boot 支持多种模版引擎包括:

  • FreeMarker
  • Groovy
  • Thymeleaf (Spring 官网使用这个)
  • Velocity
  • JSP (不推荐,jsp在内嵌的servlet容器中运行有一些问题。)

我们在讲前后端分离之前,都会使用Thymeleaf模板引擎,先简单的介绍一下它。

在写web项目的时候,controller里的返回值一般分为两种,一种是返回页面,也就是ModeAndView,另一种是直接返回数据,比如json格式的数据。

2.1 Thymeleaf模板引擎

Thymeleaf是一个java类库,它是一个xml/xhtml/html5的模板引擎,可以作为mvc的web应用的view层。

Thymeleaf还提供了额外的木块与spring mvc集成,所以使用ssm框架的也可以使用这个模板引擎。

本来想列一下Thymeleaf的用法的,但是感觉有点多,以后哪里用到哪里讲好了。

返回一个页面,我们需要用到一些模板引擎,比如熟知的jsp,模板引擎后面会详细讲解。

3. 实战

接下来,我们通过一个项目,来实践一下两种不同的返回结果。

先看一下最终的目录结构:

 

图片 1

目录结构

返回数据一般会选择返回json数据,我们之前的demo项目中使用的@RestController就是一个返回数据的注解。

3.1 创建项目project_1

  • 选择依赖:web Thymeleaf

 

图片 2

选择依赖

@RestController是一个组合注解,是由@Controller和@ResponseBody组合而成的。@Controller:将返回值渲染为页面。@ResponseBody:将返回值渲染为数据。

3.2 新建一个person类,用来封装数据

package com.example.model;

public class Person {

    private String name;
    private Integer age;

    public Person() {
    }

    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }
}

spring-boot 支持多种模版引擎包括:

3.3 新建一个ViewController,用来返回一个视图

package com.example.controller;

import com.example.model.Person;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.ArrayList;
import java.util.List;

@Controller
public class ViewController {

    @RequestMapping("/view")
    public String view(Model model){
        Person person = new Person("x", 22);

        List<Person> list = new ArrayList<>();
        list.add(new Person("a", 11));
        list.add(new Person("b", 12));
        list.add(new Person("c", 13));

        model.addAttribute("onePerson", person);
        model.addAttribute("manyPerson", list);

        return "index";

    }
}
  • FreeMarker

3.4 创建index.html,用来接收数据

<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8"/>
    <title>test</title>

    <link href="https://cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet"/>
    <link href="https://cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap-theme.min.css" rel="stylesheet"/>
</head>

<body>
    <div class="panel panel-primary">
        <div class="panel-heading">
            <h3 class="panel-title">访问model</h3>
        </div>
        <div class="panel-body">

        </div>
    </div>

    <div th:if="${not #lists.isEmpty(manyPerson)}">
        <div class="panel panel-primary">
            <div class="panel-heading">
                <h3 class="panel-title">列表</h3>
            </div>
            <div class="panel-body">
                <ul class="list-group">
                    <li class="list-group-item" th:each="person:${manyPerson}">


                    </li>
                </ul>
            </div>
        </div>
    </div>
</body>
</html>

这里我们使用了Thymeleaf模板引擎来获得后台传来的数据并解析,使用bootstrap框架显示数据。可以看到,Thymeleaf的用法和jsp还是有点像的。可以直接通过${}的形式来获得attribute中的数据。

在 spring boot 中,模板引擎默认是开启缓存的,如果修改了页面内容,刷新页面是得不到修改后的内容的。我们可以在application.yml中关闭模板引擎缓存:

spring:
  thymeleaf:
    cache: false

如果需要详细的Thymeleaf模板的使用方式教程,可以给我留言,我看情况来决定是否要写一篇。因为我用的也不是很多,大部分情况我都是前后端分离的。

  • Groovy
  • Thymeleaf (Spring 官网使用这个)
  • Velocity
  • JSP (不推荐,jsp在内嵌的servlet容器中运行有一些问题。)

3.5 运行项目,浏览器访问http://localhost:8080/view

 

图片 3

view

可以看到,我们成功的在前端获取到了数据。方式就是将数据保存在attribute中,然后再前端页面获取。

我们在讲前后端分离之前,都会使用Thymeleaf模板引擎,先简单的介绍一下它。

3.6 修改ViewController中的@Controller为@RestController,重新运行

 

图片 4

view

我们修改了注解,发现结果变了,直接显示了“index”,是因为@RestController会直接返回数据,而不是渲染页面,所以直接返回了index(这个index,是return语句中的)

2.1 Thymeleaf模板引擎

Thymeleaf是一个java类库,它是一个xml/xhtml/html5的模板引擎,可以作为mvc的web应用的view层。

Thymeleaf还提供了额外的木块与spring mvc集成,所以使用ssm框架的也可以使用这个模板引擎。

本来想列一下Thymeleaf的用法的,但是感觉有点多,以后哪里用到哪里讲好了。

接下来,我们通过一个项目,来实践一下两种不同的返回结果。

先看一下最终的目录结构:

图片 5目录结构

TAG标签:
版权声明:本文由金沙澳门官网4166发布于世界史,转载请注明出处:从controller开始学起