使用命令生成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工程做一点调整
<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>4.0.0modelVersion>
<groupId>com.atguigu.mavengroupId>
<artifactId>pro02-maven-webartifactId>
<version>1.0-SNAPSHOTversion>
<packaging>warpackaging>
<name>pro02-maven-webname>
<url>http://www.example.comurl>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
properties>
project>
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>helloServletservlet-name>
<servlet-class>com.atguigu.maven.HelloServletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>helloServletservlet-name>
<url-pattern>/helloServleturl-pattern>
servlet-mapping>
第三步: 在index.jsp
页面中编写超链接
<html>
<body>
<h2>Hello World!h2>
<a href="helloServlet">Access Servleta>
body>
html>
执行Maven的构建命令
此时直接执行mvn compile
命令提示错误信息,程序包javax.servlet.http和javax.servlet
不存在
HttpServlet
这个类属于servlet-api.jar
,所以Web工程需要导入servlet-api.jar的坐标信息配置Web工程对servlet-api.jar
包的依赖: 依赖的坐标可以根据关键词到Maven仓库查询,根据下载量选择适合的使用
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
<scope>providedscope>
dependency>
第一步: 运行mvn package
命令将Web工程打包为war包(默认存放在target目录下),将war包复制到Tomcat/webapps
目录下即部署到Tomcat上运行
第二步: 执行startup.bat
文件启动Tomcat服务器, 通过浏览器尝试访问http://localhost:8080/pro02-maven-web/index.jsp
Web工程依赖的每一个jar包对应的就是每一个Java工程,最终这些jar包会被放在Web工程的WEB-INF/lib
目录下
在pro02-maven-web
工程的pom.xml文件中的dependencies标签
内指定被依赖的Java工程pro01-maven-java
的坐标
<dependency>
<groupId>com.atguigu.mavengroupId>
<artifactId>pro01-maven-javaartifactId>
<version>1.0-SNAPSHOTversion>
<scope>compilescope>
dependency>
编写测试程序: 根据主体程序所在的包结构创建对应的test目录pro02-maven-web\src\test\java\com\atguigu\maven
,把Java工程的CalculatorTest.java测试类
复制到该目录下
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<scope>testscope>
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
[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