首先根据上一篇文章内容创建一个Spring Boot项目,如图所示:

一,创建Controller并返回数据

在src/main/java/项目文件夹下面创建package,继续里面可以创建模块的package,然后可以右键创建Class,命名为helloController,然后就可以写控制器代码了。

package xxh.springbootmvc.xxhdemo1.helloController;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest; @RestController
@RequestMapping("/v1/hello")
public class helloController { @RequestMapping("/world")
public String world() {
return "Hello World !!!你好世界";
} }

例如,如上代码就是最简单的一个返回字符串的Controller,如图:

如果要指定请求方式,接收URL参数,并根据参数返回数据,可以增加增加一个处理:

    @RequestMapping(value = "/getworld", method = RequestMethod.GET)
public MVHelloWord getWorld(@RequestParam(value = "id", required = true) int id, HttpServletRequest request) {
MVHelloWord entity = null;
if (123 == id) {
entity = new MVHelloWord(123, "诸葛亮");
} else {
entity = new MVHelloWord(0, "不认识");
}
return entity;
}

效果如图:

注意:因为控制器前面加了标注@RestController,所以默认以接口形式返回json数据application/json,标注@RequestMapping就制定了改页面/接口的名称,调用方法RequestMethod等规则,标注@RequestParam指明了接收的参数规则,或者通过HttpServletRequest对象来接收请求信息效果是一样的。

然后MVHelloWord这个自己创建的模型,下面提到。

如果URL参数里面的id不等于123则输出的内容就不一样了。

二,创建Model

与创建Controller一样,在模块package里创建一个Class,不加任何标注的Class就是一个普通的类,当做Model你可以在里面写自己的属性。比如:

private int id;
private String name;

然后选中他们,右键找到Generate生成构造函数和get,set方法:

最终生成的代码:

package xxh.springbootmvc.xxhdemo1.helloController;

/*这是一个Model*/
public class MVHelloWord {
public int getId() {
return id;
}
public void setId(int id) { this.id = id; } public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} /*私有属性*/
private int id;
private String name; public MVHelloWord(int id, String name) {
this.id = id;
this.name = name;
} @Override
public String toString() {
return "MVHelloWord{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}

这样一个最简单的Model就创建好了。

三,返回json

当我们在控制器前面加标注@RestController,@RequestMapping,并且在方法里返回Model时,Spring Boot将默认给我们返回json数据。

四,返回视图

返回视图稍微麻烦点,其中就是我们要引入thymeleaf框架。首先在项目结构文件中找到pom.xml,这是项目的引入配置文件。插件包需要在这里引入才能被加载出来。

打开pom.xml后找到:

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

这是web项目默认的插件,将它复制并粘贴一份,将artifactId改成spring-boot-starter-thymeleaf,保存。也可以将下面的代码直接复制进去:

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

idea工具会自动帮助加载插件框架。

然后在项目结构文件中找到application.properties,这是应用程序(项目)的关键属性配置文件。一些自定义配置或变量都可以写在这里。

例如:设置项目的端口,设置视图的根路径和视图文件的后缀名:

#设置项目的端口
server.port=8888 #设置视图的根路径和视图文件的后缀名
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html

这样设置就可以在resources/templates/目录下创建后缀名为.html的视图文件了。

点击templates右键新建HTML文件,按照W3C标准创建html代码即可。

注意:html标签加协议  xmlns:th="http://www.thymeleaf.org"  ,然后页面才可以用th引用从Controller传过来的Model实体。

Controller代码:

package xxh.springbootmvc.xxhdemo1.helloController;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /*标注是控制器*/
@Controller
@RequestMapping("/v1/hello2")
public class hello2Controller { @RequestMapping("/world")
public String world(HttpServletRequest request,HttpServletResponse response) {
System.out.print("Hello World!!!");
MVHelloWord entity = new MVHelloWord(123, "诸葛亮");
request.setAttribute("myEntity",entity); // 请求返回实体变量名及实体对象
return "a"; // 这是视图名称 或 路径/视图名称
} }

视图a.html代码:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>我的第一个视图页面</title>
</head>
<body>
<h3>下面显示实体信息:</h3>
<!--第一种展示实体数据方式-->
myEntity:<span th:text="${myEntity}"></span><br />
id= <span th:text="${myEntity.id}"></span><br />
name= <span th:text="${myEntity.name}"></span><br />
<!--第二种展示实体数据方式-->
<div th:object="${myEntity}">
<p>ID:<span th:text="*{id}"></span></p>
<p>name:<span th:text="*{name}"></span></p>
</div> </body>
</html>

请求访问效果如图:

当然还有另外2种返回视图的Controller代码写法:

package xxh.springbootmvc.xxhdemo1.helloController;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /*标注是控制器*/
@Controller
@RequestMapping("/v1/hello2")
public class hello2Controller { @RequestMapping("/world")
public String world(HttpServletRequest request,HttpServletResponse response) {
System.out.print("Hello World!!!");
MVHelloWord entity = new MVHelloWord(123, "诸葛亮");
request.setAttribute("myEntity",entity); // 请求返回实体变量名及实体对象
return "a"; // 这是视图名称 或 路径/视图名称
} @RequestMapping("/world2")
public ModelAndView world2() {
MVHelloWord entity = new MVHelloWord(123, "诸葛亮");
ModelAndView mv = new ModelAndView();
mv.setViewName("Vhello/a"); // 这是视图名称 或 路径/视图名称
mv.addObject("myEntity", entity); // 请求返回实体变量名及实体对象
return mv;
} @RequestMapping("/world3")
public String world3(Integer id, Model model, HttpServletRequest request, HttpServletResponse response) {
MVHelloWord entity = new MVHelloWord(123, "诸葛亮");
model.addAttribute("entity", entity); // 请求返回实体变量名及实体对象
model.addAttribute("id", id == null ? 99 : id); //这是自定义放回白能量id
model.addAttribute("msg", "第一战立威之战:火烧博望坡"); //这是自定义放回白能量msg
return "Vhello/d"; // 这是视图名称 或 路径/视图名称
} }

请求world2效果如图:

请求world3效果如图:

其中,视图d.html代码如下:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>MVC测试</title>
</head>
<body>
<h3>world3测试</h3>
<p><label>参数id=</label><input type="text" name="id" th:id="'data'+${id}" readonly="readonly" th:value="${id}"></p> <p><label>id=</label><span th:text="${entity.id}"></span></p>
<p><label>name=</label><span th:text="${entity.name}"></span></p> <p style="color: orangered" th:utext="${msg}"><label>id=</label><span></span></p>
</body>
</html>

代码结构如图;

上一篇:idea创建一个入门Spring Boot项目(controller层)使用Maven代码管理

Java一个入门级MVC基于Spring Boot项目的更多相关文章

  1. 错误: 找不到或无法加载主类(IDEA中启动spring boot项目)

    版权声明:本文为博主原创文章,如果转载请给出原文链接:http://www.jufanshare.com/content/142.html 提示:需要对IDEA编辑工具使用熟悉 出现一个问题,就是sp ...

  2. 1024|推荐一个开源免费的Spring Boot教程

    2020-1024=996! 今天,星期六,你们是否加班了?我反正加了!早上去公司开了一早上会,中午回家写下了这篇文章. 今天,我要推荐一个开源免费的Spring Boot项目,就是我最近日更的Spr ...

  3. 如何基于Spring Boot搭建一个完整的项目

    前言 使用Spring Boot做后台项目开发也快半年了,由于之前有过基于Spring开发的项目经验,相比之下觉得Spring Boot就是天堂,开箱即用来形容是绝不为过的.在没有接触Spring B ...

  4. step6----->往工程中添加spring boot项目------->修改pom.xml使得我的project是基于spring boot的,而非直接基于spring framework

    文章内容概述: spring项目组其实有多个projects,如spring IO platform用于管理external dependencies的版本,通过定义BOM(bill of mater ...

  5. 一个很有趣的示例Spring Boot项目,使用Giraphe CMS和Spring Boot

    6: 这是一个很有趣的示例Spring Boot项目,使用Giraphe CMS和Spring Boot. Giraphe是基于Spring Boot的CMS框架. https://github.co ...

  6. 创建一个 Spring Boot 项目,你会几种方法?

    我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 42W+,如下图: 2017 年由于种种原因,就没有 ...

  7. 只需两步!Eclipse+Maven快速构建第一个Spring Boot项目

     随着使用Spring进行开发的个人和企业越来越多,Spring从一个单一简介的框架变成了一个大而全的开源软件,最直观的变化就是Spring需要引入的配置也越来越多.配置繁琐,容易出错,让人无比头疼, ...

  8. 基于VS Code创建Spring Boot项目开发REST API(一)

    公司从.NET转向Java不仅仅是简单的代码变成Java,趁此机会对原有的架构和代码重构,融入新的概念和技术.目前通过前后端分离,将后端更多的微服务化.从.NET转向Java我们更多的是用Java开发 ...

  9. [Java]Java 9运行Spring Boot项目报错的解决办法

    简介 为了学习和尽快掌握 Java 9 的模块化(Module System)新特性,最近安装了 JDK 9,新建了一个 Spring Boot 进行尝试, 过程中遇到了一下报错问题,写下此文谨作为个 ...

  10. IDEA新建一个Spring Boot项目

    Maven构建项目模板 maven构建的是maven风格的纯净模板,要转变成spring boot项目需要自己添加依赖等配置. mvn archetype:generate: Maven插件原型是一个 ...

随机推荐

  1. 使用 C# 入门深度学习:Pytorch 基础

    教程名称:使用 C# 入门深度学习 作者:痴者工良 地址: https://torch.whuanle.cn 1.2 Pytorch 基础 本文内容介绍 Pytorcn 的基础 API,主要是数组的创 ...

  2. 在Keil中使用ST-LINK烧录STM32程序指南

    前言 之前玩STM32都是用J-LINK烧录程序,不仅便捷,而且烧录的速度比用串口快好多. 最近我接了几个32单片机的毕设单子,便买了几块C8T6的最小系统板用来开发.最初我还是用J-LINK烧录C8 ...

  3. Python中函数或者类对象带()与不带()的区别——闭包和函数返回时的常见现象

    Python中函数或者类对象带()与不带()的区别-----闭包和函数返回时的常见现象 - 函数不带括号时,调用的是这个函数本身 ,是整个函数体,是一个函数对象,不需等该函数执行完成,返回一个已定义函 ...

  4. 纪念第一次在 Github 上提 ISSUE 得到了老哥的回复

    背景 第一次在 GitHub 上提 ISSUE,提问的内容就是我的上一篇博文 rustlings v6.0 运行时出现 " You are trying to run Rustlings u ...

  5. (Python基础教程之十六)Python multidict示例–将单个键映射到字典中的多个值

    1.什么是multidict词典> 在python中," multidict "一词用于指代字典,在字典中可以将单个键映射到多个值.例如 多重结构 multidictWith ...

  6. Python之解析配置文件

    [.env] 1) 使用python-dotenv 安装: pip install python-dotenv 示例配置文件: ADMIN_HOST = https://uat-rm-gwaaa.cn ...

  7. 使用redis 的订阅服务

    1.业务使用场景 我们在使用表单动态添加字段,如果新增字段,再保存数据,这个时候就会出错,出错的原因是seata 再本地缓存元数据,修改物理表的时候,这个元数据并没有发生变化,因此需要刷新元数据,因为 ...

  8. S2P主数据助力医药企业建立数据化管理平台

    随着国家信息化进程的推进,医药软件行业市场规模正在不断扩大,其应用领域也在逐步拓宽,企业面临着多样化的销售渠道和模式选择.然而,要想在这样的多变市场中占据优势地位,单纯依靠经验决策已经不足以应对挑战. ...

  9. 编译器-FOLLOW集合

    语法分析器的两个重要函数 FIRST和FOLLOW 一.FOLLOW的定义 在句型中紧跟在A右边的终结符号的集合 如果A是某些句型的最右符号,那么$在FOLLOW(A)中 A:非终结符 二.计算方法 ...

  10. 基于.NET8+Vue3开发的权限管理&个人博客系统

    前言 今天大姚给大家分享一个基于.NET8+Vue3开发的权限管理&个人博客系统:Easy.Admin. 项目介绍 Easy.Admin是一个基于.NET8+Vue3+TypeScript开发 ...