2023年3月

转:14时就用spring 4, 18年springboot 2.0

Spring1.02004年3月24   
包含IoC,AOP,XML配置
参考https:
//spring.io/blog/2004/03/24/spring-framework-1-0-final-released
Spring
2.02006年10月3
参考https:
//spring.io/blog/2006/10/03/spring-2-0-final-released
Spring
2.52007年11月19
支持注解,减少了xml配置
参考https:
//spring.io/blog/2007/11/19/spring-framework-2-5-released
Spring
3.02009年12月16
完全利用了Java5中的改进,并为 JEE6 提供了支持。支持Java配置
参考https:
//spring.io/blog/2009/12/16/spring-3-0-0-is-now-available
Spring
4.02013年11月1
完全支持 JAVA8
参考https:
//spring.io/blog/2013/11/01/spring-framework-4-0-rc1-available
Spring
5.02017年9月28
参考https:
//spring.io/blog/2017/09/28/spring-framework-5-0-goes-ga
What's New in Version
5.0JDK8+ and Java EE 7+ Baseline(JDK8和Java EE7为基础。兼容JDK9和Java EE8)Removed Packages,Classes and Methods(移除部分包,类和方法)
General Core Revision(核心版本的升级)
Core Container(核心容器升级,支持@Nullable注解)
Spring WebFlux(响应式编程)
Kotlin support(支持Kotlin)
Testing Improvements(支持Junit5)

SpringBoot
1.02014年1月22
参考https:
//spring.io/blog/2014/01/22/spring-boot-1-0-0-rc1-released
SpringCloud
1.02015年3月14
参考https:
//spring.io/blog/2015/03/04/spring-cloud-1-0-0-available-now
SpringBoot
1.2.52015年7月2
参考https:
//spring.io/blog/2015/07/02/spring-boot-1-2-5-released
SpringBoot
1.3.52016年5月10
参考https:
//spring.io/blog/2016/05/10/spring-boot-1-3-5-released
SpringBoot
1.4.02016年7月28
参考https:
//spring.io/blog/2016/05/10/spring-boot-1-3-5-released
SpringBoot
1.5.12017年1月30
参考https:
//spring.io/blog/2017/01/30/spring-boot-1-5-1-released
SpringBoot
1.5.62017年7月27
参考https:
//spring.io/blog/2017/07/27/spring-boot-1-5-6-available-now
SpringBoot
1.5.82017年10月17
参考https:
//spring.io/blog/2017/10/17/spring-boot-1-5-8-available-now
SpringBoot
2.0.02018年3月1
参考https:
//spring.io/blog/2018/03/01/spring-boot-2-0-goes-ga
SpringBoot
2.2.02019年10月16
参考https:
//spring.io/blog/2019/10/16/spring-boot-2-2-0SpringBoot2.2.12019年11月7
参考https:
//spring.io/blog/2019/11/07/spring-boot-2-2-1-available-now

1)spring 1.x
  在spring1.x时代,都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,需要频繁的在
java类和xmlwenjianz文件中切换
2)spring 2.x
  随着jdk1.5带来的注解支持,spring2.x可以使用注解对bean进行申明和注入,大大的减少了xml配置,简化了项目的开发
最佳的配置方法:
1.应用的节本配置用xml,如数据源、资源文件等。
        
2.业务开发用注解,如service中注入bean等3)spring 3.x
  在spring3.x版本的时候,Spring3.x开始提供了Java配置方式,使用Java配置方式可以更好的理解你配置的Bean,主要区别spring2.x的地方如下
  
1. 核心API更新到JAVA5.0,即采用了泛型
  
2. Spring表达式语言SpEl(Express Language)
  
3.可通过Java类提供IOC配置信息
  XML配置方式,基于注解的配置方式,Spring3.0提供了基于Java类的配置方式。而最新基于Java类的配置方式非常灵活。
  
4. 通用类型转换系统和属性格式化系统
  
5.数据访问层新增oxm(Object to xml,对象xml映射):通过元数据对象和xml转化的映射
  
6.web层的增强:2.5版本中的注解如:@Controller,@Request Mapping等。新增了@CookieValue,@RequestHeaders4)spring4.x
  从spring4.x和springboot都推荐使用Java配置方式

//

Spring历史版本变迁和如今的生态帝国 - 云+社区 - 腾讯云 --不错
https://cloud.tencent.com/developer/article/1025723

//  Spring核心功能指南-1-Spring功能介绍-肖海鹏的在线视频教程 --这个视频的12分开始有段描述很不错,
https://edu.csdn.net/course/play/3057/50874?spm=1002.2001.3001.4143

J2EE sun定义的 必须用JEB
jsp sevlet JDBC 模式适合企业开发吗, 简单的j2ee的开发

Spring是完美的框架吗
老师是 9几年毕业的,那时候 C
++框架,C++平台大行其道
97年出来的java 2000年后市场越来越大。
95~2000年 C++比较强势的情况下,后来回看C++出了很多问题, 微软把VS c++转向 dot net ,现在高校学.net也很少了。
spring向j2ee发起了挑战,那么spring也不是完美的

J2EE是什么,主要包括哪些技术 - lanfeng521 - 博客园 ---初略看一下就好
https://www.cnblogs.com/zhshero/p/10390167.html

j2EE通俗bai的理解为开发网站的就du是,j2SE就是开zhi发桌面应用程序dao的。
包含zhuan的技术嘛,主要的就是shu开发网站需要的一些技术啦
比如:servlet,jsp,javaBean 框架:spring hibernate struts ibatis webwork

//==============
应该是2008年前的事情了。 大致看一下就好。

转发: Spring可能会越来越主流?_曲奇-CSDN博客
https://blog.csdn.net/yangxt/article/details/5397135?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~baidu_landing_v2~default-5-5397135.nonecase&utm_term=spring%20%E4%BB%80%E4%B9%88%E6%97%B6%E5%80%99%E5%BC%80%E5%A7%8B%E6%B5%81%E8%A1%8C%E7%9A%84&spm=1000.2123.3001.4430

Spring 自从2003年发布以来,一直是Java开源框架的奇迹之一。从2000年开始,伴随着B/S架构逐渐引入企业应用软件开发的领域,Java就逐渐成为企业应用开发的主流技术,一直到2003年,Struts+EJB一直是Java技术架构的不二选择,然而这一切随着2003年Spring以 without EJB的面目出现之后,一切都开始改变。

大概从2003年下半年开始,Spring+Hibernate就开始甚嚣尘上,似乎那时候的Spring和Hibernate尚且不足以动摇J2EE规范以EJB为核心的领袖地位。但是2004年5月份,吸收了 Spring/Hibernate框架优点的EJB3 JCP委员会的成立,事实上宣判了Spring对EJB2的终结,EJB3则更像是Vendor们的一种自救行为。

2004年到2006 这三年时间以来,Spring取得了相当辉煌的成就,不但将EJB2赶进历史,而且牢牢确立了Spring作为Java企业应用开发的主流地位。而今,甚至对技术比较保守的金融电信行业,也开始言必称Spring,Spring已经成为Java框架的事实标准。

在2004年5月份之后,Hibernate Team开始和Spring公然决裂,这个事情放在两年多以后的今天来看,原因是昭然若揭的,背靠JBoss的Hibernate Team已经成为EJB3规范的一部分,而JBoss希望力推的以EJB3为核心的Java架构来成为未来的企业应用主流标准,这种情况演变至今,变成了 Springframework和JBoss Seam的两种不同技术架构的竞争关系。

2004年5月份,EJB3规范的起步,对Spring未来其实有很大的威胁,但是EJB3规范历经两年时间的难产,终于在2006年5月正式发布之时,已经为时过晚了,抬眼望去,已尽是spring的天下。

有意思的是,大致展望一下未来,Java的企业应用开发还能遵循Sun和JCP制订的Java EE规范的道路走下去吗?如果不是这样,那么未来道路是什么呢?

观察一下Java社区几股大的势力,会发现一些有意思的现象:

IBM 和BEA是Java社区的领导者,从2004年开始,IBM和BEA开始大肆宣传SOA,将他们的目光从应用服务器领域挪到了松藕合企业服务领域,开展 SOA商业战略。与此同时,EJB3专家委员会的领导者也悄然变成了JBoss和Oracle,是IBM和BEA无力争取吗?当然不是。IBM和BEA已经看到了应用服务器市场和底层框架平台即将被开源占领,商业价值萎缩,因而审时度势进行战略转型。一方面押宝SOA战略,大肆炒热和培育SOA市场,另一方面也积极占领开源市场,IBM放出来WebSphere社区版本-Apache Geronimo,BEA干脆和Spring的咨询公司interface21合作,提供spring框架在WebLogic上的商业技术支持,如今 EJB3对于他们来说已经形同鸡肋,就抛给别人嚼吧。

将EJB3当块宝的自然是应用服务器市场的跟随者JBoss和Oracle,一方面凭借ORM的先天优势,另一方面有出头机会也不能放过,EJB3委员会几乎成了JBoss和Oracle的天下。特别是JBoss,更加积极推出 JBoss Seam框架,希望确立以JSF+EJB3的架构树立Java开发的标准,用以取代Struts/Spring/Hibernate的流行组合,因而开启了EJB3和Spring 正面交锋的战争。

Java Vendor中另外一股势力Sun公司这两年则一直自顾不暇,在应用服务器领域几乎退出市场,直到最近才搞出来一个Glassfish,在开发框架领域也一直毫无建树,推出的JSF至今还很不成熟,难担大任,也许Sun都去忙着开源Solaris和JVM源代码了。

几个大的Vendor或战略转型,或自顾不暇,或忙于收购(Oracle),Java开发领域的主战场被打扫一空,对决的双方换成了Spring和JBoss。对决的武器则是spring vs Seam。

Spring 代表了不遵循通用标准,自己制订游戏规则,不依赖容器的一方;JBoss代表了遵循通用标准,但是锁定容器的一方。这场对决从2004年5月就开始上演,未来很长时间也会继续下去。不过Spring已经站在优势很大的地位上了。我个人觉得Spring会胜出这场对决,而Java企业应用开发的主流技术将倒向Spring这一边,而Vendor们官方制订的标准将被开发人员可怜的遗弃到一边。开源技术开始决定Java企业开发的未来走向。

大致对比一下两者:Spring vs EJB3,就会发现Spring从功能上面已经胜出很多了:

1、IoC容器spring胜出

Spring的IoC容器很强大,其bean管理功能超过了目前EJB3容器,配置方面Spring稍微复杂一些。不过对于全局性配置来说,XML要优于EJB3的annotation。

2、AOP能力Spring胜出

EJB3目前提供的AOP功能非常简单,本来已经无法和Spring相比,至于集成AspectJ的Spring2.0,就更加望尘莫及了。

3、事务管理方面EJB3稍微领先

Spring提供了很棒的本地事务模型,也可以集成JTA,但是不支持分布式事务,当然这种场景也非常罕见。

4、Web框架spring胜出

EJB3 标准集成JSF,但是JSF并不成熟,和AJAX配合度也不好。Spring可以灵活集成各种Web框架和模板语言,自身也提供了相当强大的MVC框架,要是这还觉得不够,那么spring webflow,portlet support都拿出来,那么EJB3就必败了。

5、远程访问支持,大致持平

EJB3继承了传统的EJB远程访问能力,Web Services支持也不错;不过Spring提供了更多更灵活的选择,Java RPC,HTTP Invoker,Hessian/Burlap,WebServices。

6、框架集成能力,spring胜出

这是spring的传统优势项目,只要看看spring modules项目,看看n多第三方spring支持,就会发现spring现在的群众基础多么好,集成工作流,spring modules已经提供了方便的模板类,集成规则引擎,Cache,CMS,脚本语言,异步任务,安全验证框架。。。。。。EJB3有点望尘莫及的味道

7、JMS,JMX,JCA等,EJB3领先一步

这些传统EJB优势项目往往应用的不太多,EJB3仍然是领先的。不过令人侧目的是,Spring最近几个版本在连续追赶EJB这些传统优势领域,到 Spring2.0为止,其JMS,JMX,JCA支持已经相当不错了,可以说传统EJB能够做的,现在Spring也可以做得到,为Spring一统江湖扫清了最后的障碍。

这几年除了Spring框架自身不断完善和延伸到传统应用领域,围绕在Spring周围的第三方框架也是越来越丰富,EJB3在annotation方面有些独到的优势,在一些传统领域,还领先spring,但是总体来说,EJB3为核心的J2EE5.0规范很难和 Spring现在的2.0相匹敌,更何况Java的主力Vendor早已醉翁之意不在这里了,单凭JBoss的Seam,难以战胜spring。

觉得Spring可能会越来越主流,甚至开始引领Java企业开发的未来发展道路,J2EE就靠边站吧,也许Java社区也到了开源社区说了算的时代了。

//==========end

//--非常不错,

Spring的诞生史 - 环信
https://www.easemob.com/news/1213

// 转

Spring核心是什么

Spring出现的原因?
Spring出现的原因 解除耦合
软件开发的开闭原则:通过多态实现,要么子类重写父类,要么增加方法
提高抽象层次;
提高抽象层次的方法
把子类对象赋给父类对象进行使用的动态多态
注入Injection:某一个类想要什属性,通过set方法给他 就叫注入
依赖注入 Depenency Injection
=DI 有set就能活 没有就错误
配置文件(反射)

Spring如何解除耦合
解耦合:首先解除逻辑耦合
mvc模式第一次解除了逻辑耦合

spring的IOC是进行深度解耦
日志:用来保持程序的健壮性,就是程序的运行记录

代理需要在jdk1.5以上版本使用
jdk代理是基于反射的没有反射就没有办法通用
调用代理类的的任何方法,都会执行到invoke方法
代理是模式
代理机制其实真正的代理的是方法
代理:proxy
代理的本质就是原产品不动,不做任何改变
要增值
要包装
代理分类:
一.静态代理:门面模式或装饰模式
缺点:需要为每一个被代理的方法都写一个代理方法,修改的时候特别值复杂,不灵活
二.动态代理
1.jdk动态代理:缺点:要想代理对象,被代理对象必须有接口,否侧不能代理2.CGLIB代理:优点:在被代理类没有接口的情况下也能够被代理,实际就是为当前类生成一个子类
代理类和被代理类都需要实现同一个接口,代理类中包含一个被代理类的对象,可以提供两种方式把被代理对象赋给代理对象
调用被代理类,实现真正的逻辑,在自己的里面实现额外逻辑.

代理最终的要求就是简单通用灵活

Spring核心(重点来了!!!!)
Spring是一个无侵入式的轻量级开源框架
Spring两大特性 :
1.IOC:控制反转
IOC作用:解除类与类之间的关系耦合
解除耦合的方式用了四个技术点:

配置

容器

反射

注入(DI):利用set方法或者构造器给属性赋值
2.AOP:面相切面编程
作用:为了解除业务逻辑耦合,例如耦合或者数据业务逻辑日志业务
AOP实现原理是基于代理的
Spring进行内部实现的时候 ,会检测是否存在接口,存在时选择jdk动态代理,不存在选择CGLIB代理

Spring类似一个管家,后期几乎所有内容都交给Spring管理,View层Spring不管理,与java相关的全部管理.(Spring容器)

Spring的核心思想是解除程序中的耦合(解除了业务逻辑耦合,解除了类与类之间的关系耦合)
轻量级与重量级的区分:
1.性能开销2.框架本身的大小问题3.使用的难易程度

Spring中所有的行为都是基于Spring能够管理所有的类

Spring也有持久层框架,但是因为性能不强,所以没有人用,用来给hibernate和mybitas支持
Spring对web框架也是有支持的
Spring还是一个mvc结构的框架
Core解除的是类级别的耦合
AOP解除的是方法级别的耦合

IOC控制反转 Inversion Of Control
高层模块不应该依赖底层模块(如Action依赖Dao层)
实现必须依赖抽象,而不是是抽象依赖实现
依赖注入:Dependency Injection
DI是IOC的核心实现原理
通俗的说就是利用set方法或者构造器给属性赋值

搭建Spring环境:
1.加入jar包2.写配置文件:applicationContext.xml 必须放在Src下 可以更改名字一般叫Spring.xml
一个Spring可以对应多个XMl文件,配置文件的划分是根据业务逻辑划分的

跟标签里写东西是Schema

Spring的核心是一个context容器
想要什么对象就在spring中配置这个对象
Spring会自动创建对象并且进行初始化

注入类型分为三类:
Type1 侵入式(依赖Spring)
Type2 (set
/get) 和type3(构造器注入)是非侵入式

Spring中的接口是为了提高抽象层次,是变量接收的一个中介,所以Srping不需要管理接口
所谓的组件就是可以直接实例化,可以直接用的
构造器注入 里面的属性 ref
=references引用 index要赋值属性的下标,从0开始
构造器注入唯一的优点就是时效性好,创建对象时直接赋值.
构造器注入作为了解 不需要掌握
构造器和set
/get方法同时存在时取决于set/get方法

//杂乱摘抄:

说得更简便一些:Spring 最初利用“工厂模式”(DI)和“代理模式”(AOP)解耦应用组件。大家觉得挺好用,于是按照这种模式搞了一个 MVC框架(一些用Spring 解耦的组件),用开发 web 应用( SpringMVC )。然后有发现每次开发都写很多样板代码,为了简化工作流程,于是开发出了一些“懒人整合包”(starter),这套就是 Spring Boot。

所以,用最简练的语言概括就是:
Spring 是一个“引擎”;
Spring MVC 是基于Spring的一个 MVC 框架 ;
Spring Boot 是基于Spring4的条件注册的一套快速开发整合包。

2、Spring MVC是基于 Servlet 的一个 MVC 框架 主要解决 WEB 开发的问题因为 Spring 的配置非常复杂各种XML、 JavaConfig、hin处理起来比较繁琐于是为了简化开发者的使用,从而创造性地推出了Spring boot,约定优于配置简化了spring的配置流程。

Spring MVC 个人理解:对一个网络请求基于servlet 改善、分层。里面有多个hashMap 关联着请求路径和处理的方法。...哎说不下去了


//这文章就够清晰了。

Spring、SpringMVC和SpringBoot看这一篇就够了! - 知乎  https://zhuanlan.zhihu.com/p/63117304

摘抄如下:

一、概念

1、Spring

Spring是一个开源容器框架,可以接管web层,业务层,dao层,持久层的组件,并且可以配置各种bean,和维护bean与bean之间的关系。其核心就是控制反转(IOC),和面向切面(AOP),简单的说就是一个分层的轻量级开源框架。

2、SpringMVC

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。SpringMVC是一种web层mvc框架,用于替代servlet(处理|响应请求,获取表单参数,表单校验等。SpringMVC是一个MVC的开源框架,SpringMVC=struts2+spring,springMVC就相当于是Struts2加上Spring的整合。

3、SpringBoot

Springboot是一个微服务框架,延续了spring框架的核心思想IOC和AOP,简化了应用的开发和部署。Spring Boot是为了简化Spring应用的创建、运行、调试、部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置。提供了一堆依赖打包,并已经按照使用习惯解决了依赖问题--->习惯大于约定。

二、原理和结构

1、Spring的原理和组成

Spring为简化我们的开发工作,封装了一系列的开箱即用的组件功能模块,包括:Spring JDBC 、Spring MVC 、Spring Security、 Spring AOP 、Spring ORM 、Spring Test等。如下图:

简化的理解图:

2、SpringMVC的原理和组成

从上图中可以看出:SpringMVC是属于SpringWeb里面的一个功能模块(SpringWebMVC)。专门用来开发SpringWeb项目的一种MVC模式的技术框架实现。其原理如下:

MVC:Model(模型)、VIew(视图)、Controller(控制器);我们从开始接触并学习javaWeb开发就知道MVC这一种架构,如早起的Sturts1、Sturts2等。

3、SpringBoot的原理和特性

Spring Boot
基本上是
Spring
框架的扩展,它消除了设置
Spring
应用程序所需的
XML配置
,为更快,更高效的开发生态系统铺平了道路。

Spring Boot
中的一些特点:

  1. 创建独立的
    spring
    应用。
  2. 嵌入
    Tomcat
    ,
    Jetty
    Undertow
    而且不需要部署他们。
  3. 提供的“starters” poms来简化
    Maven
    配置
  4. 尽可能自动配置
    spring
    应用。
  5. 提供生产指标,健壮检查和外部化配置
  6. 绝对没有代码生成和
    XML
    配置要求。

组成和结构如下图:

从图中可以看出SpringBoot是包含了Spring的核心(IOC)和(AOP);以及封装了一些扩展,如Stater:

三、区别与总结

1.简单理解为
:Spring包含了SpringMVC,而SpringBoot又包含了Spring或者说是在Spring的基础上做得一个扩展。


2、关系大概就是这样

spring mvc < spring < springboot

3、Spring Boot
对比
Spring
的一些优点包括

  • 提供嵌入式容器支持
  • 使用命令
    java -jar
    独立运行jar
  • 在外部容器中部署时,可以选择排除依赖关系以避免潜在的jar冲突
  • 部署时灵活指定配置文件的选项
  • 用于集成测试的随机端口生成

4、结论

Spring Boot
只是
Spring
本身的扩展,使开发,测试和部署更加方便。

后面放有 DispatcherServlet类中的属性beans:的解析


Java Web 面试中关于Spring MVC必问题,不看血亏! - 码农小胖哥 - 博客园
https://www.cnblogs.com/felordcn/p/12142566.html

Spring MVC是Spring构建在Servlet API上的Web框架。目前大部分的Java Web 开发已经使用Spring MVC 来做。它提供了模型 - 视图 - 控制器架构,可用于开发灵活的Web应用程序。

为什么选择Spring MVC

Spring MVC 实现了一些明确而且相对低耦合的概念,可以让开发者很容易开发和测试他们的Web应用。这些概念有:

  • Dispatcher Servlet ——核心Servlet前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自己定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理
  • Controllers ——具体的业务控制器,处理具体请求的业务并响应
  • View Resolvers ——视图解析器,用于将响应的逻辑视图解析为真正的视图View对象
  • Views, Models ——Views的主要作用是用于处理响应视图,然后返回给客户端,Models主要用于传递控制方法处理数据到响应视图页面
  • ModelAndView ——Model 和 View 的复合体
  • Model and Session Attributes ——对模型属性和会话属性的处理

这些概念都是完全独立而且职责单一。因此Spring MVC给了我们很大的灵活性。它基于接口(提供的实现类),我们可以使用自定义接口配置框架的每个部分。另一个重要的事情是我们不再依赖于特定的视图技术(例如,JSP),可以选择我们最复合业务的视图技术。此外,我们不仅仅在Web应用程序开发中使用Spring MVC,也可以用它创建RESTful Web服务。

SpringMVC的流程

  1. 用户发送请求至前端控制器DispatcherServlet;
  2. DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
  3. 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有)一并返回给DispatcherServlet;
  4. DispatcherServlet 调用 HandlerAdapter处理器适配器;
  5. HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);
  6. Handler执行完成返回ModelAndView;
  7. HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
  8. DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
  9. ViewResolver解析后返回具体View;
  10. DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
  11. DispatcherServlet响应用户。

流程图:

@Autowired 注解的规则是什么

@Autowired
注解可以使用在成员属性上或方法上,按类型注入Spring bean。这个注解允许Spring解析协作的bean并注入到你业务需要的bean中。

简述一下注解ModelAttribute

@ModelAttribute
注解是Spring MVC中最重要的注解之一。它将方法参数或方法返回值绑定到命名中的Model属性中,然后将其公开给Web视图。如果我们在方法级别使用它,则表明该方法的目的是添加一个或多个模型属性。另一方面,当用作方法参数时,它表示应从模型中检索参数。如果不存在,我们应该首先实例化它,然后将其添加到Model中。一旦出现在模型中,我们应该填充所有具有匹配名称的请求参数的参数字段。

@Controller和@RestController之间有什么区别

@Controller

@RestController
注释之间的主要区别在于
@ResponseBody
注释自动包含在
@RestController
中。这意味着我们不需要使用
@ResponseBody
来注释我们的处理程序方法。

描述一下 @PathVariable

我们可以使用
@PathVariable
注解来从请求URI中提取一个特定模版变量的值来作为我们的请求参数。例如 从
/user/123
提取
123

/user/{id}
控制器来获取一个
id=123
的数据映射关系。需要特别指出的是通过此注解获取的值不会被编码。具体可通过我的文章来获取原因。

如何在Spring MVC中校验参数

Spring MVC 默认支持JSR-303校验规范 。并在Spring-Boot-starter-web中提供了JSR-303规范实现Hibernate Validator。我们可以使用它来进行参数校验。详情可查看我的文章。

@RequestBody 和 @ResponseBody 是干嘛用的

  • @RequestBody
    注解用于控制器方法参数上,目的是将Http 请求体转换为领域对象(请求参数)。Spring 通过
    HttpMessageConverter
    将请求体反序列化到Java对象中,默认使用jackson类库反序列化。
  • @ResponseBody
    注解使用于Spring MVC控制器中的处理程序方法上,它表明我们将把方法的返回类型直接写入HTTP响应主体而不会将它放在Model中,同样不会将其解释为视图名称。

Spring MVC 拦截器有什么用怎么用

Spring MVC拦截器允许我们拦截客户端请求并在三个地方处理它 - 在处理之前,处理之后或完成之后(在呈现视图时)。拦截器切面处理一些公共逻辑而避免重复处理程序代码(如日志记录),也可以用来更改Spring模型中全局使用的参数。通过以下方式:

  • org.springframework.web.servlet.handler.HandlerInterceptorAdapter
    ——继承该类
  • org.springframework.web.servlet.HandlerInterceptor
    ——实现该接口

如何全局处理控制器异常?

通过
@ControllerAdvice
(也可使用
@RestControllerAdvice
)注解和
@ExceptionHandler
注解组合,通过在方法入参中捕获异常进行处理,举例如下:

@Slf4j
@RestControllerAdvice("cn.felord.manage.api")
public class GlobalExceptionControllerAdvice {

@ExceptionHandler(NullPointerException.class)
public Rest nullPointHandler(HttpServletRequest request, NullPointerException e) {
log.error("空指针啦,赶紧关注公众号:Felordcn", e);
return RestBody.failure(-1, "null point exception");
}
}

如何处理Spring MVC 中的跨域问题?

Spring MVC 解决跨域问题主要有以下种办法:

  • 通过Spring MVC 拦截器来处理,同理servlet中的
    filter
    也可以处理。
  • 通过在控制层方法使用
    @CrossOrigin
    注解。 请注意该方案需要在Spring MVC 4.x 以上。
  • 通过在Spring MVC xml配置文件中的

    标签中配置。
  • 通过
    WebMvcConfigurer#addCorsMappings(CorsRegistry)
    来配置。
    如果想具体深入可通过公众号:Felordcn 来获取具体的教程。

如何格式化Spring MVC如参参数?

一般可通过两种方式:

    • 实现
      org.springframework.core.convert.converter.Converter<s,t>
      ,并将实现注入Spring容器中。
    • 实现
      org.springframework.format.Formatter
      ,并将实现注入Spring 容器中。


转: SpringMVC实现原理及详解_yanweihpu的博客-CSDN博客
https://blog.csdn.net/yanweihpu/article/details/80366218

DispatcherServlet类中的属性beans:

HandlerMapping:
用于handlers映射请求和一系列的对于拦截器的前处理和后处理,大部分用@Controller注解。

HandlerAdapter:
帮助DispatcherServlet处理映射请求处理程序的适配器,而不用考虑实际调用的是 哪个处理程序。

HandlerExceptionResolver:
处理映射异常。

ViewResolver:
根据实际配置解析实际的View类型。

LocaleResolver:
解决客户正在使用的区域设置以及可能的时区,以便能够提供国际化视野。

ThemeResolver:
解决Web应用程序可以使用的主题,例如提供个性化布局。

MultipartResolver:
解析多部分请求,以支持从HTML表单上传文件。

FlashMapManager:
存储并检索可用于将一个请求属性传递到另一个请求的input和output的FlashMap,通常用于重定向。

在Web MVC框架中,每个DispatcherServlet都拥自己的WebApplicationContext,它继承了ApplicationContext。WebApplicationContext包含了其上下文和Servlet实例之间共享的所有的基础框架beans。

  • HandlerMapping:


HandlerMapping接口处理请求的映射

HandlerMapping接口的实现类:

SimpleUrlHandlerMapping类
通过配置文件把URL映射到Controller类。

DefaultAnnotationHandlerMapping类通过注解把URL映射到Controller类。

  • HandlerAdapter:


HandlerAdapter接口-处理请求映射

AnnotationMethodHandlerAdapter:通过注解,把请求URL映射到Controller类的方法上。

  • HandlerExceptionResolver


HandlerExceptionResolver接口-异常处理接口

SimpleMappingExceptionResolver通过配置文件进行异常处理。

AnnotationMethodHandlerExceptionResolver:通过注解进行异常处理。

  • ViewResolver:

ViewResolver接口解析View视图。

UrlBasedViewResolver类 通过配置文件,把一个视图名交给到一个View来处理。

SpringMVC基础配置(通过注解配置,非xml配置)_江南一点雨的专栏-CSDN博客
https://blog.csdn.net/u012702547/article/details/53674867

从创建一个项目开始,一步步,多看 并且有两个代码下载,

添加依赖库
SpringMVC配置
Web配置
创建一个简单控制器
部署项目并运行

SpringMVC零xml配置原理 - 路仁甲 - 博客园
https://www.cnblogs.com/lusaisai/p/13121668.html

 //内嵌tomcat
        Tomcat tomcat = new Tomcat();
但是,这种方式有个问题,就是无法访问静态资源,那么springboot是怎么实现静态资源访问的呢,我们后续会专门写一篇文章解释,在此先记录一下。
本文大致讲到如何慢慢去掉xml,可以看看

如何用Java类配置Spring MVC(不通过web.xml和XML方式) - 大象O无形 - 博客园 ---可以忽略
https://www.cnblogs.com/chry/p/6239510.html

https://github.com/EOSIO/eosjs

代码git下载到本地来,npm i  初始化

 F:\Projects\Web\eosjs>npm i
npm WARN deprecated har-validator@
5.1.5: this library is no longer supported
npm WARN deprecated resolve-url@
0.2.1: https://github.com/lydell/resolve-url#deprecated
npm WARN deprecated urix@
0.1.0: Please see https://github.com/lydell/urix#deprecated> cypress@7.5.0 postinstall F:\Projects\Web\eosjs\node_modules\cypress> node index.js --exec install

Installing Cypress
(version: 7.5.0)✔ Downloaded Cypress
✔ Unzipped Cypress
✔ Finished Installation C:
\Users\yc\AppData\Local\Cypress\Cache\7.5.0You can now open Cypress by running: node_modules\.bin\cypress open

https:
//on.cypress.io/installing-cypress> eosjs@22.0.0 prepare F:\Projects\Web\eosjs> npm runbuild> eosjs@22.0.0 build F:\Projects\Web\eosjs> rimraf dist && tsc -p ./tsconfig.json && node scripts/copy-ripe-md.js

npm notice created a lockfile as package-lock
.json. You should commit this file.npm WARN notsup Unsupported enginefor cypress@7.5.0: wanted: {"node":">=12.0.0"} (current: {"node":"10.18.1","npm":"6.13.4"})npm WARN notsupNot compatible with your version of node/npm: cypress@7.5.0npm WARN notsup Unsupported enginefor ts-loader@9.2.3: wanted: {"node":">=12.0.0"} (current: {"node":"10.18.1","npm":"6.13.4"})npm WARN notsupNot compatible with your version of node/npm: ts-loader@9.2.3npm WARN notsup Unsupported enginefor eslint-plugin-jsdoc@34.8.2: wanted: {"node":">=12"} (current: {"node":"10.18.1","npm":"6.13.4"})npm WARN notsupNot compatible with your version of node/npm: eslint-plugin-jsdoc@34.8.2npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^2.1.2 (node_modules\jest-haste-map\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform
for fsevents@2.3.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})added1069 packages from 578 contributors and audited 1074 packages in 619.668s61 packages are looking forfundingrun `npm fund` fordetails

found
0vulnerabilities

PS F:
\Projects\Web\eosjs>

EOSJS中文手册【V20】 - 汇智网
/card/c/eosjs-manual/   居然不给保存 这个网址

eosjs 文档(介绍) - SegmentFault 思否
https://segmentfault.com/a/1190000017550656