当前位置: 首页 > news >正文

JavaWeb_Web基础

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默认是按照名称注入

http://www.cnnetsun.cn/news/166740.html

相关文章:

  • 如何将Open-AutoGLM操作延迟降低85%?资深架构师亲授调优心法
  • 从入门到精通:掌握Open-AutoGLM推理优化的7个关键步骤
  • 【Open-AutoGLM macOS适配终极指南】:手把手教你完成全流程配置与优化
  • 【Open-AutoGLM语义解析突破】:准确率提升35%背后的核心技术揭秘
  • 为什么顶尖团队都在用Open-AutoGLM做高效特征提取?真相曝光
  • 【AI模型预处理新纪元】:Open-AutoGLM如何实现毫秒级特征输出
  • 9 个降AI率工具,专科生必备避坑指南
  • 基于数学模型的疫苗接种策略分析
  • 基于时空图神经网络的交通流量预测方法研究
  • 【Open-AutoGLM GPU加速适配全攻略】:手把手教你7步完成高性能推理优化
  • Open-AutoGLM特征提取提速5倍:背后你不知道的3大关键技术
  • [特殊字符]工业标准文档“消化不良“?LLM+知识图谱三步翻倍表格任务F1,钢铁直男秒变逻辑大师!
  • RAG技术揭秘:如何通过检索增强生成解决大模型知识过时与幻觉问题?
  • 【国产大模型端侧落地新突破】:Open-AutoGLM推理效率提升实战
  • Open-AutoGLM端侧部署性能调优,手把手教你榨干NPU算力
  • 网络安全5大子方向!哪个才是最优选择?
  • macOS m芯片配置python低版本失败解决方案
  • 为什么顶尖工程师都在用Open-AutoGLM做任务提醒?真相曝光
  • 【Open-AutoGLM高分通过率背后的真相】:顶尖学员不愿公开的6个刷题技巧
  • 白话大模型与知识库的基础原理(不费脑版)
  • leetcode 764. Largest Plus Sign 最大加号标志
  • 对于pdf、excel、word、ppt文档如何进行有限的最有效的标注
  • Open-AutoGLM考试进入倒计时:如何用1天时间高效突击拿证?
  • RAG效果大飞跃!详解Rerank核心原理与实战,一文搞定排序优化。
  • 网络安全:是什么?新趋势?为什么值得学?一篇讲透行业红利
  • 零学AI Agent:大模型应用设计与实现全流程,附代码案例,建议收藏!
  • 春节宠物出行方案对比分析
  • 多 Agent 架构:Coordinator + Worker 模式
  • 【AI工程化进阶指南】:基于Open-AutoGLM的智能代理开发学习蓝图
  • 揭秘Open-AutoGLM智能调节系统:如何让您的家居能耗降低40%?