Java一个入门级MVC基于Spring Boot项目
首先根据上一篇文章内容创建一个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项目的更多相关文章
- 错误: 找不到或无法加载主类(IDEA中启动spring boot项目)
版权声明:本文为博主原创文章,如果转载请给出原文链接:http://www.jufanshare.com/content/142.html 提示:需要对IDEA编辑工具使用熟悉 出现一个问题,就是sp ...
- 1024|推荐一个开源免费的Spring Boot教程
2020-1024=996! 今天,星期六,你们是否加班了?我反正加了!早上去公司开了一早上会,中午回家写下了这篇文章. 今天,我要推荐一个开源免费的Spring Boot项目,就是我最近日更的Spr ...
- 如何基于Spring Boot搭建一个完整的项目
前言 使用Spring Boot做后台项目开发也快半年了,由于之前有过基于Spring开发的项目经验,相比之下觉得Spring Boot就是天堂,开箱即用来形容是绝不为过的.在没有接触Spring B ...
- step6----->往工程中添加spring boot项目------->修改pom.xml使得我的project是基于spring boot的,而非直接基于spring framework
文章内容概述: spring项目组其实有多个projects,如spring IO platform用于管理external dependencies的版本,通过定义BOM(bill of mater ...
- 一个很有趣的示例Spring Boot项目,使用Giraphe CMS和Spring Boot
6: 这是一个很有趣的示例Spring Boot项目,使用Giraphe CMS和Spring Boot. Giraphe是基于Spring Boot的CMS框架. https://github.co ...
- 创建一个 Spring Boot 项目,你会几种方法?
我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 42W+,如下图: 2017 年由于种种原因,就没有 ...
- 只需两步!Eclipse+Maven快速构建第一个Spring Boot项目
随着使用Spring进行开发的个人和企业越来越多,Spring从一个单一简介的框架变成了一个大而全的开源软件,最直观的变化就是Spring需要引入的配置也越来越多.配置繁琐,容易出错,让人无比头疼, ...
- 基于VS Code创建Spring Boot项目开发REST API(一)
公司从.NET转向Java不仅仅是简单的代码变成Java,趁此机会对原有的架构和代码重构,融入新的概念和技术.目前通过前后端分离,将后端更多的微服务化.从.NET转向Java我们更多的是用Java开发 ...
- [Java]Java 9运行Spring Boot项目报错的解决办法
简介 为了学习和尽快掌握 Java 9 的模块化(Module System)新特性,最近安装了 JDK 9,新建了一个 Spring Boot 进行尝试, 过程中遇到了一下报错问题,写下此文谨作为个 ...
- IDEA新建一个Spring Boot项目
Maven构建项目模板 maven构建的是maven风格的纯净模板,要转变成spring boot项目需要自己添加依赖等配置. mvn archetype:generate: Maven插件原型是一个 ...
随机推荐
- 4G模组PSM+超低功耗,手把手教你!
合宙4G-Cat.1模组支持三种功耗模式: 常规模式 低功耗模式 PSM+模式 用户可以根据不同的应用场景,按需选择不同的合宙4G-Cat.1模组功耗模式,以及三种功耗模式之间的相互转换. 合宙 ...
- 域渗透之初识Kerberos认证过程
目录 Kerberos协议中的角色 关键名词 Kerberos协议的工作流程 AS_REQ & AS_REP TGS_REQ & TGS_REP AP_REQ PAC 总结 Kerbe ...
- GAN和CGAN——生成式对抗网络和条件生成式对抗网络
GAN的定义 GAN是一个评估和学习生成模型的框架.生成模型的目标是学习到输入样本的分布,用来生成样本.GAN和传统的生成模型不同,使用两个内置模型以"对抗"的方式来使学习分布不断 ...
- Java反编译器剖析
本文由 ImportNew - 邬柏 翻译自 javacodegeeks.如需转载本文,请先参见文章末尾处的转载要求. Importnew注:如果你也对Java技术翻译分享感兴趣,欢迎加入我们的Jav ...
- golang之项目部署
介绍 Go 语言可以使用内置命令行工具 go build 编译生成可执行文件.自 Go1.5 版本开始实现自举后,交叉编译也很方便,只需使用 GOOS.GOARCH 环境变量指定目标平台和架构. 部署 ...
- Linux之buffer/cache
buffers和cached解释 =========================================================缓存(cached)是把读取过的数据保存起来,重新读 ...
- 从零开始学java(第一天)
上班日学习时间很短,而且很多事情会耽搁,就会写的比较少 近几期的笔记以复习为主,后面会逐渐拓展对我个人来说的新知识 1. 复习了一下typore的语法,方便以后记笔记用 # MarkDown学习(# ...
- codeforces1849 D. Array Painting
题目链接 https://codeforces.com/problemset/problem/1849/D 题意 输入 \(n(1 \leq n \leq 2e5)\) 和长为 \(n\) 的数组 \ ...
- 08C++选择结构(2)
一.逻辑变量 教学视频 存储类似灯亮或灯灭.是男还是女等结果只有两种可能的数据时,可以使用逻辑型变量. 逻辑型变量用关键字bool定义,所以又称为布尔变量,其值只有两个false(假)和true(真) ...
- eShopOnContainer 中 unauthorized_client error 登录错误处理
在准备好 eShopOnContainer 环境,运行起来之后,不幸的是,我遇到了不能登录的错误. 从错误信息中,可以看到 unauthorized_client 的内容.这是为什么呢? 从 eSho ...