目录
[六、Maven 坐标](#六、Maven 坐标)
[groupId 是什么?](#groupId 是什么?)
[artifactId 是什么?](#artifactId 是什么?)
[version 是什么?](#version 是什么?)
[七、通过 Maven 坐标快速引入第三方依赖](#七、通过 Maven 坐标快速引入第三方依赖)
[1.在 Maven 中央仓库查找依赖](#1.在 Maven 中央仓库查找依赖)
[2. 将依赖添加到 pom.xml](#2. 将依赖添加到 pom.xml)
[3. Maven 的依赖下载流程](#3. Maven 的依赖下载流程)
[八、创建一个基于 Maven 的 Web 项目](#八、创建一个基于 Maven 的 Web 项目)
[1. 使用命令行快速创建](#1. 使用命令行快速创建)
[2.使用 IDEA 图形界面创建 Maven Web 项目](#2.使用 IDEA 图形界面创建 Maven Web 项目)
[3.添加 Servlet 依赖](#3.添加 Servlet 依赖)
[4.编写一个简单的 Servlet](#4.编写一个简单的 Servlet)
[5.在 web.xml 中配置 Servlet 映射](#5.在 web.xml 中配置 Servlet 映射)
[6.配置 Tomcat 启动](#6.配置 Tomcat 启动)
[8.访问路径与 Servlet 映射解析](#8.访问路径与 Servlet 映射解析)
六、Maven 坐标
在 Maven 中,每一个构件(Artifact)都必须拥有一组唯一的坐标 来标识它的身份,类似于身份证号。
这组坐标由以下三个核心字段组成:

字段 | 作用 | 类比 |
---|---|---|
groupId |
组织/团队的唯一标识,类似 Java 包名,通常使用倒写的域名,避免重名冲突。 | 公司名 / 域名 |
artifactId |
项目或模块的唯一名称,用来区分不同的构件。 | 产品名 / 模块名 |
version |
当前构件的版本号。 | 产品版本号 |
Maven 会使用这三者拼接出一个构件的唯一坐标,例如:
com.ma:hi:1.0-SNAPSHOT
groupId 是什么?
groupId 用来标识项目所属的 组织 / 公司 / 团队 / 域名空间,具有全局唯一性,类似于 Java 的包名。
例如:
Spring Framework 的 groupId:org.springframework
MyBatis 的 groupId:org.mybatis
推荐使用「倒写域名」的命名方式:
域名:mycompany.cn → groupId:cn.mycompany
域名:example.com → groupId:com.example
这样命名可以有效避免命名冲突。
artifactId 是什么?
artifactId 是项目(或模块)的唯一名称,用来标识具体的构件。
命名规范:
使用小写字母
多个单词用 - 分隔,例如:user-service
避免空格和特殊字符
简洁明确,能代表项目或模块的作用
可以这样理解:
groupId = 谁的(哪个组织/团队)
artifactId = 什么(哪个模块/项目)
version 是什么?
version 表示这个构件的版本号,便于 Maven 和开发者进行依赖管理和版本控制。
常见格式:
1.0.0 → 稳定版本
1.0-SNAPSHOT → 快照版本(表示开发中、可能随时变化)
2.3.1-beta → 测试/预发布版本
Maven 在下载依赖时,会根据 version 精确匹配对应的 jar 包。
一个完整坐标的作用
Maven 仓库中,所有的 jar 包、插件、依赖项,都是通过这三段坐标来唯一标识的。
例如,在 pom.xml 中添加依赖:
XML
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.2.4</version>
</dependency>
这表示:
从仓库中下载 org.springframework.boot 组织发布的 spring-boot-starter-web 这个模块的 3.2.4 版本。
Maven 的坐标(groupId + artifactId + version)就像每个模块的身份证,确保 Maven 能在庞大的中央仓库中准确地定位、下载和管理依赖。
七、通过 Maven 坐标快速引入第三方依赖
在使用 Maven 之前,我们需要手动下载 jar 包、放到 lib 目录,还要一个个加进构建路径,繁琐又容易出错。
Maven 则通过坐标来自动从远程仓库下载并管理依赖。只需在 pom.xml 中声明坐标,剩下的由 Maven 完成。
1.在 Maven 中央仓库查找依赖
Maven Repository: Search/Browse/Explore
在搜索框输入你需要的依赖名称
例如,mysql ,点击进入 mysql-connector-j 详情页,选择一个版本

点进去,可以看到如下坐标信息:

2. 将依赖添加到 pom.xml
将上面这段坐标信息复制到项目的 pom.xml 文件的 <dependencies> 标签中,例如:

保存后,Maven 会自动从远程仓库(如中央仓库或国内镜像)下载该 jar 包及其传递依赖,并缓存在本地仓库中。
3. Maven 的依赖下载流程
当添加坐标并执行 mvn compile 或 mvn install 等命令时,Maven 会按照以下流程解析依赖:
XML
pom.xml → 查找坐标 → 本地仓库是否存在?
├─ 是 → 直接使用
└─ 否 → 连接远程仓库 → 下载 Jar → 保存到本地仓库 → 使用
整个过程无需手动参与,只要坐标正确,就能自动完成依赖的引入与管理。
八、创建一个基于 Maven 的 Web 项目
1. 使用命令行快速创建
输入:
XML
mvn archetype:generate -DgroupId=com.ma -DartifactId=demo-web -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

创建成功:

参数解释:
参数 | 作用 |
---|---|
-DgroupId |
组织或包名,例如 com.ma |
-DartifactId |
项目名称,也是目录名 |
-DarchetypeArtifactId |
使用的骨架模板,这里是 maven-archetype-webapp (Web 项目) |
-DinteractiveMode=false |
关闭交互模式,自动创建 |
同时 D:\work 下会多出一个 demo-web 文件夹,结构如下:
css
demo-web/
├─ src/
│ ├─ main/
│ │ ├─ java/ ← 存放 Java 代码
│ │ ├─ resources/ ← 配置文件
│ │ └─ webapp/ ← 前端资源 + WEB-INF/web.xml
│ │ └─ WEB-INF/
│ │ └─ web.xml
├─ pom.xml
└─ ...

到这里,就创建了一个标准的 Maven Web 项目(打包类型是war)。
2.使用 IDEA 图形界面创建 Maven Web 项目
首先,new 一个 Project

创建以后的项目结构:

此时,src/main/java 不存在,我们自己手动新建一个。
3.添加 Servlet 依赖
Maven 的 maven-archetype-webapp 默认没有 Java 代码依赖,所以我们需要在 pom.xml 里加入 Servlet API:
在 <dependencies> 标签中添加
XML
<!-- Servlet API(只在编译期使用,Tomcat 会在运行时提供) -->
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version>
<scope>provided</scope>
</dependency>
pom.xml

**注意:**scope 必须是 provided,因为 Tomcat 自带 Servlet 容器,避免打包进 war 冲突。
4.编写一个简单的 Servlet
在 src/main/java/com/ma/servlet/ 下新建 HelloServlet.java

java
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("<h1>Hello, Servlet!</h1>");
}
}
这里继承的是 HttpServlet,重写 doGet 方法,返回一段 HTML。
5.在 web.xml 中配置 Servlet 映射
打开 src/main/webapp/WEB-INF/web.xml,添加以下内容:
XML
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0">
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>com.ma.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
6.配置 Tomcat 启动
选择本地的Tomcat

在Deployment 里面点击 + ,选择

点击ok以后,可以更改Application context

运行Tomcat,此时

对应了index.jsp

小提示: 在传统的 Java Web 项目中,当我们访问 http://localhost:8080/demo_web1/
而没有指定具体文件名时,Tomcat 会根据 Web 应用的欢迎文件配置 (welcome-file-list) 自动查找并返回 index.jsp 或 index.html 等页面。
默认情况下,Maven Web 项目会在 webapp 目录下生成一个 index.jsp, Tomcat 将其识别为默认首页,因此直接访问项目根路径时就会自动显示该页面内容。
7.解决jsp乱码问题
在 JSP 页面中,如果将页面内容改成中文,例如:

访问时可能会出现:

这其实是 页面文件编码与浏览器解码方式不一致 导致的。
JSP 文件通常是用 UTF-8 保存的,而 Tomcat 默认使用 ISO-8859-1 来解析和输出 JSP 内容,两边不匹配,就会出现乱码。
解决方案:
在 JSP 页面顶部添加如下编码声明,并确保文件本身是 UTF-8 格式:
java
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h2>Hello 小满!</h2>
</body>
</html>
pageEncoding="UTF-8":告诉 Tomcat 用 UTF-8 编译 JSP
contentType="text/html; charset=UTF-8":告诉浏览器用 UTF-8 解析内容
<meta charset="UTF-8">:进一步明确 HTML 编码,防止浏览器误判
另外,确保 JSP 文件在编辑器中也是以 UTF-8 格式保存
此时,访问就能显示正常中文了

8.访问路径与 Servlet 映射解析
此时,我们在浏览器里访问: http://localhost:8080/demo-web1/hello
这个地址时,其实是通过以下流程完成的:
浏览器请求 → Tomcat(8080端口) → 定位 demo-web1 项目 → 匹配 /hello → 执行对应 Servlet → 返回响应

这是在 web.xml 中配置 Servlet

现在 Servlet 3.0+ 规范支持注解方式,可以直接在类上添加 @WebServlet 来完成映射:

此时,访问:http://localhost:8080/demo-web1/hello1

这样就不需要在 web.xml 中写任何配置,Tomcat 启动时会自动扫描注解并完成 Servlet 注册与 URL 映射。