maven
介绍
管理和构建java项目的工具 基于项目对象模型(POM project object model)的概念,通过一小段描述信息来管理项目的构建
作用
依赖管理
方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题
统一项目结构
提供标准,统一的项目结构
项目构建
标准跨平台的自动化项目构建方式
安装
下载maven
http:// http://maven.apache.org/
zip则解压
配置本地仓库
需要新建一个目录mvn_repo
修改conf/settings.xml中的<localRepository>为一个指定目录库 大概在53行
<Repository>D:\apache-meaven\apache-maven-3.8.8\mvn_repo</localRepository>
配置阿里云私服
修改config/settings.xml中的<mirrors>标签,添加如下子标签148行
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
配置环境便变量
MAVEN-HOME为maven的解压目录,并将其bin目录加入PATH环境变量
测试
cmd中 mvn -v
IDEA集成Maven
去官网下载idea2021.1.1版本
先创建空项目
empty project
配置maven环境
第一种方法
打开project structure的project settings, sdk里设置jdk language level设置为所选jdk版本, apply, ok
打开file settings build 下的build tool, maven 的patyh设置为maven安装目录,设置user settings file选为apache-meaven下的config下的settings.xml 应用,maven下的runner,jre选择jdk版本
build下的compiler下的java compiler设置project bytecode version设置为jdk版本号
都需要apply 和ok
第二种配置maven环境(全局)
点击file 下的close project选择customize下的all settings..其余过程和上述一样(即配置path,user settings file 选择jdk版本号)
创建maven项目
选择模块创建maven
file, new module 创建模块选择maven,点击next
点击artificial配置 填写模块名称,坐标信息,finish,artifactld(模块名)
注意路径要设置到所创建的目录中
archetype选择如下这个是最新版本的可以不看
maven-archetype-profiles
jar
main/java
& main/resources
& test/java
test目录下新建resources文件夹
编写代码,并运行
main java下创建类java class连包带类com...前面为包名后面为类名
class中编写main方法
public static void main(String[] args) {
System.out.println("hello maven");
}
运行
maven坐标
资源的唯一表示,通过该坐标可以唯一定位资源位置
groupid:定义maven项目隶属组织名称(通常为域名反写)
artifactld:定义当前maven项目名称(通常是模块名称)
version:当前项目版本号
导入maven项目
点击右侧maven里面的加号就可以导入pom.xml(或者 点击file 里面选project structure 选modules上面的加号 import module选pom.xml文件)
点击项目右击remove module为删除
依赖管理
依赖配置
依赖
是指当前项目运行所需要的jar包,已给项目中可以引入多个依赖
配置
pom.xml中编写<dependencies>标签
<dependencies>中使用<dependency>引入坐标
定义坐标的groupld,artifacld,version
不知道依赖可以到https://mvnrepository.com/中搜索
点击刷新按钮,引入最新加入的坐标load maven changes
可以在maven里的dependency里检查
依赖传递
依赖具有传递性
直接依赖:当前项目中通过依赖配置建立的依赖关系
间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
排除依赖:主动断开依赖的资源,被排除的资源无需指定版本
依赖范围
依赖的jar包,默认可以在任何地方使用,通过<scope>..</scope>设置作用范围
作用范围
主程序范围有效(main文件夹范围内)
测试程序范围有效(test文件夹范围内)
是否参与打包运行(package指令范围内)
生命周期
概念
对所有的maven项目构建过程进行抽象和统一
maven有3套互相独立的生命周期
clean:包含(phase)clean:移除上一次构建生成的文件
default:核心工作,编译,测试,打包,安装,部署等
compite:编译项目源代码
test:使用合适的单元测试框架运行测试(juniit)
package:将编译后的文件打包 如jar,war
install:安装项目到本地仓库
site:生成报告,发布站点等
每套生命周期包含一些阶段(phase),阶段有顺序,后面的阶段依赖于前面的阶段
同一套生命周期中,运行后面的阶段时,前面的阶段都会运行
执行:
maven工具栏,选中对应的生命周期,双击执行 (或者在命令行中 mvn clean(compile/package/test))
SpringBootWeb入门
ideal实例
创建springboot工程,勾选web开发相关依赖
新建module
选择 spring initiallzr
dependencies:web中选:spring web依赖
定义HelloController类,添加方法hello,和注解
在包上新建javaclass:包和类
新建的类中代码如下
package com.itheima.springbootwebquicktstart.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
System.out.println("HelloWorld");
return "HelloWorld";
}
}
运行测试
运行main方法
浏览器中 localhost:8080/hello
HTTP协议
概述
hyper text transfer protocol超文本传输协议,规定了浏览器和服务器之间数据传输的原则
特点
1基于TCP协议:面向连接,安全
2基于请求-响应模型的:一次请求对应一次响应
3HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求都是独立的
缺点:多次请求间不能数据共享
优点:速度快
请求协议
HTTP-请求数据格式
响应协议
状态码大类
1xx 响应中--临时状态码,表示请求已经接受,告诉客户端应该继续请求或者如果他已经完成则忽略他
2xx 成功--表示请求已经被成功接收,处理完成
3xx 重定向--重定向到其他方向,它让客户端再发起一个请求以完成整个处理
4xx 客户端错误--处理发生错误,责任在客户端 如:客户端的请求一个不存在的资源,客户端未被授权,禁止访问等
5xx 服务器端错误--处理发生错误,责任在服务端 如:服务端抛出异常,路由出错,HTTP版本不支持
常见的状态响应码
200 OK 客户端请求成功,即处理成功
404 Not Found 请求资源不存在,一般是url输入有误或者网站资源被删除
500 Internal Server Error 服务器发生不可预期的错误。服务器出异常了,去日志看看
状态码大全:https://blog.csdn.net/weixin_63149034/article/details/126365189
响应头
Content-Type表示该响应内容的类型,例如text/html,application/json
Content-Length 表示该响应内容得长度(字节数)
Content-Encoding 表示该响应压缩算法.例如gzip
Cache-Control指示客户端应如何缓存.例如max-age=300表示最多缓存300秒
Set-Cookie告诉浏览器为当前页面所在的域设置cookie
协议解析
web服务器-Tomcat
web服务器
是一个软件程序,对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让web开发更加便捷。
部署web项目主要功能是“提供网上信息浏览服务”
Tomcat简介
开源免费轻量级web服务器,支持Servlet/JSP少量JavaEE(java企业级开发的技术规范总合)规范 也被称为web容器,servlet容器。servlet程序需要依赖tomcat才能运行
基本使用
bin 可执行文件
conf 配置文件
lib tomcat依赖的jar包
logs 日志文件
temp 临时文件
webapps 应用发布目录
work 工作目录
启动:双击bin\startup.bat
控制台中文乱码 在51行:修改conf/logging.properties
关闭:
直接x掉运行窗口:强制关闭
bin/shutdown.bat:正常关闭
ctrl+c:正常关闭
常见问题
启动窗一闪而过:检查JAVA_HOME环境变量是否正确配置
端口号冲突:找到对应程序,将其关闭
打开任务管理器 详细信息 输入j 结束掉所有java进程
配置tomcat端口号(conf/server.xml)69行
注意事项:HTTP协议默认端口号为800,若将tomcat端口号改为80,将来访问tomcat时,不用输入端口号
Tomcat部署
将项目放置到webapps目录下,完成部署
入门程序解析
SpringBootWeb入门程序解析
起步依赖:
spring-boot-starter-web包含了web应用开发所需要的常见依赖
spring-boot-starter-test包含了单元测试所需要的常见依赖
官方所提供的starter:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using.build-systems.starters
内嵌tomcat服务器
启动类运行时,自动启动内嵌的tomcat服务器
请求响应
请求(HttpServletRequest):获取请求数据
响应(HttpServletResponse):设置响应数据
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据存储在服务器(维护方便 体验一般)
CS架构:Client/Server,客户端/服务器架构模式。(开发,维护麻烦 体验不错)
请求:
postman
网页调试与发送网页HTTP请求的Chrome插件
作用:常用于进行接口测试
使用:
点击 create workspace
点击加号“+” 请求方式 请求路径
保存
简单参数
原始方式
springboot方式
简单参数:参数名与形参变量名相同,定义形参即可接收参数
若方法形参名称与请求参数名称不匹配,可以使用@RequestParam完成以映射
@RequestParam中的required属性默认为true,代表该请求参数必须传递,不传递将报错。
可将required属性设置为false
实体参数
简单实体对象:
请求参数名与形参对象属性名相同,定义POJO接收即可
复杂实体对象
请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套pojo属性参数
数组集合参数
数组参数:
请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数
集合参数
请求参数名与形参集合名称相同且请求参数为多个,@RequestParam绑定参数关系
日期参数
日期参数
使用@DateTimeFormat注解完成日期参数格式转换
Json参数
JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要@RequestBody标识
路径参数
通过请求URL直接传递参数,使用{...}来标识该路径的参数,需要使用@PathVariable获取路径参数
响应
响应数据
@ResponseBody
类型:方法注解,类注解
位置:Controller方法上/类上
作用:将方法返回值直接响应,若返回值类型是实体对象/集合,将转换为JSON格式响应
说明:@RestController=@Controller+@ResponseBody;
统一响应结果
案例
获取员工数据,返回统一响应结果,在页面渲染展示
在pom.xml文件中引入dom4j的依赖,用于解析XML文件
<dependencies>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
</dependencies>
之后点击maven的刷新
引入资料中提供的解析XML的工具类XMLParserUtils,对应的实体类Emp,XML文件emp.xml
java项目中中新建包utils ,将工具类放入
实体类emp放入java中pojo目录下
emp.xml放入resources中
引入资料中提供的静态页面文件,放在resources下的static目录下
编写Controller程序,处理请求,响应数据
包中新建java类
编写程序
最后启动springboot
分层解耦
三层架构
controller:控制层,接受前端发送的请求,对请求进行处理,并响应数据
service:业务逻辑层,处理具体的业务逻辑
dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增删改查
分层解耦
内聚
软件中各个功能模块内部的功能联系
耦合
衡量软件中各个层/模块之间的依赖,关联程度
软件设计原则:
高内聚低耦合
分层解耦
控制反转:
inversion of control简称 ioc。对象的创建控制权由程序自身转移到外部(容器),
依赖注入
dependency injection简称DI ,容器为应用程序提供运行时,所依赖的资源,
bean对象
IOC容器中创建,管理的对象,称之为bean
IOC&DI入门
1service层及dao层的实现类,交给IOC容器
加上@Compoent //将当前类交给IOC容器管理,成为IOC容器中的bean
2为controller及service注入运行时,依赖的对象
加上@Autowired //运行时,IOC容器会提供该类型的bean对象,并赋值给该变量 --依赖注入
3运行测试
IOC详解
Bean的声明
要把某个对象交给IOC容器管理,需要在对应的类上加上如下注解之一:
@Component 声明bean的基础注解 不属于以下三类时,用此注解
@Controller @Component的衍生注解 标注在控制器类上
@Service @Component的衍生注解 标注在业务类上
@Repository @Component的衍生注解 标注在数据访问类上(与mybatis整合,用的少)
声明bean的时候,可以通过value属性指定bean的名字,若没有指定,默认为类名首字母小写
使用以上四个注解都可以声明bean,但是在springboot集成web开发中,声明控制器bean只能用@Controller
bean组件扫描
前面声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描
@ComponentScan注解虽然没有显式配置,但实际上已经包含在了启动类声明注解@SpringBootApplication中,默认扫描的范围是启动类所在的包及其子包
DI详解
bean注入
@Autowired注解,默认是按照 类型 进行,如果存在多个相同类型的bean,报错:
解决:
@Primary @Autowired(spring)+@Qualifier @Resource(JDK提供的注解,默认按名称注入)