SpringWebMVC

一。静态Web内容

Http请求内容由Web服务器文件系统提供,常见静态Web内容如html,css,js.jpg,flash等。
静态Web的特点
计算类型:IO类型(socket必须有服务器的IP、port和进程内的IO,文件在内存中的缓存,文件存在于磁盘上);交互方式单一;资源内容基本相同;资源路径:物理路径(包括文件,目录等)请求方法:主要是Get方法。
常见使用场景:信息展示,样式文件(CSS),脚本文件(JS),图片,多媒体(flash,movie),文件下载等。
常见Web服务器:Apache,Ngix,Gws
为什么JavaWeb 服务器不是常用Web 服务器呢?
Java服务器可以做静态服务器,但是尽量不要做静态服务器的承载。
(1)由于数据类型的多样性,在内存占用和分配方面也存在不确定性;
(2)垃圾回收方面属于被动回收,采用部分垃圾回收算法时,可能会发生短暂的停顿现象;
(3)做并发处理时,需要用到线程池,线程开销会比较大。

二。动态Web内容

与静态Web内容不同,请求内容通过服务器计算而来
特点:
计算类型是混合(IO,CPU,内存)类型(socket连接,文件传输叫IO密集型,算法叫CPU密集型,cache叫内存密集型);交互方式丰富(用户输入,客户端特征等);资源内容多样性;资源路径:一般是逻辑路径(虚拟路径是不存在的)
请求方法:get,head,put,post等。
常见使用场景:页面渲染,表单交互Ajax,Xml,Json,jsonp(跨域用的),Web Services(soap,是一种比较重的协议),webSocket。
流行JavaWeb服务器:Servlet容器,tomcat,jetty;非Servlet容器,undertow。

三。SpringBoot

SpringBoot分为web应用和非web应用,可以通过一个参数进行调整,web应用不限于用springmvc,还有model1,model2。Model2与MVC的细微差异:
Model2是JavaEE的规范,是面向Web服务的架构,MVC是面向所有应用场景,如PC应用,无线应用等,默认推荐使用springmvc。
SpringWebMVC

Spring Front Controller实际上是dispatcherServlet,@Controller实际上可以称为Application Controller或者Command,SpringBoot jar是Fat Jar(是没有压缩率的zip文件)。

四。SpringBoot的模板引擎

模板语言是服务端语言,需要服务端计算的,js在客户端上执行。服务端处理数据强,前端处理动态效果(Dyanamc html)。React,vue大多数前端的框架是处理计算后的数据,进行展示,能力属于浏览器的,数据来自于服务端。
1.Jsp作为模板时,里面使用了el表达式
2.Velocity:在Servlet 1.5之后,也是spring4.x 后 velocity被移除了,他的最后一个版本是2010年的,太久远了,所以被淘汰。servlet是标准的,他的配置都在web-infi下面,而velocity不是标准的,可能在其他文件夹中,如目录。
3.thymeleaf模板引擎

比较:
Jsp是翻译式的语言,jsp->java->class,性能比Velocity要好,velocity是解释执行,AST解析,JSP里面可以写Java代码,这样的话,会导致代码耦合,职责不清了。
性能:jsp>velocity>thymleaf
可读性:thymleaf>velocity>jsp
jsp可以支持script方式,xhtml,xml格式。
velocity是模板引擎,不限制于Web应用。
jsp扩展标签,thymleaf扩展标签和属性,velocity扩展的宏 。

五。rest(rest~restful)

服务大致分为rest(轻量级),webservice(重量级),Rest并不一定指json,json是最轻量级的,也可能是html。返回的json可以转成xml,方法加入一个maven依赖,还可以加一个produces=”mediaType.xxxx”让返回结果强制转成json或xml。SOA偏向于webservice,微服务偏向于rest。

(1)体积轻便,维护成本低,易于理解
(2)CS架构:BS架构也是一种CS架构,客户端有可能是程序或返回的消息,终端多样性
(3)无状态:服务端和客户端并不是长期保持连接(http),缓存、持久化对用户的行为是有状态的
(4)可缓存
(5)统一接口:资源识别URI;资源操作http:get(取),put(更新),post(创建),delete,除了post方法,其他方法都是幂等的。

六。SpringBoot核心接口

定义相关
@controller,页面的刷新,访问
@restController,标识一个controller是rest的
映射相关
@RequestMapping,请求的映射
@PathVariable,路径的变量,可以动态替换
请求相关
@RequestParam
@RequestHeader
@CookieValue
RequestEntity:只管体
响应相关
@ResponseBody:只管内容,body
ResponseEntity :不仅管体,还管头

在spring4.3中提供了一个新的接口,@getMapping(path/value=”/”),和@RequestMapping的区别是@RequestMapping可以定义所有的请求方法(get,post,…),@getMapping只是get请求,@PostMapping只是post请求,@getMapping和@RequestMapping不能同时使用,会报错。
@[email protected][email protected]
@RequestParam,可以设置默认值,可以进行类型转化,如string->Integer,它也屏蔽了servlet API

上一篇:微服务概述