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的所有模块的用法,后来发现,有一大波优秀的系列文章和项目了,所以就没班门弄 ...
随机推荐
- 看逐浪CMS技术小哥做SVG动画(附使用Bodymovin和Lottie将Adobe After Effects(AE)程式转为 HTML5/Android/iOS原生的动画全过程-即AE转svg\canvas\html5动画)
名词解解释 adobe After Effects AE:adobe After Effects,adobe公司的专业视频制作软件. Bodymovin插件预览 Bodymovin:是一个AE的插 ...
- mysql(8.0连接navicat发生的错误解决方法)
关于mysql(8.0连接navicat发生的错误解决方法)数据库安装图形化界面无法更改加密的方式导致无法连接问题为解决; Alter user 'root'@'localhost' identifi ...
- PageRank 算法初步了解
前言 因为想做一下文本自动摘要,文本自动摘要是NLP的重要应用,搜了一下,有一种TextRank的算法,可以做文本自动摘要.其算法思想来源于Google的PageRank,所以先把PageRank给了 ...
- 使用PageHelper插件分页时,如何对对象进行转换以及添加属性
一.插件介绍 PageHelper是针对Mybaits的分页插件,支持任何复杂的单表.多表分页. 二.基本用法 以springboot为例,有两种方式配置,一种是传统的,引入依赖,编写配置类:一种是使 ...
- nuxt创建项目的步骤
nuxt创建项目的步骤 1.基本步骤 // 创建package.json依赖管理文件 npm init -y // 在package.json文件中添加运行nuxt的命令,之后npm run dev启 ...
- 都2020年了 还要学JSP吗?
前言 2020年了,还需要学JSP吗?我相信现在还是在大学的同学肯定会有这个疑问. 其实我在18年的时候已经见过类似的问题了「JSP还应该学习吗」.我在18年发了几篇JSP的文章,已经有不少的开发者评 ...
- Caused by: java.lang.IllegalArgumentException
Caused by: java.lang.IllegalArgumentException 是因为jdk较高而项目需要的是低版本的问题 1.将idea或idea里的语言级别调到适合自己项目的版本比如安 ...
- IdentityServer4实现.Net Core API接口权限认证(快速入门)
什么是IdentityServer4 官方解释:IdentityServer4是基于ASP.NET Core实现的认证和授权框架,是对OpenID Connect和OAuth 2.0协议的实现. 通俗 ...
- 在eclipse里面给maven项目打包
eclipse中的“maven install”是用maven打包工程的意思. mvn install 是将用户打包好的jar包安装到本地仓库中,一般没有设置过的话默认在用户目录下的 .m2\下面. ...
- 题解 P2755 【洗牌问题】
这是本人的第一篇题解 请多多宽恕 这一道题其实不要用数组 我们来观察一下n=3时的情况: 原: 1 2 3 4 5 6 4 1 5 2 6 3 2 4 6 1 3 5 1 2 3 4 5 6 我们去观 ...