当前位置: 首页 > news >正文

什么是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 映射。

http://www.dtcms.com/a/453141.html

相关文章:

  • 新上线网站如何做搜索引擎市场监督管理局
  • 《投资-84》价值投资者的认知升级与交易规则重构 - 第二层:是虚拟的不可见的价值,可以被正向放大、也可以反向放大
  • 上虞中国建设银行官网站网站开发的工作总结
  • Cortex-M 中断挂起、丢中断与 EXC_RETURN 机制详解
  • Qt C++ :QWidget类的主要属性和接口函数
  • 串扰14-蛇形走线与信号延迟
  • Java SpringBoot(一)--- 下载Spring相关插件,创建一个Spring项目,创建项目出现的问题
  • 业务过程需求在软件需求中的特殊性与核心地位
  • 域名哪个网站续费商洛市住房城乡建设厅网站
  • 笛卡尔积 = 所有可能组合 = 行数相乘
  • MySQL——数据类型和表的操作
  • 工作笔记-----ICache对中文显示的影响问题
  • 什么是 Maven?关于 Maven 的命令、依赖传递、聚合与继承
  • nat静态地址转化
  • 计算机网站开发要考什么证竞价培训班
  • 《算法与数据结构》第七章[算法3]:图的最小生成树
  • 文科和理科思维差异:推演与归纳
  • 雨雪“开关式”监测:0.5秒精准响应,守护户外安全
  • 做文化传播公司网站手机建立网站
  • HTML的本质——网页的“骨架”
  • 徐州双语网站制作wordpress 外链视频
  • React 快速入门:菜谱应用实战教程
  • 网站备案和域名备案网页源码app
  • Tomcat本地部署SpringBoot项目
  • 大模型开发 - 04 QuickStart_DeepSeek 模型调用流程源码解析:从 Prompt 到远程请求
  • 怎么把在微企点做响应式网站深圳专业网站建
  • 认识三极管
  • gRPC从0到1系列【23】
  • Element Plus 完整教程:从背景到实践
  • Qt编写上下界面切换效果/前进到下一个界面/后退到上一个页面/零件工艺及管理设计系统