SpringMVC 入门进阶

根据老师上课内容,自己对于学习的整理

Spring总结

IOC-DI

IOC:控制反转 对象的生命周期由Spring容器管理

xml配置文件的写法 bean标签 id/class xml容器的实现类

注解写法@bean 配合类

单例多例问题 默认单例对象 @Scope('prototype')多例对象

懒加载 @Lazy 用户使用时创建

生命周期方法 对象创建(无参构造)/对象初始化(@Postxxx)/业务调用/对象销毁(@Prexxx)

DI:依赖注入 为对象的属性赋值!

简单属性赋值:@Value注解

引用赋值:@Autowired1.默认按照类型匹配2.按照名称匹配

注入方式:1.set注入2.构造方法注入3.工厂模式注入(一定可以创建出来对象)

AOP

面向切面编程 在不修改源码的条件下对方法进行扩展 解决了业务的耦合性

底层核心机制:动态代理机制 JDK/CGLib动态代理

关键词

        1.切入点表达式:如果用户调用满足切入点表达式 则创建代理对象,执行AOP的通知

        2.通知:对业务的扩展5哥通知 环绕通知可以对方法进行控制

        3.连接点:用户调用的方法满足切入点表达式 则该方法称作连接点。

Spring框架优势

        1.Spring框架的设计让程序从底层到业务实现了松耦合

        2.Spring基于这样的设计思路,可以整合其他的第三方框架,使得程序可以以统一的方式进行调用

SpringMVC

SpringMVC是Spring框架后续开发的web模块,主要负责与前端用户进行交互

SpringMVC基于Servlet进行开发的框架,目的简化前后端的调用

Servlet

Servlet是java针对前后端交互,开发的一种调用的机制

弊端:

一个业务需求 就需要准备一个Servlet数量繁多

需要编辑大量的配置文件web.xml开发繁琐

从servlet中获取的参数都是String数据类型,需要手动的转化类型

Servlet只提供了get/post请求类型,不满足当下的需求

注意事项:

开发时完毕注意包路径在著启动类的同包及子包下

现在开发一般都使用前后端分离的方式,所以服务器的返回的一般都是JSO串

每次编辑完成代码,需要重启tomcat服务器

注解:

@RequetMapping("/路径")

负责用户的路径请求与后台服务器之间的映射关系

如果请求路径不匹配,则用户报错404

@ResponseBody

作用:讲服务器的返回值转化为JSON串,如果服务器返回的是String类型,则按照自身返回

 因为现在时前后端分离,所以已经不走视图解析器了

SpringMVC底层实现原理

 重要组件:

1.前端控制器,DispatcherServlet 获取和响应请求

2.处理器映射器,handlerMapping 

3.处理器适配器,handlerAdapter

4.视图解析器 ViewResolver

SpringMVC调用流程:

1.用户发起请求之后,第一步访问就是前端控制器

2.前端控制器只负责请求的转发/响应,没有办法直接处理业务

3.当SpringMVC容器启动时,处理器映射器首先会加载所有的@RequsetMapping注解。将请求路径与方法进行绑定。保存在Map中。Map</url,method方法>,当前端控制器发送请求被处理器映射器接受,如果URL地址匹配,则报纸应该执行哪个方法,如果url地址不匹配,则提示用户404

4.前端控制器得知将要执行的方法是谁,但是前端控制器,没有办法执行业务。

所以请求处理器适配器执行业务逻辑

5.处理器适配器针对配置文件(xml方式/注解方式/其他方式)的格式,挑选合适的处理器去执行业务逻辑,业务执行成功之后返回ModelAndView对象 Model:业务数据 View:页面

历史版本: 需要返回页面名称,及将数据填充到页面中
6. 前端控制器接收到返回的ModelAndView之后,交给视图解析器去解析数据. 视图解析器通过自身的配置获取页面的名称 (/web/user.html).
7. 最终通过经过视图渲染,将数据填充到页面中.最终用户看到的页面就包含了业务数据.

前后端分离方式:
关键用法: @ResponseBody 要求返回业务数据并且转化为JSON串. 程序直接跳过6-7直接将数据返回给用户.

SpringMVC参数接收用法

@RestController  @Controller+@ResponseBody

RestFul结构

Get类型 数据写在url?后面

例如:http://localhost:8080/user/getUser?id=110&name="张三"

RestFul请求:http://localhost:8080/user/getUser/110/张三

RestFul语法

1.URL中请求的参数使用/分割

2.服务器端参数接受时,变量使用{xx}进行包裹,并且位置固定

3.利用@PathVariable注解,动态获取路径中的数据,要求名称必须匹配

请求类型与业务的关系

1.请求类型

        1.Get        2.HEAD(不常用)        3.POST        4.PUT

        5.DELETE        6.CONNECT(不常用)        7.OPTIONS(不常用)        8.TRACE(不常用)

2.规则:随着业务的深入,请求类型与业务渐渐的绑定

@RequestMapping(path = "/login", method=RequestMethod.GET)

path指定路径,method可以标识方法,有的公司不使用GetMapping等

新增:post请求类型@PostMapping("")

删除:delete请求类型@DeleteMapping("")

修改:put请求类型@PutMapping("")

查询:get请求类型@GetMapping("")

同名参数提交

页面说明:name=“hobby” 口 篮球 口 排球 口 乒乓球

前端URL:http://localhost:8080/user/saveHobby?hobby=篮球,排球,乒乓球

用数组接收

Controller类

@GetMapping("/saveHobby")

public String[] saveHobby(String[] hobby){

return hobby;

}

前后端调用

Ajax

使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,再也不需要重载(刷新)整个网页,这使得程序能够快速地回应用户的操作

Ajax特点

局部刷新,异步访问

同步请求

        浏览器发起请求到服务器时,如果服务器没有响应,用户则无法获取页面数据,处于等待状态。不可以做其他的操作。(没有刷新出来就一直转圈)

异步请求

        异步请求时,浏览器可以进行其他的操作,当ajax数据获取之后,信息在页面的局部刷新(可以理解为多线程操作方式)[刷新出来的先显示,没刷新出来的再次请求]

Ajax异步的原理

Ajax为什么可以异步:中间有Ajax引擎

回调函数:服务器返回数据,通过回调函数通知用户

同步:请求过程没有返回数据时,只能等待

堂食,师傅没做好你就只能等着

异步:浏览器解析请求时,可以继续执行后续的操作,无需等待,直到回调函数被调用之后的请求数据返回了

外卖,你选择好了等小哥给你打电话即可,外卖小哥这时就是Ajax引擎(代理)

@CrossOrigin        允许跨域

  1. GET/DELETE 参数提交的方式一致
  2. POST/PUT 参数提交的方式一致
  3. restFul结构适用于所有的请求类型

跨域

同源策略

浏览器的网址与Ajax请求的网址必须满足协议://域名:端口号必须相同.

如果满足要求就是同域访问,如果不满足要求,则是跨域访问

常用API

request.getParameter("属性名")

servlet获取地址中的数据 

Integer.parseInt(需要转换的数据名)

string转int

面试题【可能会考】

404除了路径不匹配还有什么可能?

没有添加@ResponseBody注解,返回值找不到视图解析器

http协议默认端口号?https默认端口号

http默认端口号80,https默认端口号443

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值