04在命令行中使用Maven命令创建Maven版的Web工程,并将工程部署到服务器的步骤

创建Maven版的Web工程

使用命令生成Web工程

使用mvn archetype:generate命令生成Web工程时,需要使用一个专门生成Web工程骨架的archetype(参照官网看到它的用法)

  • -D表示后面要附加命令的参数,字母D和后面的参数是紧挨着的,中间没有任何其它字符
  • 参数archetypeGroupId、archetypeArtifactId、archetypeVersion用来指定现在使用的maven-archetype-webapp的坐标
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4

第一步: 在工作空间的根目录下运行生成Web工程的命令然后按照提示执行, 不能在一个Java工程下再创建一个Web工程

Define value for property 'groupId': com.atguigu.maven 
Define value for property 'artifactId': pro02-maven-web 
Define value for property 'version' 1.0-SNAPSHOT: :【直接回车,使用默认值】
Define value for property 'package' com.atguigu.maven: :【直接回车,使用默认值】 
Confirm properties configuration: 
groupId: com.atguigu.maven 
artifactId: pro02-maven-web 
version: 1.0-SNAPSHOT 
package: com.atguigu.maven 
Y: :【直接回车,表示确认】

第二步:配置Maven工程生成的pom.xml文件,对创建好的Web工程做一点调整

<?xml version="1.0" encoding="UTF-8"?>
<!--project跟标签,表示对当前工程进行配置管理-->
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><!--modelVersion标签:代表当前pom.xml所采用的标签结构,从Maven2开始就固定是4.0.0--><modelVersion>4.0.0</modelVersion><!--当前Maven工程的坐标--><groupId>com.atguigu.maven</groupId><artifactId>pro02-maven-web</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><!--当前工程的名字--><name>pro02-maven-web</name><url>http://www.example.com</url><properties><!--工程构建过程中读取源码时使用的字符集--><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><!--配置当前工程所依赖的jar包-->
</project>

Web工程的目录结构

在这里插入图片描述

将Web工程中部署到服务器

创建Servlet

第一步: 在main目录下创建java目录,在java目录下创建Servlet类所在的包的目录

在这里插入图片描述

package com.atguigu.maven;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;
public class HelloServlet extends HttpServlet{protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.getWriter().write("hello maven web");}
}

第二步: 在web.xml中注册Servlet

<servlet><servlet-name>helloServlet</servlet-name><servlet-class>com.atguigu.maven.HelloServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>helloServlet</servlet-name><url-pattern>/helloServlet</url-pattern>
</servlet-mapping>

第三步: 在index.jsp页面中编写超链接

<html><body><h2>Hello World!</h2><a href="helloServlet">Access Servlet</a></body>
</html>

执行Maven的构建命令

此时直接执行mvn compile命令提示错误信息,程序包javax.servlet.http和javax.servlet不存在

  • 因为我们的Web工程用到的HttpServlet这个类属于servlet-api.jar ,所以Web工程需要导入servlet-api.jar的坐标信息

在这里插入图片描述

配置Web工程对servlet-api.jar包的依赖: 依赖的坐标可以根据关键词到Maven仓库查询,根据下载量选择适合的使用

在这里插入图片描述

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope>
</dependency>

第一步: 运行mvn package命令将Web工程打包为war包(默认存放在target目录下),将war包复制到Tomcat/webapps目录下即部署到Tomcat上运行

第二步: 执行startup.bat文件启动Tomcat服务器, 通过浏览器尝试访问http://localhost:8080/pro02-maven-web/index.jsp

在这里插入图片描述

Web工程依赖自定义的Java工程

Web工程依赖的每一个jar包对应的就是每一个Java工程,最终这些jar包会被放在Web工程的WEB-INF/lib目录下

pro02-maven-web工程的pom.xml文件中的dependencies标签内指定被依赖的Java工程pro01-maven-java的坐标

  • 只有Web工程依赖Java工程,没有反过来Java工程依赖Web工程
<!--依赖Java工程pro01-maven-java的-->
<dependency><groupId>com.atguigu.maven</groupId><artifactId>pro01-maven-java</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope>
</dependency>

编写测试程序: 根据主体程序所在的包结构创建对应的test目录pro02-maven-web\src\test\java\com\atguigu\maven,把Java工程的CalculatorTest.java测试类复制到该目录下

<!--确认Web工程依赖了junit-->
<dependencies><!-- 使用dependency配置一个具体的依赖 --><dependency><!-- 要导入哪个jar包就配置它的坐标信息即可 --><groupId>junit</groupId><artifactId>junit</artifactId><!--4.0以下的版本不支持注解--><version>4.12</version> <!-- scope标签配置依赖的范围,默认值是compile--><scope>test</scope></dependency>
<dependencies>

执行Maven的构建命令

测试命令 mvn test: 调用测试类的测试方法, 测试操作中会提前自动执行编译操作,测试成功就说明编译也是成功的

打包命令mvn package: 在打包好的war包中,被Web工程依赖的Java工程会变成Web工程的WEB-INF/lib目录下的jar包

以列表形式查看当前Web工程所依赖的jar包信息: mvn dependency:list

# jar包的显示格式-->groupId:artifactId:打包方式:version:依赖的范围
> [INFO] The following files have been resolved:
> [INFO] org.hamcrest:hamcrest-core:jar:1.3:test
> [INFO] javax.servlet:javax.servlet-api:jar:3.1.0:provided
> [INFO] com.atguigu.maven:pro01-maven-java:jar:1.0-SNAPSHOT:compile
> [INFO] junit:junit:jar:4.12:test

以树形结构查看当前Web工程依赖的jar包信息: mvn dependency:tree

  • 由于依赖的传递性, 在pom.xml中虽然没有依赖hamcrest-core,但是它却被加入了我们依赖的列表, 原因是junit依赖了hamcrest-core
[INFO] com.atguigu.maven:pro02-maven-web:war:1.0-SNAPSHOT
[INFO] +- junit:junit:jar:4.12:test
[INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- javax.servlet:javax.servlet-api:jar:3.1.0:provided
[INFO] \- com.atguigu.maven:pro01-maven-java:jar:1.0-SNAPSHOT:compile

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/107088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记一次Redis Cluster Pipeline导致的死锁问题

作者&#xff1a;vivo 互联网服务器团队- Li Gang 本文介绍了一次排查Dubbo线程池耗尽问题的过程。通过查看Dubbo线程状态、分析Jedis连接池获取连接的源码、排查死锁条件等方面&#xff0c;最终确认是因为使用了cluster pipeline模式且没有设置超时时间导致死锁问题。 一、背…

Go指针探秘:深入理解内存与安全性

1. 指针的基础 1.1 什么是指针&#xff1f; 指针是一种变量&#xff0c;其存储的是另一个变量的内存地址&#xff0c;而不是值本身。在很多编程语言中&#xff0c;当我们需要直接访问内存或者希望通过一个变量间接操作另一个变量时&#xff0c;会使用到指针。 示例&#xff1a…

掌握 Scikit-Learn: Python 中的机器学习库入门

机器学习 第二课 Sklearn 入门 概述机器学习与 Python 的完美结合Scikit-Learn 的核心组件与结构安装与配置验证安装 数据表示与预处理特征矩阵和目标向量数据处理 估计器模型的选择思考问题的本质研究数据的分布判断任务的复杂性分类问题回归问题 监督学习分类算法回归算法 无…

列表字典推导式

推导式是可以从一个数据序列构建另一个新的数据序列&#xff08;一个有规律的列表或控制一个有规律列表&#xff09;的结构体. 列表推导式 对比普通语法&#xff0c;创建一个0-9的列表&#xff0c;我们可以用while和for循环两种方式 list1 []# 2. 书写循环&#xff0c;依次…

常见的8个JMeter压测问题

为什么在JMeter中执行压力测试时&#xff0c;出现连接异常或连接重置错误&#xff1f; 答案&#xff1a;连接异常或连接重置错误通常是由于服务器在处理请求时出现问题引起的。这可能是由于服务器过载、网络故障或配置错误等原因导致的。 解决方法&#xff1a; 确定服务器的负载…

智能警用装备管理系统-科技赋能警务

警用物资装备管理系统&#xff08;智装备DW-S304&#xff09;是依托互云计算、大数据、RFID技术、数据库技术、AI、视频分析技术对警用装备进行统一管理、分析的信息化、智能化、规范化的系统。 &#xff08;1&#xff09;感知智能化 装备感知是整个方案的基础&#xff0c;本方…

二.镜头知识之镜头总长,法兰距,安装接口

二.镜头知识之镜头总长,法兰距,安装接口 文章目录 二.镜头知识之镜头总长,法兰距,安装接口2.1 线激光模组镜头的FBL 与 TTL(Total Track Length) 镜头总长2.2 相机法兰距2.3 线激光模组镜头的TTL 以及 From Barrel bottom to image plane2.4 相机的镜头接口2.4.1 海思IPC S…

基于YOLO算法的单目相机2D测量(工件尺寸和物体尺寸)三

1.简介 1.1 2D测量技术 基于单目相机的2D测量技术在许多领域中具有重要的背景和意义。 工业制造&#xff1a;在工业制造过程中&#xff0c;精确测量是确保产品质量和一致性的关键。基于单目相机的2D测量技术可以用于检测和测量零件尺寸、位置、形状等参数&#xff0c;进而实…

PyTorch入门教学——使用PyCharm创建一个PyTorch项目

首先需要创建好PyTorch的虚拟环境&#xff0c;步骤&#xff1a;PyTorch入门教学——简介与环境配置-CSDN博客打开PyCharm&#xff0c;新建项目&#xff0c;选择项目的存放位置。选择先前配置的解释器&#xff0c;也就是虚拟环境中的解释器。&#xff08;记住创建的虚拟环境所在…

vue3后台管理框架之svg封装为全局组件

因为项目很多模块需要使用图标,因此把它封装为全局组件!!! 在开发项目的时候经常会用到svg矢量图,而且我们使用SVG以后,页面上加载的不再是图片资源, 这对页面性能来说是个很大的提升,而且我们SVG文件比img要小的很多,放在项目中几乎不占用资源。 安装SVG依赖插件 pnp…

docker 安装(unbuntu安装)

替换源 有时候因为墙的原因&#xff0c;总是不成功&#xff0c;因此我们直接将apt源换成阿里云的 阿里云ubuntu镜像源 需要在阿里云找到指定版本的源&#xff0c;我这里是Ubuntu20 sudo vim /etc/apt/sources.list更换内容&#xff08;可以先将sources.list备份&#xff09; …

年龄越大,越要小心逢九年

老话有云&#xff1a;年龄逢九&#xff0c;灾祸频有。在我国的许多农村地区&#xff0c;至今还流传着这么句话&#xff0c;这句话的大概意思是说&#xff1a;每个人命理年龄逢九&#xff0c;就会有个坎&#xff0c;年龄越大&#xff0c;坎就越厉害&#xff0c;所以&#xff0c;…

【Linux】线程安全问题①——如何实现资源访问互斥(附图解与代码实现)

线程安全主要分为两个方面&#xff0c;分别是资源访问互斥与线程同步&#xff08;线程协同配合&#xff09; 本篇博客&#xff0c;我们主要来讲解资源访问互斥这一方面 目录 为什么要实现资源访问互斥&#xff1f; 实现资源访问互斥&#xff08;原子访问&#xff09;的经典…

Nginx正向代理配置(http)

前言 在工作中我们经常使用nginx进行反向代理,今天介绍下怎么进行正向代理,支持http请求,暂不支持https 首先先介绍下正向代理和反向代理。 正向代理 在客户端&#xff08;浏览器&#xff09;配置代理服务器&#xff0c;通过代理服务器进行互联网访问。 反向代理 客户端只…

修改RuoYi部署路径 适配nginx子路径访问

1 官方参考 若依官方文档提供了一种解决方式&#xff1a;前端手册 | RuoYi 若依文档给的已经很明白了&#xff0c;但如果子路径 /admin 发生改变&#xff0c;修改起来就感觉比较费事了&#xff0c;毕竟要修改4个文件。 这里咱们把子路径抽取出来&#xff0c;放到环境配置文件中…

ThinkPHP5小语种学习平台

有需要请加文章底部Q哦 可远程调试 ThinkPHP5小语种学习平台 一 介绍 此小语种学习平台基于ThinkPHP5框架开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。平台角色分为学生&#xff0c;教师和管理员三种。学生注册登录后可观看学习视频&#xff0c;收藏视频&#xf…

关于图像分割SDK的一些基础认识

随着科技的不断发展&#xff0c;图像分割SDK已经成为了一个备受关注的话题。而在众多图像分割SDK中&#xff0c;美摄图像分割SDK以其独特的功能和优势脱颖而出。本文将从美摄图像分割SDK的企业价值和互联网娱乐方面&#xff0c;介绍其宣传文章的具体写作规范。 在企业价值方面&…

从一到无穷大 #18 时序数据库运营SLI思考

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 公有云时序数据库SLA 运营商产品每服务周期服务可用率不低于99.9%衡量服务不可用数据指标从采…

Nginx 同一端口 同时支持http与https 协议

文章目录 需求分析 需求 通过 nginx &#xff0c;让同一端口 同时支持http与https 协议 分析 通过使用 Nginx&#xff0c;可以实现同一端口同时支持 HTTP 和 HTTPS 协议。下面是一种可能的配置方式&#xff1a; 配置 HTTP 服务 在 Nginx 配置文件中&#xff0c;添加以下配置…

利用python学习如何处理需要登录的网站

要处理需要登录的网站&#xff0c;你可以按照以下步骤进行学习&#xff1a; 了解网站的登录机制&#xff1a;登录机制通常有用户名密码登录、OAuth授权登录、Cookie登录等。了解目标网站使用的登录机制是学习处理的第一步。 使用Web抓取工具模拟登录&#xff1a;通过使用工具如…