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插件原型是一个 ...
随机推荐
- 八、Spring Boot集成Spring Security之前后分离认证最佳实现对接测试
前言 本文介绍前后分离认证最佳实现的对接测试,使用postman或者其他熟悉的测试工具,配合以下内容观看效果更佳!!! 什么是前后分离认证流程最佳方案,为什么这么设计?请查看六.Spring Boot ...
- 第二篇:低功耗模组Air724UG硬件设计手册
接着上篇,继续分享. 3.5 串口 模块提供了五个通用异步收发器:主串口 UART1.校准串口 UART2.通用串口 UART3.调试串口 HOST UART 和 ZSP UART. 3.5.1 ...
- 海外模组联网难?那你必须看看APN配置…
做海外的设备,如果忽视了射频的信号质量,肯定是要吃大亏的! 因为国外的4G信号都是比较差的! 所以,海外模组的联网问题,会比国内要多不少. 客户在实际应用中或多或少都会遇到: 网络相关问题:例如:连 ...
- 【昌哥IT课堂】MySQL8.3 EXPLAIN中的新JSON格式(译)
MySQL提供了两个用于分析查询计划的强大工具:EXPLAIN和EXPLAIN ANALYZE.EXPLAIN显示优化器选择的执行计划,并在执行之前停止,而EXPLAIN ANALYZE实际执行查询并 ...
- cornerstone中raft_server_req_handlers源码解析
1.概述 之前说过raft_server是cornerstone的核心,其中充满了很多req的发送,那么follower收到leader的req会怎么处理呢? 本文就是来解析cornerstone中处 ...
- C#-JavaScript-base64加密解码
C# //base64加密 //调用方式:Helper.EncodeToBase64(需要加密字符串) public static string EncodeToBase64(string data) ...
- 使用缓存构建更快的 Web 应用程序
使用 Java 缓存系统缓存频繁查看的数据 使用 Java 技术的 Web 开发人员可以使用缓存实用程序快速提升他们的应用程序的性能.Java 缓存系统(Java Caching System,JCS ...
- 【深入Java虚拟机】之七:Java编译与JIT编译
编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行: 其中绿色的模块可以选择性实现.很容易看出,上图中 ...
- python之日志logging
转载:https://blog.csdn.net/weixin_43790276/article/details/101944628 logging 模块是 Python 内置的标准模块,用于输出代码 ...
- MySQL 8.0 为什么会放弃查询缓存?
什么是查询缓存? 查询缓存就是将一次查询结果存储在内存中,假如下一次查询结果在内存中,就直接在内存中读取. 设计初衷 当然是提高性能,通过缓存来减少解析器.优化器.存储引擎的执行时间. MySQL查询 ...