JavaWeb后端基础知识(1)包括(SpringBoot,HTTP,Web 服务器,请求,响应,分层解耦)

JavaWeb后端基础知识(1)

包括(SpringBoot,HTTP,Web 服务器,请求,响应,分层解耦

目录

JavaWeb后端基础知识(1)

一.SpringBoot

1.SpringBogtWeb快速入门

二.HTTP

1.概念:

2.特点:

3. HTTP-请求数据格式

4. 请求响应介绍-HTTP响应格式

5. 请求响应介绍-HTTP响应格式

(1)状态码:

(2)响应头:

三. Web 服务器

1.Web服务器

2. Tomcat

3.起步依赖

4.内嵌Tomcat服务器

四. 请求

1.基础知识

2.原始方式

3.简单参数(会自动进行类型转换,后面几个也一样)

(1)简单参数:

(2)例子:

(3)@RequestParam映射

(4)注意事项

(5)小结

4.实体参数

(1)简单实体对象:

5.数组集合参数

(1)数组参数:

6. 日期参数

(1)日期参数:

7. JSON 参数

(1)JSON参数:

8. 路径参数

(1)路径参数:

五.响应

1.@ResponseBody

2.统一响应结果

3. 解析XML文件

六.分层解耦

1. 三层架构

2.一些重要概念

3. I0C&DI入门

(1)步骤

(2)Bean的声明

(3)Bean组件扫描


一.SpringBoot

1.SpringBogtWeb快速入门

(1)创建springboot工程,并勾选web开发相关依赖。

(注意:把Server URL改为start.aliyun.com)

(2)定义HelloController类,添加方法hello,并添加注解。

(3)运行测试

eg:创建请求处理类HelloController,添加请求处理方法 hello,并添加2.注解:

@RestController(标识它是一个请求处理类。)

public class HelloController {

         @RequestMapping("/hello")(标明它处理的是那个请求。)

         public string hello(){

             System.out.println("Hello world ~");

             return "Hello world ";

             }

     }

二.HTTP

1.概念:

HTTP :Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。

2.特点:

(1)基于TCP协议:面向连接,安全.

(2)基于请求-响应模型的:一次请求对应一次响应

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

         1)缺点:多次请求间不能共享数据。

         2)优点:速度快

3. HTTP-请求数据格式

(1)请求行:请求数据第一行(请求方式、资源路径、协议)

(2)请求头:第二行开始,格式key:value

(3)请求体:POST请求,存放请求参数

         1)请求方式-GET:请求参数在请求行中,没有请求体,如:/brand/findA11?name=oppo&status=1。GET请求大小是有限制的。

         2)请求方式-POST: 请求参数在请求体中,POST请求大小是没有限制的。

4. 请求响应介绍-HTTP响应格式

(1)响应行:响应数据第一行(协议、状态码、描述)

(2)响应头:第二行开始,格式key:value

(3)响应体:最后一部分,存放响应数据

5. 请求响应介绍-HTTP响应格式

(1)状态码:

1)1xx响应中-临时状态码,表示请求已经接收,告诉客户端应该继续请求或者如果它已经完成则忽略它。

2)2xx成功-表示请求已经被成功接收,处理已完成。

3)3xx重定向-重定向到其他地方;让客户端再发起一次请求以完成整个处理。

4)4xx客户端错误-处理发生错误,责任在客户端。如:请求了不存在的资源、客户端未被授权、禁止访问等。

5)5xx服务器错误-处理发生错误,责任在服务端。如:程序抛出异常等。

6)重点:

       ·200 OK 客户端请求成功,即处理成功,这是我们最想看到的状态码

       ·404 Not Found 请求资源不存在,一般是URL输入有误,或者网站资源被删除了。

       ·500 Internal server Error 服务器发生不可预期的错误 服务器出异常了,赶紧看日志去吧。

(2)响应头:

1)Content-Type表示该响应内容的类型,例如text/html,application/json。

2)Content-Length表示该响应内容的长度(字节数)。

3)Content-Encoding表示该响应压缩算法,例如gzip。

4)Cache-Control指示客户端应如何缓存,例如max-age=300表示可以最多缓存300秒。

5)Set-Cookie告诉浏览器为当前页面所在的域设置cookie。

三. Web 服务器

1.Web服务器

(1)对HTTP协议操作进行封装,简化web程序开发。

(2)部署web项目,对外提供网上信息浏览服务。

2. Tomcat

(1)一个轻量级的web服务器,支持servlet、jsp等少量javaEE规范。

(2)也被称为web容器、servlet容器。

3.起步依赖

(1)spring-boot-starter-web

(2)spring-boot-starter-test

4.内嵌Tomcat服务器

(1)基于Springboot开发的web应用程序,内置了tomcat服务器,当启

动类运行时,会自动启动内嵌的tomcat服务器。

四. 请求

1.基础知识

(1)前端控制器:DispatcherServlet

(2)请求(HttpServletRequest):获取请求数据

(3)响应(HttpServletResponse):设置响应数据

(4)BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。

(5)CS架构:Client/Server,客户端/服务器架构模式。(开发、维护麻烦但体验不错)

2.原始方式

(1)在原始的web程序中,获取请求参数,需要通过HttpServletRequest 对象手动获取

(2)例子

@RequestMapping("/simpleParam")

public String simpleParam (HttpServletRequest request){

         String name =request.getParameter("name");

         String ageStr=request.getParameter("age");

         int age =integer.parselnt(ageStr);

         System.outprintln(name+":"+age);

         return "OK";

}(繁琐,基本不用)

3.简单参数(会自动进行类型转换,后面几个也一样)

(1)简单参数:

参数名与形参变量名相同,定义形参即可接收参数。

(2)例子:

@RequestMapping("/simpleParam")

public String simpleParam(String name , integer age){

         System.outprintln(name+" : "+age);

         return "OK";

}

(3)@RequestParam映射

简单参数:如果方法形参名称与请求参数名称不匹配,可以使用 @RequestParam 完成映射。

如:

@RequestMapping("/simpleParam")

Public String simpleParam(@RequestParam(name = "name")String username , integer age){

         System.outprintln(username +" :"+ age);

         return "Ok";

}

(4)注意事项

@RequestParam中的required属性默认为true,代表该请求参数必须传递,如果不传递将报错。如果该参数是可选的,可以将required属性设置为false。如:public String simpleParam(@RequestParam(name = "name", required = false) String username,Integer age)

(5)小结

1)原始方式获取请求参数

1>Controller方法形参中声明HttpServletRequest对象

2>调用对象的getParameter(参数名)

2)SpringBoot中接收简单参数

1>请求参数名与方法形参变量名相同

2>会自动进行类型转换

3)@RequestParam注解

1>方法形参名称与请求参数名称不匹配,通过该注解完成映射

2>该注解的required属性默认是true,代表请求参数必须传递

4.实体参数

(1)简单实体对象:

请求参数名与形参对象属性名相同,定义POI0接收即可

(将请求参数放到一个类里面,到时候直接接收那个类)

eg:public class User {

         private String name,

         private integer age;

}

@RequestMapping("/simplePojo")

public String simplePojo(User user){

         System.outprintln(user);

         return "OK";

}

5.数组集合参数

(1)数组参数:

请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数,如果用集合,则用@RequestParam 绑定参数关系

即:

1)数组:请求参数名与形参中数组变量名相同,可以直接使用数组封装

2)集合:请求参数名与形参中集合变量名相同,通过@RequestParam绑定参数关系

@RequestMapping("/arrayParam")

public String arrayParam(String[] hobby){

         System.out.println(Arrays.toString(hobby));

         return "ok";

}

@RequestMapping("/listParam")

         public String listParam(@RequestParam List<String> hobby)

         System.outprintln(hobby);

return "OK";

}

6. 日期参数

(1)日期参数:

使用 @DateTimeFormat 注解完成日期参数格式转换

如:

@RequestMapping("/dateParam")

public String dateParam(@DateTimeFormat(pattern ="yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){

         System.outprintln(updateTime);

         return "OK";

}

7. JSON 参数

(1)JSON参数:

JSON数据键名与形参对象属性名相同,定义P010类型形参即可接收参数,需要使用 @RequestBody标识

@RequestMapping(v"/jsonParam")

public string jsonParam(@RequestBody User user){

         System.out.println(user);

         return "OK";

}

8. 路径参数

(1)路径参数:

通过请求URL直接传递参数,使用{…}来标识该路径参数,需要使用 @PathVariable 获取路径参数

@RequestMapping("/path/{id}/{name}")

public String pathParam2(@PathVariable Integer id, @PathVariable String name){

         System.outprintln(id+":" +name);

         return "OK";

}

五.响应

1.@ResponseBody

1)类型:方法注解、类注解

2)位置:Controller方法上/类上

3)作用:将方法返回值直接响应,如果返回值类型是实体对象/集合,将会转换为JSON格式响应

4)说明:@RestController = @Controller + @ResponseBody ;

2.统一响应结果

         Result(code,msg,data)

如:

public class Result {

         //响应码,1代表成功;0 代表失败

         private Integer code,

         //提示信息

         private String msg;

         //返回的数据

         private Object data;

}

3. 解析XML文件

解析XML文件需要引入依赖dom4j

<dependency>

         <groupId>org.dom4j</groupId>

         <artifactId>dom4j</artifactId>

         <version>2.1.3</version>

</dependency>

六.分层解耦

1. 三层架构

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

(2)service:业务逻辑层,处理具体的业务逻辑。

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

(service和dao一般使用接口)

2.一些重要概念

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

(2)耦合:衡量软件中各个层/模块之间的依赖、关联的程度。

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

(4)控制反转: Inversion Of control,简称I0C。对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。

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

(6)Bean对象:I0C容器中创建、管理的对象,称之为bean。

3. I0C&DI入门

(1)步骤

①Service层 及 Dao层的实现类,交给I0C容器管理。

加上@Component注解即可//将当前类交给TOC容器管理,成为IOC容器中的bean

②为Controller及Service注入运行时,依赖的对象。

加上@Autowired注解即可//运行时,IOC容器会提供该类型的bean对象,并值给该变量

③运行测试。

(2)Bean的声明

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

@Component 声明bean的基础注解  不属于以下三类时,用此注解

@Controller @Component的衍生注解  标注在控制器类上

@Service @Component的衍生注解  标注在业务类上

@Repository @Component的衍生注解 标注在数据访问类上(由于与mybatis整合,用的少)

2)注意事项

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

②使用以上四个注解都可以声明bean,但是在springboot集成web开发中,声明控制器bean只能用@Controller。

(3)Bean组件扫描

①前面声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描。

②@Componentscan注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解 @SpringBootApplication中,默认扫描的范围是启动类所在包及其子包。

也可以手动声明要扫描的包(会取消默认的)@ComponentScan("dao"})(不推荐)

(5)Bean注入

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

2)通过以下几种方案来解决:

①@Primary(想让谁生效,在上面加这个注解)

②@Qualifier

如:@Restcontroller

public class EmpController {

@Autowired

@Qualifier("empserviceA")

private EmpService empservice ;

③@Resource(就不用@Autowired注解了)

如:@RestController

public class Empcontroller {

@Resource(name="empserviceB")

private EmpService empService;

3)@Resource 与 @Autowired区别

@Autowired 是spring框架提供的注解,而@Resource是IDK提供的注解

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/10140.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

verilog基础语法之表达式

verilog基础语法之表达式 1、操作数2、操作符3、示例 在Verilog中&#xff0c;表达式是由操作数和操作符组成的组合&#xff0c;包括&#xff1a;算术操作符、关系操作符、等价操作符、逻辑操作符、按位操作符、归约操作符、移位操作符、拼接操作符和条件操作符&#xff0c;它们…

学习java第六十六天

Spring 中的 bean 的作用域有哪些? singleton : 唯一 bean 实例&#xff0c;Spring 中的 bean 默认都是单例的。 prototype : 每次请求都会创建一个新的 bean 实例。 request : 每一次HTTP请求都会产生一个新的bean&#xff0c;该bean仅在当前HTTP request内有效。 sessio…

GT2505HS-VTBD 三菱触摸屏手持式5.7寸型

GT2505HS-VTBD 三菱触摸屏手持式5.7寸型 GT2505HS-VTBD参数,GT2505HS-VTBD用户手册,GT2505HS-VTBD使用手册GT2505HS-VTBD参数说明&#xff1a;手持式5.7吋型&#xff0c;VGA 640*480&#xff0c;TFT彩色液晶屏,65536色,内存32MB&#xff0c;DC24V,内置以太网接口。 GT2505HS-VT…

agiletc部署

数据库创建及运行 启动命令 cd /AgileTC/case-server&& nohup mvn spring-boot:run &查看是否启动成功 http://192.168.101.:8094/case/caseList/1需要安装java javac等 一、安装java 1 安装java11 sudo yum install java-11-openjdk-devel -y2 切换到java11 …

【零基础】system generator①设置卡解析

1.在matlab中我们输入的是双精度浮点型数据&#xff0c;经过gateway后变成定点型。十六位十四个小数位&#xff0c;整个数据有十六位&#xff0c;其中十四位给了小数 2.fixed-point定点型&#xff1b;signed有符号&#xff1b;2’s comp补码 3.量化误差 truncate&#xff0c;舍…

同时安装多个nodejs版本可切换使用,或者用nvm管理、切换nodejs版本(两个详细方法)

目录 一.使用nvm的方法&#xff1a; 1.卸载nodejs 2.前往官网下载nvm 3.安装nvm 4.查看安装是否完成 5.配置路径和淘宝镜像 6.查看和安装各个版本的nodejs 7.nvm的常用命令 二.不使用nvm&#xff0c;安装多个版本&#xff1a; 1.安装不同版本的nodejs 2.解压到你想放…

Ubuntu 22.04 下,VS Code 配置 C++ 编译及 CMake

一、VS Code 安装以及 C 编译环境配置 1. 在 Ubuntu 中安装 VS Code 笔者直接在 Ubuntu Software 中心安装 VS Code。也可以从VS Code官网下载 deb&#xff0c;解压 dpkg -i 安装。 2. VS Code 中配置 g/gcc 1) 安装 C/C 扩展 &#xff08;CtrlShiftX&#xff09; 2&#x…

差速机器人模型LQR 控制仿真(c++ opencv显示)

1 差速机器人状态方程构建 1.1差速机器人运动学模型 1.2模型线性化 1.3模型离散化 2离散LQR迭代计算 注意1&#xff1a;P值的初值为Q。见链接中的&#xff1a; 注意2&#xff1a;Q, R参数调节 注意3&#xff1a;LQR一般只做横向控制&#xff0c;不做纵向控制。LQR输出的速度…

辅助阅读代码

辅助代码工具&#xff1a; 1、sourcetrail 2、valgrind &#xff0c; qcachegrind sourcetrail&#xff0c;可以生成类图&#xff0c;以及类之间&#xff0c;函数之间的调用关系 1、安装 2、使用该工具需要使用cmake 编译一次 cmake -DCMAKE_EXPORT_COMPILE_COMMANDSON 其他…

手机同步与数据安全:让手机和电脑完美结合!

在当今这个高度信息化的社会&#xff0c;手机和电脑不仅为我们提供了丰富的信息资源&#xff0c;让我们能够随时随地获取所需的信息&#xff0c;还为我们的生活带来了极大的便利。无论是工作、学习还是娱乐&#xff0c;手机和电脑都发挥着至关重要的作用。 然而&#xff0c;随…

XMLHttpRequest与Axios详解

XMLHttpRequest发送请求 在JavaScript中&#xff0c;使用XMLHttpRequest()发送多个参数通常涉及到设置HTTP请求的Content-Type头部&#xff0c;并且将参数作为请求体的一部分发送。以下是一个示例&#xff0c;展示了如何发送包含多个参数的POST请求&#xff1a; var xhr new X…

Paddle 实现DCGAN

传统GAN 传统的GAN可以看我的这篇文章&#xff1a;Paddle 基于ANN&#xff08;全连接神经网络&#xff09;的GAN&#xff08;生成对抗网络&#xff09;实现-CSDN博客 DCGAN DCGAN是适用于图像生成的GAN&#xff0c;它的特点是&#xff1a; 只采用卷积层和转置卷积层&#x…

nvm切换node版本命令

nvm切换node版本命令 使用 nvm 切换 Node.js 版本的命令如下&#xff1a;12 查看 nvm 支持安装的 Node 版本。进入命令行界面&#xff0c;输入 nvm list available&#xff0c;这会显示可以安装的 Node.js 版本。安装指定版本的 Node.js。输入 nvm install <版本号>&…

优先队列——大小堆—— priority_queue

本人博客主页 本篇博客相关博客 二叉树--讲解 文章目录 目录 文章目录 前言 一、priority_queue是什么&#xff1f; 二、priority_queue的使用 1、相关函数 2、代码使用 3、堆的插入删除 三、模拟实现 1、大框架 2、仿函数 3、向下调整 4、向下调整 总结 前言 在我们学习二叉…

免费SSL证书怎么签发

大家都知道SSL证书好&#xff0c;作用大&#xff0c;安全性高&#xff0c;能加权重&#xff0c;等保必须的参考值。但是如何选择合适且正确的证书也是至关重要的&#xff0c;网站更适合单域名证书、多域名证书、泛域名证书、还是多域名通配符证书。 首先大家要清楚&#xff0c…

网站访问提示不安全怎么办??

当网站访问时提示“不安全”&#xff0c;这通常与网站的SSL证书有关&#xff0c;或者是网站本身存在一些安全风险。以下是一些解决步骤和建议&#xff1a; 1、检查URL前缀&#xff1a;首先&#xff0c;检查URL是否以https://开头。如果仍然是http://&#xff0c;则网站没有使用…

python 新特性

文章目录 formatted字符串字面值formatted字符串支持 字符串新方法变量类型标注二进制表示中数字为1的数量统计字典的三个方法新增mapping属性函数zip()新增strict参数dataclass字典合并match 语法 formatted字符串字面值 formatted字符串是带有’f’字符前缀的字符串&#xf…

HashMap在JDK1.8的优化

目录 数据结构上的优化 Hash碰撞问题解决方案的优化 Hash值算法的优化

我必须要吹一波MATLAB 2024a,太牛逼了!|福利:附安装教程及下载地址

最近逛MATLAB官网&#xff0c;发现MATLAB 2024a版本已经Pre-release了&#xff0c;翻了下release note&#xff0c;不得不感叹&#xff0c;实在是太强了&#xff01; 这次重点更新了四个工具箱&#xff1a; Computer Vision Toolbox Deep Learning Toolbox Instrument Contro…

图像下载的新趋势:Kotlin技术探索与实践

随着互联网的迅速发展和智能设备的普及&#xff0c;图像下载作为一项重要的技术应用&#xff0c;也在不断演进和创新。在这篇文章中&#xff0c;我们将探讨图像下载的新趋势&#xff0c;并使用Kotlin语言进行实践探索。 引言 图像下载是指从网络上获取图像并保存到本地设备的…