什么是Maven?关于 Maven 的坐标、依赖管理与 Web 项目构建
目录
六、Maven 坐标
groupId 是什么?
artifactId 是什么?
version 是什么?
七、通过 Maven 坐标快速引入第三方依赖
1.在 Maven 中央仓库查找依赖
2. 将依赖添加到 pom.xml
3. Maven 的依赖下载流程
八、创建一个基于 Maven 的 Web 项目
1. 使用命令行快速创建
2.使用 IDEA 图形界面创建 Maven Web 项目
3.添加 Servlet 依赖
4.编写一个简单的 Servlet
5.在 web.xml 中配置 Servlet 映射
6.配置 Tomcat 启动
7.解决jsp乱码问题
访问时可能会出现:
解决方案:
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 中添加依赖:
<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 会按照以下流程解析依赖:
pom.xml → 查找坐标 → 本地仓库是否存在?├─ 是 → 直接使用└─ 否 → 连接远程仓库 → 下载 Jar → 保存到本地仓库 → 使用
整个过程无需手动参与,只要坐标正确,就能自动完成依赖的引入与管理。
八、创建一个基于 Maven 的 Web 项目
1. 使用命令行快速创建
输入:
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 文件夹,结构如下:
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> 标签中添加
<!-- 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
public class HelloServlet extends HttpServlet {@Overrideprotected 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,添加以下内容:
<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 格式:
<%@ 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 映射。