Spring Taco Cloud——Controller的创建(含SpringMVC执行过程&SpringBoot&Spring三者解释及关联)
在记录这次控制器编写前,对于Spring的感觉就是经常提这样代码好简洁,这样好方便,这个是用来干嘛的诸如之类的话。
What is Spring ?这是我想问自己的,一直认为是简化代码利于工程的开源框架,还不够。里面包含的太多了,人称Spring全家桶可不是闹着玩的。。。。。。
毕竟入门,先来区分一下这三者:Spring MVC和Spring Boot都属于Spring,Spring MVC 是基于Spring的一个 MVC 框架,而Spring Boot 是基于Spring的一套快速开发整合包,详细点的话可以看简书上的这篇文章 https://www.jianshu.com/p/42620a0a2c33, 个人理解是Spring Boot 就是 Spring 的plus版本,那么SpringMVC呢?
- M 代表 模型(Model)
模型是什么呢?我想到了固定的这个词, 模型就是固定的数据,就是 dao,bean。这一层就是把相同的业务封装到一起,它的功能主要是做数据的持久化,就是跟数据库相关的操作。比如把老虎跟狮子的相关信息保存到数据库或从数据库取出或删除。 - V 代表 视图(View)
视图是什么呢? 就是网页, JSP,用来展示模型中的数据。用户可以通过可视化的页面把要请求的信息传递给后台然后返回想要的结果展示。 - C 代表 控制器(controller)
控制器是什么? 控制器的作用就是把不同的数据(Model),显示在不同的视图(View)上,Servlet 扮演的就是这样的角色。它就像是一个路由器,连接着视图页面和业务模块。根据不同的请求,它把用内户想要的信息从对应的业务模块获取然后反馈到不同的页面给用户或者是将请求转发给其他controller

package tacos.web; import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import javax.validation.Valid;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.validation.Errors;
import lombok.extern.slf4j.Slf4j;
import tacos.Ingredient;
import tacos.Ingredient.Type;
import tacos.Taco;
@Slf4j
@Controller
@RequestMapping("/design") //类级别注解
public class DesignTacoController { @GetMapping
public String showDesignForm(Model model) {
List<Ingredient> ingredients= Arrays.asList(
new Ingredient("MEDIUM","Medium",Type.COMPONENT),
new Ingredient("SMALL","Small",Type.COMPONENT),
new Ingredient("BIG","Big",Type.COMPONENT), //份量
new Ingredient("MILD","Mild",Type.FLAVOR),
new Ingredient("HOT","Hot",Type.FLAVOR),
new Ingredient("MEDIUM","Medium",Type.FLAVOR), //口味
new Ingredient("BBALL","Beefball",Type.SIDEDISH),
new Ingredient("FANS","Fans",Type.SIDEDISH),
new Ingredient("POT","Potato",Type.SIDEDISH),
new Ingredient("SAU","Sausage",Type.SIDEDISH),
new Ingredient("COR","Coriander",Type.SIDEDISH),
new Ingredient("COLA","Cola",Type.DRINK),
new Ingredient("JUICE","Juice",Type.DRINK),
new Ingredient("WATER","Water",Type.DRINK)
); Type[] types = Ingredient.Type.values();
for(Type type : types) {
model.addAttribute(type.toString().toLowerCase(),
filterByType(ingredients, type));
}
model.addAttribute("design",new Taco());
return "design";
} private List<Ingredient> filterByType(List<Ingredient> ingredients, Type type){
return ingredients
.stream()
.filter(x -> x.getType().equals(type))
.collect(Collectors.toList());
//stream方法获取指向当前Collection对象的流对象,filter将对流中元素进行过滤
//结合lambda表达式,需要在filter参数中实现一个类似于比较器的Predicate对象,返回一个boolean类型返回值
//只有返回为true的Collection中的元素才会进入到list中。
} @PostMapping
public String processDesign(Taco design) {
log.info("processing design:" +design);
return "redirect:/orders/current";
} }
这里首先想对几个注解做一下解释说明
@Sl4j:这是一个日志类库注解。
@Controller:这里想与@RestController用法做个对比,当你想要返回一个视图的时候应该用前者@Controller,而单纯的返回字符串应该用后者。有关JSON类型数据等自己在Spring中运用到再进行补充。
@RequestMapping(" "):这个开始我自动划到黑魔法,现在熟练度提升一点:当启动项目后,在浏览器地址栏访问8080时,所需要的路径,也就是后面应该跟的html文件名(也就是return 返回的视图名,这里特地注意:.html的文件名应该与前两者统一!!! 当初本人就是不细心花费了大半天时间才发现文件名手抖打错了)
其中的一些基础foreach,枚举泛型等在此就不过多阐述。还有倒数第二个方法可以留意一下,注释已经给出。
对于此项目这个控制器的讲解目前到这了,等用到后面,会对整个控制器来个大礼包。
现在都是逻辑处理,下一篇我们就可以验收一个小成果了(张伟别打我)
Spring Taco Cloud——Controller的创建(含SpringMVC执行过程&SpringBoot&Spring三者解释及关联)的更多相关文章
- 深入源码分析SpringMVC执行过程
本文主要讲解 SpringMVC 执行过程,并针对相关源码进行解析. 首先,让我们从 Spring MVC 的四大组件:前端控制器(DispatcherServlet).处理器映射器(HandlerM ...
- 浅谈SpringMVC执行过程
通过深入分析Spring源码,我们知道Spring框架包括大致六大模块, 如Web模块,数据库访问技术模块,面向切面模块,基础设施模块,核心容器模块和模块, 其中,在Spring框架的Web模块中,又 ...
- SpringMVC系列(十五)Spring MVC与Spring整合时实例被创建两次的解决方案以及Spring 的 IOC 容器和 SpringMVC 的 IOC 容器的关系
一.Spring MVC与Spring整合时实例被创建两次的解决方案 1.问题产生的原因 Spring MVC的配置文件和Spring的配置文件里面都使用了扫描注解<context:compon ...
- Spring Taco Cloud——design视图的创建(含thymeleaf模板遇到的一些小问题)
先来看下综合前两篇内容加上本次视图的成果 可能不是很美观,因为并没有加css样式,我想等整个项目有个差不多的功能实现后再进行页面优化,请谅解 下面我贴上自己定义修改过的Taco的design视图代 ...
- Spring Taco Cloud——配料表(Lombok的安装及其注解)
先简单概括下这个项目:外卖订餐平台Web,这个是承接我的这篇博文来续写的https://www.cnblogs.com/yycjavastudy/articles/12666104.html,在这一篇 ...
- Spring Boot 使用Java代码创建Bean并注冊到Spring中
从 Spring3.0 開始,添加了一种新的途经来配置Bean Definition,这就是通过 Java Code 配置 Bean Definition. 与Xml和Annotation两种配置方式 ...
- SpringMvc执行过程
--Test过程: 1. 先执行各种 Filter 2. HttpServlet.service(ServletRequest req, ServletResponse res) 3. HttpSer ...
- spring boot / cloud (十二) 异常统一处理进阶
spring boot / cloud (十二) 异常统一处理进阶 前言 在spring boot / cloud (二) 规范响应格式以及统一异常处理这篇博客中已经提到了使用@ExceptionHa ...
- spring boot&&cloud干货系列
接触spring boot也有些时日了,刚开始博主还想参照官方参考指南自己写一个系列的入门式的教程,包含spring boot的所有模块的用法,后来发现,有一大波优秀的系列文章和项目了,所以就没班门弄 ...
随机推荐
- 计算机网络原理实验_使用网络协议分析仪Wireshark
一.实验名称 使用网络协议分析仪Wireshark 二.实验目的: 1. 掌握安装和配置网络协议分析仪Wireshark的方法: 2. 熟悉使用Wireshark工具分析网络协议的基本方法,加深对协 ...
- 前后端分离基于Oauth2的SSO单点登录怎样做?
一.说明 单点登录顾名思义就是在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统,免除多次登录的烦恼:本文主要介绍跨域间的 前后端分离 项目怎样实现单点登录,并且与 非前后端分离 的差 ...
- span(行级元素)在不定高的div(块级元素)中垂直居中的方法
设置父级元素: align-items: center; display: flex;
- Linux中MySQL二进制安装步骤
MySQL二进制安装步骤 安装依赖环境 [root@node3 ~]# yum -y install libaio 将mysql-5.7.26-linux-glibc2.12-x86_64.tar.g ...
- 微信小程序开发工具报错对应的服务器证书无效
提示错误信息:“对应的服务器证书无效.控制台输入 showRequestInfo() 可以获取更详细信息.” 解决方法:详情 -->项目设置 --> 选择“不校验安全域名.TLS版本以及H ...
- Java多线程并发06——CAS与AQS
在进行更近一步的了解Java锁的知识之前,我们需要先了解与锁有关的两个概念 CAS 与 AQS.关注我的公众号「Java面典」了解更多 Java 相关知识点. CAS(Compare And Swap ...
- 图解I/O模型
本文带你鸟瞰I/O模型全貌,希望可以让你对I/O模型有一个直观的认识 什么是I/O?I/O的过程?同步阻塞 I/O同步非阻塞 I/OI/O多路复用异步I/O 什么是I/O? I/O就是计算机内 ...
- Mol Cell Proteomics. | 粪便微生物蛋白质的组成与饮食诱导肥胖倾向的关联研究
题目:Associations of the Fecal Microbial Proteome Composition and Proneness to Diet-induced Obesity 期刊 ...
- Block详解二(底层分析)
Block专辑: Block讲解一 MRC-block与ARC-block Block详解一(底层分析) 今天讲述Block的最后一篇,后两篇仅仅是加深1,2篇的理解,废话少说,开始讲解! __blo ...
- java 为什么重写equals一定要重写hashcode?
前言 最近复习,又看到了这个问题,在此记录和整理,通过例子来说明这种情况的原因,使大家可以清晰明白这个问题. 初步探索 首先我们要了解equals方法是什么,hashcode方法是什么. equals ...