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

创建Maven版的Web工程

使用命令生成Web工程

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

  • -D表示后面要附加命令的参数,字母D和后面的参数是紧挨着的,中间没有任何其它字符
  • 参数archetypeGroupId、archetypeArtifactId、archetypeVersion用来指定现在使用的maven-archetype-webapp的坐标
cmd 复制代码
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 复制代码
<?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类所在的包的目录

java 复制代码
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

xml 复制代码
<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页面中编写超链接

xml 复制代码
<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仓库查询,根据下载量选择适合的使用

xml 复制代码
<!-- 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工程
xml 复制代码
<!--依赖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测试类复制到该目录下

xml 复制代码
<!--确认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

cmd 复制代码
# 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
cmd 复制代码
[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
相关推荐
吾日三省吾码2 小时前
JVM 性能调优
java
y先森2 小时前
CSS3中的伸缩盒模型(弹性盒子、弹性布局)之伸缩容器、伸缩项目、主轴方向、主轴换行方式、复合属性flex-flow
前端·css·css3
前端Hardy2 小时前
纯HTML&CSS实现3D旋转地球
前端·javascript·css·3d·html
susu10830189112 小时前
vue3中父div设置display flex,2个子div重叠
前端·javascript·vue.js
弗拉唐3 小时前
springBoot,mp,ssm整合案例
java·spring boot·mybatis
sun0077003 小时前
ubuntu dpkg 删除安装包
运维·服务器·ubuntu
oi773 小时前
使用itextpdf进行pdf模版填充中文文本时部分字不显示问题
java·服务器
IT女孩儿3 小时前
CSS查缺补漏(补充上一条)
前端·css