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服务器处理并将处理结果逐级传回客户端

两者的区别

  1. 开发和维护成本:C/S结构的开发和维护成本都比B/S高,采用这种结构必须为不同客户端开发不同的程序,而且软件的安装、调试和升级均要在所有的客户端上完成。例如,如果一个企业共有10个客户端使用一套C/S结构的软件,则都需要安装客户端程序。当这套软件即使进行微小的改动,系统维护员都必须卸载客户端原有的软件,然后安装新的版本并配置,维护工作必须进行10次。而B/S结构的软件则不必在客户端安装及维护,在软件升级后系统维护员只需要将服务器的软件升级到最新版本,所有客户端只要重新登录系统即可使用最新版本的软件。
  2. 客户端负载:C/S的客户端不仅负责与用户的交互、收集用户信息,而且还需要通过网络向服务器发送请求以处理数据库、电子表格或文档等。由此可见,应用程序的功能越复杂,客户端程序也就越庞大,这也给软件的维护工作带来了很大的困难。而B/S结构的客户端把事务处理逻辑部分交给服务器处理,客户端只需要显示,这样将使应用程序服务器的运行数据负荷较重。一旦发生服务器崩溃等问题,后果不堪设想。因此许多单位都备有数据库存储服务器,以防万一。
  3. 安全性: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
2
3
4
#设置JDK安装目录
SET JAVA_HOME=D:\Java\jdk1.8.0_151
#解压后的tomcat文件目录
SET TOMCAT_HOME=E:\tomcat-6.0.35

当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
2
3
ftp://ftp.za/res/a.txt
http://www.bytecollege.cn/res/a.txt
tel:+1-816-555-1212

表示指定的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就是依赖的范围

  1. compile,默认值,适用于所有阶段(开发、测试、部署、运行),本jar会一直存在所有阶段。
  2. provided,只在开发、测试阶段使用,目的是不让Servlet容器和你本地仓库的jar包冲突 。如servlet.jar。
  3. runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
  4. test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
  5. 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
2
3
4
5
6
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>C:/MyLocalRepository</localRepository>
</settings>

中央仓库

Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。

中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到。

中央仓库的关键概念:

  • 这个仓库由 Maven 社区管理。
  • 不需要配置。
  • 需要通过网络才能访问。

远程仓库

如果 Maven 在中央仓库中也找不到依赖的文件,它会停止构建过程并输出错误信息到控制台。为避免这种情况,Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。