JavaWeb概述
JavaWeb概述
Java Web是指用Java语言来解决相关Web领域的技术总和,一个Web应用程序包括Web客户端和Web服务器两个部分,即基于B/S(浏览器/服务器)架构的应用程序。客户端通常是指用户机上的浏览器,如微软的IE浏览器或火狐浏览器等。客户端不需要开发任何用户界面,而统一采用浏览器即可。Web服务器是一台或多台可运行Web应用程序的计算机,通常我们在浏览器中输入的网站地址,即Web服务器的地址。当用户在浏览器的地址栏中输入网站地址并按回车键后,请求即被发送到 Web服务器。服务器接收到请求后,会返回给用户带有请求资源的响应消息。Java在服务器端的应用非常丰富,如Servlet、JSP和第三方框架等。
软件架构
随着网络技术的不断发展,单机的软件程序难以满足网络计算的需要,各种网络程序开发体系结构应运而生。其中运用最多的网络应用程序开发体系结构可以分为基于客户端/服务器的C/S结构和基于浏览器/服务器的B/S结构。
C/S架构
在C/S结构中服务器通常采用高性能的PC或工作站,并采用大型数据库系统(如Oracle或SQL Server);客户端则需要安装专用的客户端软件。这种结构可以充分利用两端硬件环境的优势,将任务合理地分配到客户端和服务器,从而降低了系统的通信开销。在2000年以前,该结构是网络程序开发领域的主流。
B/S架构
在B/S结构中客户端不需要开发任何用户界面,而统一采用IE或火狐等浏览器。通过Web浏览器向Web服务器发送请求,由Web服务器处理并将处理结果逐级传回客户端
两者的区别
- 开发和维护成本:C/S结构的开发和维护成本都比B/S高,采用这种结构必须为不同客户端开发不同的程序,而且软件的安装、调试和升级均要在所有的客户端上完成。例如,如果一个企业共有10个客户端使用一套C/S结构的软件,则都需要安装客户端程序。当这套软件即使进行微小的改动,系统维护员都必须卸载客户端原有的软件,然后安装新的版本并配置,维护工作必须进行10次。而B/S结构的软件则不必在客户端安装及维护,在软件升级后系统维护员只需要将服务器的软件升级到最新版本,所有客户端只要重新登录系统即可使用最新版本的软件。
- 客户端负载:C/S的客户端不仅负责与用户的交互、收集用户信息,而且还需要通过网络向服务器发送请求以处理数据库、电子表格或文档等。由此可见,应用程序的功能越复杂,客户端程序也就越庞大,这也给软件的维护工作带来了很大的困难。而B/S结构的客户端把事务处理逻辑部分交给服务器处理,客户端只需要显示,这样将使应用程序服务器的运行数据负荷较重。一旦发生服务器崩溃等问题,后果不堪设想。因此许多单位都备有数据库存储服务器,以防万一。
- 安全性:C/S结构适用于专人使用的系统,可以通过严格的管理派发软件达到保证系统安全的目的;B/S结构的软件由于使用的人数较多,且不固定,相对来说安全性就会低些。B/S相对于C/S具有更多的优势,现今大量应用程序开始应用B/S结构。许多软件公司也争相开发B/S版的软件,即Web应用程序。随着Internet的发展,基于HTTP协议和HTML标准的Web应用呈几何数量级增长,而这些Web应用又是由各种Web技术开发。
WEB技术的发展
早期的Web应用主要是静态页面的浏览(如新闻的浏览),这些静态页面使用HTML语言来编写,放在服务器上;用户使用浏览器通过HTTP协议请求服务器上的Web页面,服务器上的Web服务器软件接收到用户发送的请求后,读取请求URI所标识的资源,加上消息报头发送给客户端的浏览器;浏览器解析响应中的HTML数据,向用户呈现多姿多彩的HTML页面。
随着网络的发展,很多线下业务开始向网上发展,基于Internet的Web应用也变得越来越复杂,用户所访问的资源已不仅仅局限于在服务器硬盘上存放的静态网页,更多的应用需要根据用户的请求动态生成页面信息,复杂一些的还需要从数据库中提取数据,经过一定的运算,生成一个页面返回给客户。例如,通过Web浏览器想要查询本公司一年的销售报表,这个销售报表是根据一年的销售数据得出的,而这一年的销售数据非常多,通常都是存储在数据库中,当Web服务器端软件接收到客户端的请求,就需要从数据库中提取一年的数据,然后按照一定的统计规则,通过计算生成报表页面,发送到请求者的Web浏览器端。
早期使用的Web服务器扩展机制是CGI,它允许用户调用Web服务器上的CGI程序。CGI的全称是Common Gateway Interface,即公共网关接口,用户通过单击某个链接或者直接在浏览器的地址栏中输入URL来访问CGI程序。Web服务器接收到请求后,发现这个请求是给CGI程序的,于是就启动并运行这个CGI程序,对用户请求进行处理。CGI程序解析请求中的CGI数据,处理数据,并产生一个响应(通常是HTML页面)。这个响应被返回给Web服务器,Web服务器包装这个响应(例如添加消息报头),以HTTP响应的形式发送给Web浏览器。
然而CGI程序存在着一些缺点,主要是CGI程序编写困难、对用户请求的响应时间较长、以进程方式运行导致性能受限等。由于CGI程序的这些缺点,开发人员需要其他的CGI方案。1997年,SUN公司推出了Servlet技术,作为Java阵营的CGI解决方案。作为对微软ASP技术(1996年推出)的回应,SUN公司于1998年推出了JSP技术,允许在HTML页面中嵌入Java脚本代码,从而实现动态网页功能。
Servlet与Servlet容器
Servlet
Java Servlet(Java服务器小程序)是一个基于Java技术的Web组件,运行在服务器端,由Servlet容器所管理,用于生成动态的内容。Servlet是平台独立的Java类,编写一个Servlet,实际上就是按照Servlet规范编写一个Java类。Servlet被编译为平台独立的字节码,可以被动态地加载到支持Java技术的Web服务器中运行。目前Servlet规范最新的版本是4.0。
那么什么是Servlet容器呢?Servlet容器有时候也叫做Servlet引擎,是Web服务器或应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的请求,格式化基于MIME的响应。Servlet不能独立运行,它必须被部署到Servlet容器中,由容器来实例化和调用Servlet的方法,Servlet容器在Servlet的生命周期内包容和管理Servlet。
用户通过单击某个链接或者直接在浏览器的地址栏中输入URL来访问Servlet,Web服务器接收到该请求后,并不是将请求直接交给Servlet,而是交给Servlet容器。Servlet容器实例化Servlet,调用Servlet的一个特定方法对请求进行处理,并产生一个响应。这个响应由Servlet容器返回给Web服务器,Web服务器包装这个响应,以HTTP响应的形式发送给Web浏览器
与CGI程序相比,Servlet具有以下优点:
- Servlet是单实例多线程的运行方式,每个请求在一个独立的线程中运行,而提供服务的Servlet实例只有一个。
- Servlet具有可升级性,能响应更多的请求,因为Servlet容器使用一个线程而不是操作系统进程,而线程仅占用有限的系统资源。·Servlet使用标准的API,被更多的Web服务器所支持。
- Servlet使用Java语言编写,因此拥有Java程序语言的所有优点,包括容易开发和平台独立性。
- Servlet可以访问Java平台丰富的类库,使得各种应用的开发更为容易。
- Servlet容器给Servlet提供额外的功能,如错误处理和安全。
常见容器
web容器是一种服务程序,在服务器一个端口就有一个提供相应服务的程序,而这个程序就是处理从客户端发出的请求,如JAVA中的Tomcat容器,ASP的IIS或PWS都是这样的容器。一个服务器可以有多个容器。常见的web容器如下:
- Apache:Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,是目前世界上使用最广泛的一种web server,它以跨平台,高效和稳定而闻名,可以运行在几乎所有广泛使用的计算机平台上。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。
- Tomcat:Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
- JBOSS:是一个基于J2EE的开放源代码的应用服务器。 JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。
- Jetty:Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。
- Nginx:Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
JSP简介
使用Servlet产生动态网页,需要在代码中打印输出很多HTML的标签。此外,在Servlet中,我们不得不将静态显示的内容和动态产生内容的代码混合在一起。使用Servlet开发动态网页,程序员和网页编辑人员将无法一起工作,因为网页编辑人员不了解Java语言,无法修改Servlet的代码。为了解决这些问题,Sun公司后来又推出了JSP(Java Server Pages)技术。
JSP是一种建立在Servlet规范功能之上的动态网页技术。和ASP类似,它们都是在通常的网页文件中嵌入脚本代码,用于产生动态内容,不过JSP文件中嵌入的是Java代码和JSP标记。JSP文件在用户第一次请求时,会被编译成Servlet,然后再由这个Servlet处理用户的请求,所以JSP也可以看成是运行时的Servlet。
Tomcat 简介
在前面的小节中了解了常用的web容器,Tomcat具有开源、稳定、免费等特点,因此Tomca在JavaWeb开发中被广泛使用,在本小节内,就Tomcat容器进行学习。
Tomcat下载与安装
要下载Tomcat,首先访问Tomcat项目的网址:http://tomcat.apache.org/
在本书内,我们将使用Tomcat9,点击链接后,在页面内找到如下图所示位置并点击开始下载。注意:请根据安装JDK的位数下载Tomcat,而不是根据操作系统的位数。
在这里建议下载ZIP压缩包,通过解压缩的方式来安装Tomcat,因为解压缩的方式也适用于其他的操作系统(如Linux系统),并且更容易与其他的开发环境集成。
下载完毕后使用解压缩工具解压到指定目录即可。
Tomcat目录结构
Tomcat安装后的目录层次结构如图所示。
各个目录用途如下:
目录 | 用途 |
---|---|
/bin | 存放启动和关闭Tomcat的脚本文件 |
/conf | 存放Tomcat服务器的各种配置文件,其中包括server.xml ( Tomcat的主:要配置文件)、tomcat-users.xml和 web.xml等配置文件 |
/lib | 存放Tomcat服务器和所有Web应用程序需要访问的JAR文件 |
/logs | 存放Tomcat的日志文件 |
/temp | 存放Tomcat运行时产生的临时文件 |
/webapp | 当发布Web应用程序时,通常把Web应用程序的目录及文件放到这个目录下 |
/work | Tomcat将JSP生成的Servlet源文件和字节码文件放到这个目录 |
启动Tomcat
在Tomcat安装目录下的bin子目录中,有一些批处理文件(以.bat作为后缀名的文件),其中的startup.bat就是启动Tomcat的脚本文件,用鼠标双击这个文件,将看到一个窗口一闪而过,之后就什么也没有了,这说明Tomcat的启动出错了。
如何解决这个问题呢?在该文件点击右键,以记事本打开。在文件头部添加以下配置信息。
1 | #设置JDK安装目录 |
当Tomcat正常启动后,打开浏览器,在地址栏中输入http://localhost:8080/(localhost表示本地机器,8080是Tomcat默认监听的端口号),将出现如图所示的Tomcat页面。
注意图中“Documentation”,单击这个链接将进入Tomcat的文档页面,有关Tomcat的帮助信息可以在文档页面中找到;读者也可以直接访问Tomcat的文档,文档首页的位置是Tomcat安装目录下的webapps\docs\index.html。如果要关闭Tomcat服务器,可以用鼠标双击Tomcat bin目录下的shutdown.bat文件。
如果Tomcat启动失败,有可能是因为TCP的8080端口被其他应用程序所占用,如果你知道是哪一个应用程序占用了8080端口,那么先关闭这个程序。如果你不知道或者不想关闭占用8080端口的应用程序,那么你可以修改Tomcat默认监听的端口号。
HTTP协议
Web使用一种名为HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为规范,完成从客户端到服务器端等一系列运作流程。而协议是指规则的约定。可以说,Web是建立在HTTP协议上通信的。
HTTP简介
1989年3月,CERN(欧洲核子研究组织)的蒂姆·伯纳斯-李(Tim Berners-Lee)博士提出了一种能让远隔两地的研究者们共享知识的设想。最初设想的基本理念是:借助多文档之间相互关联形成的超文本(HyperText),连成可相互参阅的WWW(World Wide Web,万维网)。现在已提出了3项WWW构建技术,分别是:把SGML(Standard GeneralizedMarkup Language,标准通用标记语言)作为页面的文本标记语言的HTML(HyperText Markup Language,超文本标记语言);作为文档传递协议的HTTP;指定文档所在地址的URL(Uniform Resource Locator,统一资源定位符)。WWW这一名称,是Web浏览器当年用来浏览超文本的客户端应用程序时的名称。现在则用来表示这一系列的集合,也可简称为Web。
- HTTP/0.9:HTTP于1990年问世。那时的HTTP并没有作为正式的标准被建立。这时的HTTP其实含有HTTP/1.0之前版本的意思,因此被称为HTTP/0.9。
- HTTP/1.0:HTTP正式作为标准被公布是在1996年的5月,版本被命名为HTTP/1.0,并记载于RFC1945。虽说是初期标准,但该协议标准至今仍被广泛使用在服务器端。
- HTTP/1.1:1997年1月公布的HTTP/1.1是目前主流的HTTP协议版本。当初的标准是RFC2068,之后发布的修订版RFC2616就是当前的最新版本。
可见,作为Web文档传输协议的HTTP,它的版本几乎没有更新。新一代HTTP/2.0也正在被广泛使用。
HTTP报文
用于HTTP协议交互的信息被称为HTTP报文。请求端(客户端)的HTTP报文叫做请求报文,响应端(服务器端)的叫做响应报文。HTTP报文本身是由多行(用CR+LF作换行符)数据构成的字符串文本。
请求报文
请求报文大致可分为请求行、请求头、请求体。通常,并不一定要有报文主体。
请求报文和响应报文的首部内容由以下数据组成。
- 请求行:请求行包括请求方式,GET和POST是常见的两种方式,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE;除此之外还包括请求的URL地址和远程服务器地址。
- 请求头:请求头包含了若干属性,如请求报文长度,cookie等内容
- 请求体:请求体即客户端向服务端发送的数据,在GET请求中请求体放在QueryString中,POST请求则是放置在Form Data中。
响应报文
响应报文也由三部分组成响应行、响应头、响应体。
- 响应行:响应行包括报文协议及版本,响应状态码及描述等等
- 响应头:响应头中包含了若干属性
- 响应体:即响应报文体,可以理解为服务器向客户端发送的数据。
HTTP状态码
状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。状态码如200 OK,以3位数字和原因短语组成。数字中的第一位指定了响应类别,后两位无分类。响应类别有以下5种。
状态码 | 类别 | 原因短语 |
---|---|---|
1XX | Informational(信息状态码) | 接收的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行复检操作以完成请求 |
4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error(服务器错误状态码) | 服务器处理请求出错 |
在web开发中常见的响应状态码如下:
200:请求成功
304:重定向
404:资源未找到
403:禁止访问
405:请求类型不能处理
500:服务端错误
HTTP请求方式
HTTP请求总共有8种请求方式,下面就这8种方式进行简单的介绍:
- GET:GET方法用来请求访问已被URI识别的资源。指定的资源经服务器端解析后返回响应内容。也就是说,如果请求的资源是文本,那就保持原样返回。
- POST:POST方法用来传输实体的主体。
- PUT:PUT方法用来传输文件。就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。
- HEAD:HEAD方法和GET方法一样,只是不返回报文主体部分。
- DELETE:DELETE方法用来删除文件,是与PUT相反的方法。DELETE方法按请求URI删除指定的资源。
- OPTIONS:OPTIONS方法用来查询针对请求URI指定的资源支持的方法。
- TRACE:TRACE方法是让Web服务器端将之前的请求通信环回给客户端的方法。
- CONNECT:CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信
在这8种请求当中,最常用的是GET和POST两种,因此着重了解这两种即可。
URI和URL
URI
URI是Uniform Resource Identifier的缩写。RFC2396分别对这3个单词进行了如下定义。
Uniform:规定统一的格式可方便处理多种不同类型的资源,而不用根据上下文环境来识别资源指定的访问方式。另外,加入新增的协议方案(如http:或ftp:)也更容易。
Resource:资源的定义是“可标识的任何东西”。不仅是文档文件,图像或服务(例如当天的天气预报)等能够区别于其他类型的,全都可作为资源。另外,资源不仅可以是单一的,也可以是多数的集合体。
Identifier:表示可标识的对象。也称为标识符。
综上所述,URI就是由某个协议方案表示的资源的定位标识符。协议方案是指访问资源所使用的协议类型名称。采用HTTP协议时,协议方案就是http。除此之外,还有ftp、mailto、telnet、file等。标准的URI协议方案有30种左右。
下面列举几种URI的例子:
1 | ftp://ftp.za/res/a.txt |
表示指定的URI,要使用涵盖全部必要信息的绝对URI、绝对URL以及相对URL。相对URL,是指从浏览器中基本URI处指定的URL,形如 /image/logo.gif。先来了解一下绝对URI的格式。
1 | http://www.example.ip:80/dir/index.html?id=1 |
URL
统一资源定位系统(uniform resource locator;URL)是因特网的万维网服务程序上用于指定信息位置的表示方法。
Internet上的每一个网页都具有一个唯一的名称标识,通常称之为URL地址,这种地址可以是本地磁盘,也可以是局域网上的某一台计算机,更多的是Internet上的站点。简单地说,URL就是Web地址,俗称“网址”。URL可以说是URI的子集
Maven简介
是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
约定目录
Maven只是一个项目构建和打包工具,不针对于特定的平台,和开发工具,因此Maven项目对项目目录进行了一些约定,约定如下:
目录 | 目的 |
---|---|
${basedir} | 存放pom.xml和所有的子目录 |
${basedir}/src/main/java | 项目的java源代码 |
${basedir}/src/main/resources | 项目的资源,比如说property文件,springmvc.xml |
${basedir}/src/test/java | 项目的测试类,比如说Junit代码 |
${basedir}/src/test/resources | 测试用的资源 |
${basedir}/src/main/webapp/WEB-INF | web应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面 |
${basedir}/target | 打包输出目录 |
${basedir}/target/classes | 编译输出目录 |
${basedir}/target/test-classes | 测试编译输出目录 |
Test.java | Maven只会自动运行符合该命名规则的测试类 |
~/.m2/repository | Maven默认的本地仓库目录位置 |
Pom.xml简介
POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。
执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。
POM 中可以指定以下配置:
- 项目依赖
- 插件
- 执行目标
- 项目构建 profile
- 项目版本
- 项目开发者列表
- 相关邮件列表信息
所有 POM 文件都需要 project 元素和三个必需字段:groupId,artifactId,version。
节点 | 描述 |
---|---|
project | 工程的根标签。 |
modelVersion | 模型版本需要设置为 4.0 |
groupId | 这是工程组的标识。它在一个组织或者项目中通常是唯一的。例如,一个银行组织 com.companyname.project-group 拥有所有的和银行相关的项目。 |
artifactId | 这是工程的标识。它通常是工程的名称。例如,消费者银行。groupId 和 artifactId 一起定义了 artifact 在仓库中的位置。 |
version | 这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。例如: |
scope就是依赖的范围
- compile,默认值,适用于所有阶段(开发、测试、部署、运行),本jar会一直存在所有阶段。
- provided,只在开发、测试阶段使用,目的是不让Servlet容器和你本地仓库的jar包冲突 。如servlet.jar。
- runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
- test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
- system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它
Maven生命周期
Maven 构建生命周期定义了一个项目构建跟发布的过程。
一个典型的 Maven 构建(build)生命周期是由以下几个阶段的序列组成的:
阶段 | 处理 | 描述 |
---|---|---|
验证validate | 验证项目 | 验证项目是否正确且所有必须信息是可用的 |
编译 compile | 执行编译 | 源代码编译在此阶段完成 |
测试 Test | 测试 | 使用适当的单元测试框架(例如JUnit)运行测试。 |
包装 package | 打包 | 创建JAR/WAR包如在 pom.xml 中定义提及的包 |
检查 verify | 检查 | 对集成测试的结果进行检查,以保证质量达标 |
安装 install | 安装 | 安装打包的项目到本地仓库,以供其他项目使用 |
部署 deploy | 部署 | 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程 |
为了完成 default 生命周期,这些阶段(包括其他未在上面罗列的生命周期阶段)将被按顺序地执行。
Maven 有以下三个标准的生命周期:
- clean:项目清理的处理
- **default(或 build)**:项目部署的处理
- site:项目站点文档创建的处理
Maven仓库
在 Maven 的术语中,仓库是一个位置(place)。
Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。
在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。
Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方。
Maven 仓库有三种类型:
- 本地(local)
- 中央(central)
- 远程(remote)
本地仓库
Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。
运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。
默认情况下,不管Linux还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/respository/ 的仓库目录。
1 | <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" |
中央仓库
Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。
中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到。
中央仓库的关键概念:
- 这个仓库由 Maven 社区管理。
- 不需要配置。
- 需要通过网络才能访问。
远程仓库
如果 Maven 在中央仓库中也找不到依赖的文件,它会停止构建过程并输出错误信息到控制台。为避免这种情况,Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。