3.maven的基本原理和使用
maven:是一款管理和构建java项目的工具
3.1作用
1.依赖管理-方便快捷的管理项目管理(jar包),避免版本冲突问题。2。统一项目结构-提供标准,统一的项目结构。main-实际项目资源。java-java源代码目录。resources-配置文件目录。pom.xml-项目配置文件。3.项目建构-标准跨平台的自动化项目构建方式。
//仓库:用于存储资料,管理各种jar包--本地仓库:自己计算机上的目录。中央目录:由Maven团队维护的一个目录。远程仓库/私服:一般由公司团队搭建的私有仓库。
//maven坐标:资源的唯一标识,通过该坐标可以唯一定位资源的位置。使用坐标来定义项目或引入项目中需要的依赖。--groupid:定义当前Maven项目隶属组织名称(域名反写)。artifactid:定义当前Maven项目名。version:定义当前项目版本号
3.2依赖管理
-
依赖配置<dependency>:指当前项目运行所需要的jar包,一个项目中可以引入多个依赖
-
依赖传递:依赖具有传递性-直接依赖:在当前项目中通过依赖配置建立的依赖关系。间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源。排除依赖<exculsions>:主动断开依赖的资源,被排除的资源无需指定版本。
-
依赖范围<scope>:依赖的jar包,默认compile情况下可以在任何地方使用。
main主程序范围有效,test测试程序范围有效,是否参与打包运行。
-
生命周期:为了对所有的maven项目构建过程进行抽象和统一
独立的生命周期:clean清理工作、default核心工作(编译,测试,打包,安装,布署...)。site生成报告,发布站点。
生命周期阶段:每套生命周期包含一些阶段,阶段是有顺序的,后面的阶段依赖于前面的阶段--
clean:移除上一次构建生成的文件
compile:编译项目源代码
test:使用合适的单元测试框架运行测试
package:将编译后的文件打包,如jar,war
install:安装项目到本地仓库
在同一套的生命周期中,当运行后面的阶段时,前面的阶段都会运行。
3.3分模块设计与开发
--将项目按照功能拆分成若干子模块,方便项目的管理与维护、拓展,也方便模块间的相互调用,资源共享。
*分模块开发需要先针对模块功能进行设计,在进行编码。不会先将工程开发完毕,然后进行拆分。
3.4继承
3.4.1继承关系
--<parent>继承描述的是两个工程之间的关系,与java中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承
作用:简化依赖配置,统一管理依赖
打包方式:jar:普通模块打包,springboot项目基本上都是jar包(内嵌tomcat运行)。war:普通web程序打包,需要部署在外部的tomcay服务器中运行。pom:父工程或聚合工程,该模块不写代码,仅进行依赖管理。
*在子工程中,配置了继承关系之后,坐标中的groupid可以省略,因为会自动继承父工程的
*relativePath指定父工程的pom文件的相对位置(如果不指定,将会从本地仓库/远程仓库查找该项目)
3.4.2版本锁定
在maven中,可以在父工程的pom文件中通过<dependecyManagement>来统一管理依赖版本
*子工程引入依赖时,无需指定<version>版本号,父工程统一管理。变更依赖版本,只需在父工程中统一变更。
<dependencies>是直接依赖,在父工程配置了依赖,子工程会直接继承下来
<dependencyManagement>是统一管理依赖版本,不会直接依赖,还需要在子工程中引入所需版本(无需指定版本)
3.5聚合
--<module>将多个模块组织成一个整体,同时进行项目构建
作用:用于快速构建项目
聚合工程:一个不具有业务功能的空工程(有且仅有一个pom文件)
*聚合工程中所包含的模块,在构建时,会自动根据模块间的依赖关系设置构建顺序,与聚合工程中模块的配置书写位置无关
3.6继承与聚合
相同点:聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中。聚合与继承均属于设计性模块,并无实际的模块内容
不同点:聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些。继承实在子模块中配置关系,父模块无法感知哪些子模块继承了自己
3.7私服
--是一种特殊的远程的仓库,它在架设在局部网内的仓库服务,用来代理位于外部的中央仓库,用于解决团队内部的资源共享与资源同步问题
1、Servlet执行原理
1、浏览器根据请求的地址(ip/协议/端口)建立与服务器的连接
2、浏览器将请求数据打包
3、容器将请求解析,封装成俩个对象
请求-HttpServletRequest – 封装的请求数据
响应-HttpServletResponse – 返回给服务器
4、容器根据具体的请求地址—找到对应的servlet创建对象
5、容器将请求和响应作为参数传递,调用对应的请求方法
6、数据写入到输出流
7、容器将响应对象打包发给浏览器
8、浏览器读取到响应的数据,渲染页面