Web基础

静态资源:服务器上存储的不会改变的数据,通常不会根据用户的请求而变化。如HTML、CSS、JS、图片、视频等(负责页面展示)。

动态资源:服务器端根据用户请求和其他数据动态生成的内容可能会在每次请求时都发生变化。如:Spring框架(负责逻辑处理)。

B/S架构:客户端只需浏览器,应用程序的逻辑和数据都存在服务器端维护方便、体验一般

C/S架构:需要单独开发维护客户端。(体验不错、开发维护麻烦

Spring官方脚手架连接不上解决方案:

起步依赖:

       Spring-boot-starter-web:包含了web应用开发所需要的常见依赖。

       Spring-boot-starter-test:包含了单元测试所需要的常见依赖。

当运行项目的启动类中的main方法时,它将引入的内部集成的tomcat服务器启动起来,tomcat服务器启动起来会把编写的项目代码部署到服务器中

HTTP

HTTP协议:超文本传输协议,规定了浏览器和服务器之间数据传输的规则(客户端与服务器端进行数据交互的数据格式)

HTTP协议的特点:

       ①基于TCP协议:面向连接安全

       ②基于请求-响应模型一次请求对应一次响应

③HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。

HTTP协议的优点:速度快

HTTP协议的缺点:多次请求间不能共享数据

HTTP-请求协议

       请求数据格式

GET方式的请求参数是在URL后面提交到服务器端的请求参数在请求行中没有请求体,GET请求大小在浏览器中是有限制的

POST方式的请求参数是在请求体中,POST请求大小是没有限制的.

       请求数据获取

Web服务器(Tomcat)对HTTP协议的请求数据进行解析,并进行了封装(HttpServletRequest),调用Controller方法的时候传递给了该方法.这样,就使得程序员不必直接对协议进行操作,让Web开发更加便捷.

HTTP-响应协议

响应数据格式

常见的响应状态码:

常见的响应头:

响应数据设置

Web服务器对 HTTP协议的响应数据进行了封装(HttpServletResponse),并在调用Controller方法的时候传递给了该方法.这样,就使得程序员不必直接对协议进行操作,让Web开发更加便捷.

响应状态码和响应头如果没有特殊要求,通常不手动设定.服务器会根据请求处理的逻辑,自动设置响应状态码和响应头.

开发服务端程序,接收请求,读取文本数据并响应:

接收前端发起的请求,需要定义一个请求处理类(@RestController)即controller.在该类中定义方法(@RequestMapping)接收前端发起的请求以及读取文本数据并响应:

加载并读取user.txt文件,借助hutool工具类来读取文本中的用户数据并封装到集合中.

在src中main下的java目录和resources目录下的文件最终编译之后会放在同一个目录下放在classes目录下即类路径下,此时可以通过字节码对象获取到类加载器来获取该类路径下指定文件的输入流.

       ②解析用户信息,封装为User对象存放进list集合

③返回数据(json).服务器在给前端响应数据时,它会自动地将这个对象或者集合转化为json格式的数据.

@RestController底层封装了@ResponseBody(作用:将controller返回值直接作为响应体的数据直接响应;返回值是对象/集合会先转为json再响应).

@RestController标识当前类是请求处理类

@RequestMapping指定方法的请求路径,方法中可以声明一个形参来接收前端传递来的参数.

分层解耦

三层架构

controller: 控制层,接收前端发送的请求,对请求进行处理,并响应数据

service: 业务逻辑层,处理具体的业务逻辑

dao:数据访问层(持久层),负责数据访问操作,包括数据的增、删、改、查。

分层解耦

耦合:衡量软件中各个层/各个模块的依赖关联程度

内聚:软件中各个功能模块内部的功能联系

软件设计原则:高内聚低耦合

实现分层解耦的思路是

*将项目中的类交给IOC容器管理(IOC,控制反转)

       *应用程序运行时需要什么对象,直接依赖容器为其提供(DI,依赖注入)

控制反转:简称IOC对象的创建控制权由程序自身转移到外部(容器)。

依赖注入:简称DI。容器为应用程序提供运行时所依赖的资源,称之为依赖注入。

Bean对象:IOC容器中创建、管理的对象,称之为Bean

①在Dao和Service层的实现类,交给IOC容器管理:在实现类上面添加注解:@Component 代表将该类交给IOC容器管理,由IOC容器负责对象的创建。

②为Controller和Service注入运行时所依赖的对象:在成员变量上方添加@Autowired              代表程序在运行时会自动地从容器中找到该成员变量对应类型的bean对象并赋值给该成员。

IOC详解

把某个对象交给IOC容器管理,需要在对应的类上加上如下注解之一:

声明bean的时候,可以通过注解的value属性指定bean的名字,如果没有指定,默认为类名首字母小写

声明的bean的注解要想生效还需要被组件扫描注解@ComponentScan扫描。该注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解@SpringBootApplication中默认扫描的范围时启动类所在包及其子包

在Springboot集成web开发中,声明控制器bean只能用@Controller

DI详解

基于@Autowired进行依赖注入的常见方式有三种:

       优点:代码简洁、方便快速开发

       缺点:隐藏了类之间的依赖关系,可能会破坏类的封装性

       优点:能清晰看到类的依赖关系、提高了代码的安全性

       缺点:代码繁琐、如果构造参数过多,可能会导致构造函数臃肿

       注意:如果只有一个构造函数,@Autowired注解可以省略

       优点:保持了类的封装性依赖关系更清晰

       缺点:需要额外编写setter方法,增加了代码量

@Autowired注解,默认是按照类型进行注入的。如果存在多个相同类型的bean,将会报错。

方案二和方案三中注解中传入参数的含义是bean的名字

@Resource与@Autowired的区别:

       *@Autowired是Spring框架提供的注解,而@Resource是JavaEE规范提供的。

       *@Autowired默认是按照类型注入,而@Resource默认是按照名称注入

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐