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

Java web(02)

课程设计

  • Maven
  • SpringBoot Web
  • MySQL
  • SpringBoot Mybatis
  • SpringBoot Web开发篇
  • SpringBoot Web进阶篇

maven(没学懂…跳过了…)

介绍:一款用于管理和构建java项目的工具,是Apache 软件基金会的项目

  • 作用
    • 依赖管理
    • 同一项目结构
    • 项目构建
  • 项目结构
    • main (实际项目资源)
      • java(源代码)
      • resources 配置文件目录
    • test
      • java
      • resources
    • pom.xml (项目配置文件)

仓库:用于存储资源,管理各种jar包

  • 本地仓库:自己计算机上的一个目录
  • 中央仓库:由maven团队维护的全球唯一的
  • 远程仓库:一般由公式团队搭建的私有仓库

安装

  • 解压压缩包
  • 配置本地仓库
  • 配置阿里云私服
  • 配置环境变量

在IDEA集成中配置Maven

在这里插入图片描述

注:这个是单项目的配置,也可以在配置全局maven环境

创建maven项目

Maven坐标:

  1. 是资源的唯一标识,通过该坐标可以唯一定位资源位置
  2. 使用坐标来定义项目或引入项目中需要的依赖

Maven坐标组成

  1. groupid:定义当前Maven项目隶属组织名称(通常是域名反写)
  2. artifactid:定义当前Maven项目名称(通常是模块名称,例如order-service,goods-service)
  3. version:定义当前版本号

Web入门

Spring Boot: 可以帮助我们非常快速的构建应用程序,简化开发,提高效率

  • 创建一个Spring Boot工程
  • 勾选web开发相关的依赖项
  • 定义HelloController类,并添加hello方法
  • 运行测试

#小知识 连接VPN不如 用国内镜像快

@RestController  
public class HelloController {  @RequestMapping("/hello")  public String hello() {  System.out.println("hello");  return "hello";  }  
}

HTTP协议

  • HTTP 概述
  • HTTP 请求协议
  • HTTP 响应协议
  • HTTP 协议解析

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

特点

  1. 基于TCP协议:面向连接,安全
  2. 基于请求-响应模型:一次请求对应一次响应
  3. HTTP协议是无状态的协议:对于事物处理没有记忆能力,即每次请求-响应都是独立的
    1. 缺点:多次请求间不能共享数据
    2. 优点:速度快

请求数据格式

请求行: 请求方式,资源路径,协议
请求头:

  1. Host:请求的主机名
  2. User - Agent:浏览器版本,例如 Chrome 浏览器的标识类似 Mozilla/5.0 … Chrome/79,IE 浏览器的标识类似 Mozilla/5.0 (Windows NT …) like Gecko
  3. Accept:表示浏览器能接收的资源类型,如 text/*,image/或者/* 表示所有;
  4. Accept - Language:表示浏览器偏好的语言,服务器可以据此返回不同语言的网页;
  5. Accept - Encoding:表示浏览器可以支持的压缩类型,例如 gzip,deflate 等。
  6. Content - Type:请求主体的数据类型。
  7. Content - Length:请求主体的大小(单位:字节)。

请求体:

注:

  1. GET 请求参数在请求行中,没有请求体
  2. POST:请求参数在请求体中,请求大小没有限制

响应数据

响应行:(协议,状态码,描述)
响应头:
响应体:存放响应数据

状态码

  • 1xx:响应中 - 临时状态码,表示请求已经接收,告诉客户端应该继续请求或者如果它已经完成则忽略它。
  • 2xx:成功 - 表示请求已经被成功接收,处理已完成。
  • 3xx:重定向 - 重定向到其他地方;让客户端再发起一次请求以完成整个处理。
  • 4xx:客户端错误 - 处理发生错误,责任在客户端。如:请求了不存在的资源、客户端未被授权、禁止访问等。
  • 5xx:服务器错误 - 处理发生错误,责任在服务端。如:程序抛出异常等。

响应头

  • Content-Type:表示该响应内容的类型,例如 text/html,application/json。
  • Content-Length:表示该响应内容的长度(字节数)。
  • Content-Encoding:表示该响应压缩算法,例如 gzip。
  • Cache-Control:指示客户端应如何缓存,例如 max-age=300 表示可以最多缓存 300 秒。
  • Set-Cookie:告诉浏览器为当前页面所在的域设置 cookie。

Tomcat

概念:Tomcat是Apache 软件基金会一个核心项目,是一个开源免费的轻量级Web服务器,支持Servlet/JSP少量JavaEE规范

目录结构说明

  • bin 可执行文件
  • conf 配置文件
  • lib Tomcat依赖的jar包
  • logs 日志文件
  • temp 临时文件
  • webapps 应用发布目录
  • work 工作目录

运行:双击 startup.bat
乱码问题:在conf/logging.properties 中log配置改为GBK

#问题 :本地服务器启动后,浏览器中访问不到,端口也改了,没用

小结

  • 起步依赖
  • 内嵌Tomcat服务器

请求响应

  • 请求(HttpServletRequest):获取请求数据
  • 响应(HttpServletResponse):设置响应数据
  • BS架构:Browser/Server:浏览器/服务器架构模式,应用程序的逻辑和数据都存储在服务端
  • CS架构:Client/Server,客户端/服务器架构模式

请求

  • apifox
  • 简单参数
    • 请求参数和形参名一致
    • 如果不一致用 @RequestParam 手动映射
  • 实体参数
  • 数组集合参数
    • 集合需要用 @RequestParam 绑定关系
  • 日期参数
  • Json参数 @RequestBody
  • 路径参数 @PathVariable

简单参数

只需要保证参数名和url中的参数名保持一致就可以得到数据


//前端请求“http://localhost:8080/hello?name=changxin&age=25”
//前端发送的是post请求,后端向下面这样写也可以@RestController  
public class HelloController {  @RequestMapping("/hello")  public String hello(@RequestParam(name = "name") String username,Integer age) {  System.out.println(username + ":" +age);  return "hello";  }  
}

小结

  1. SpingBoot中接收简单参数
    1. 请求参数名于方法形参变量名相同
    2. 会自动进行类型转换
  2. @RequestParam注解
    1. 方法形参名称与请求参数名称不匹配,通过改注解完成映射
    2. 该注解的required 属性默认是true,代表请求参数必须传递

实体参数

规则:请求参数名与形参对象属性名相同,然后就可以直接接收了


public class User {  private String name;  private Integer age;  public String getName() {  return name;  }  public void setName(String name) {  this.name = name;  }  public Integer getAge() {  return age;  }  public void setAge(Integer age) {  this.age = age;  }  
}@GetMapping("/hello2")  
public String hello2(User user) {  System.out.println(user.getName() + ":" +user.getAge());  return "hello2";  
}

数组集合参数

注:和上面那种情况类似,但是一个参数名接收多个参数

// http://localhost:8080/hello3?arr=changxin&arr=20// 数组案例
@GetMapping("/hello3")  
public String hello3(String[] arr) {  for(String item : arr){  System.out.println(item);  }  return "hello3";  
}@GetMapping("/hello4")  
public String hello4(@RequestParam List<String> arr) {  for(String item : arr){  System.out.println(item);  }  return "hello4";  
}

小结:

  • 数组:请求参数名与形参中数组变量名相同,可以直接使用数组封装
  • 集合:请求参数中集合变量名相同,通过@RequsetParam绑定参数关系

日期时间参数

@GetMapping("/hello5")  
public String hello5(@DateTimeFormat(pattern = "yyyy-MM-dd")LocalDateTime localDateTime) {  System.out.println(localDateTime);  return "hello5";  
}

Json参数

  • @RequestMapping 更通用,可以处理多种 HTTP 方法(GET、POST、PUT、DELETE 等)
  • @GetMapping 是专门为 GET 请求设计的,使代码更简洁明了
@RequestMapping("/hello6")  
public String hello6(@RequestBody User user) {  System.out.println(user);  return "hello6";  
}

注:注意上面的注解和get请求不一样

路径参数


//http://localhost:8080/hello7/1@RequestMapping("/hello7/{id}")  
public String hello7(@PathVariable Integer id) {  System.out.println(id);  return "hello7";  
}

注:路径参数可以有多个,在后面加括号就好

响应数据

@ResponseBody

  • 类型:方法注解,类注解
  • 位置:Controller方法上/类上
  • 作用:将方法返回值直接响应,如果返回值类型是 实体对象/集合,将会转换为iJSON格式响应
  • 说明:@RestController = @Controller + @ResponseBody

响应结果的同一性:将响应数据封装到一个对象中,然后然会该对象

该对象

  • 统一的字段,来向前端人员描述一些信息
    • code:0/1 描述失败或者成功
    • message: 补充说明
  • data字段,可以将返回的数据封装在这里

该对象,对外提供很多静态方法

  • succesd —> 里面提供构造方法
  • failed

补充:SpringBoot项目的静态资源(html,css,js)默认存放目录为:static ,public , resources

分层解耦

  • 三层框架
  • 分层解耦
  • IOC & DI 入门
  • IOC详解
  • DI 详解

三层架构

优点:复用性强,便于维护,利于扩展

  • controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据
  • service:业务逻辑层,处理具体的业务逻辑
  • dao : 数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的CRUD

分层解耦

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

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

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

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

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

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

IOC 和 DI 的入门

  1. @Component 将当前类交给IOC容器,成为IOC容器中的bean
  2. @Autowired 运行时,IOC容器会提供该类型的bean对象,并赋值给该变量 --> 依赖注入
注解说明位置
@Component声明 bean 的基础注解不属于以下三类时,用此注解
@Controller@Component 的衍生注解标注在控制器类上
@Service@Component 的衍生注解标注在业务类上
@Repository@Component 的衍生注解标注在数据访问类上(由于与 mybatis 整合,用的少)

注:

  • 声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名首字母小写
  • 使用以上四个注解都可以声明bean,但是在soringboot集成web开发中,声明控制器bean只能用@Controller

Bean组件扫描

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

依赖注入

如果同类型的bean存在多个:

  • @Primary
  • @Autowired + Qualifier(“bean的名称”)
  • @Resource(name=“bean的名称”)

@Resource 与 @Autowired区别

  • @Autowired 是spring框架提供的注解,而@Resource 是JDK提供的注解
  • @Autowired 默认是安装类型注入,而@Resource默认是按照名称注入
http://www.dtcms.com/a/310994.html

相关文章:

  • Javascript面试题及详细答案150道之(016-030)
  • kong网关集成Safeline WAF 插件
  • 排序算法大全:从插入到快速排序
  • 通过解决docker network connect实现同一个宿主机不同网络的容器间通信
  • 深入理解 Docker 容器网络:为什么用 host 网络模式能解决连通性问题?
  • DockerFile文件执行docker bulid自动构建镜像
  • 前端手撕题总结篇(算法篇——来自Leetcode牛客)
  • mac 安装pytho3 和pipx
  • docker desktop入门(docker桌面版)(提示wsl版本太低解决办法)
  • uboot armv8 启动流程之 linker script
  • 电脑手机热点方式通信(下)
  • QT中使用OpenCV保姆级教程
  • Vue项目根据OpenAPI自动生成请求后端接口ts文件
  • 嵌入式 - 数据结构:数据结构基础与链表
  • opencv自定义滤波
  • 计算机网络:任播和负载均衡的区别
  • 机动车超时停车识别准确率↑32%:陌讯动态时序建模算法实战解析
  • c++显示优化
  • 原生JS使用svg-pan-zoom库平移和缩放svg
  • 【网络与爬虫 37】ScrapeFly深度解析:云端爬虫革命,告别复杂部署拥抱一键API
  • ICCV2025 | 对抗样本智能安全方向论文汇总 | 持续更新中~
  • 数字人开发01--后端服务配置
  • ABP VNext + Redis Bloom Filter:大规模缓存穿透防护与请求去重
  • 嵌入式第十八课!!数据结构篇入门及单向链表
  • Python 类三大方法体系深度解析:静态方法、类方法与实例方法
  • LeetCode 每日一题 2025/7/28-2025/8/3
  • js的BOM
  • Redis核心机制与实践深度解析:从持久化到分布式锁
  • 中科院开源HYPIR图像复原大模型:1.7秒,老照片变8K画质
  • 北斗变形监测在地质灾害预警中的应用