创建 Web 项目
# 36.创建 Web 项目
本文讲解如何创建 Web 项目并打包
# 新建 Servlet
我们新建一个 Servlet:
package com.peterjxl.learnjavamaven.demo2Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class ServletDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getRequestDispatcher("/hello.html").forward(req, resp);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 新建 web.xml
新建 src/main/webapp/WEB-INF/web.xml,然后是配置 Servlet 的访问路径:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>com.peterjxl.learnjavamaven.demo2Servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 新建 hello.html
新建一个 src/main/webapp/hello.html 文件用于访问
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Hello, Maven</h1>
</body>
</html>
2
3
4
5
6
7
8
9
10
11
后续我们会介绍更多关于 scope 的作用。
# 打包为 war
如果 Web 项目中与用到其他依赖(例如 Log4j,JDBC 等),那么打包为 war 包的时候时,会自动将用到的依赖放到 war 包的目录里,也就是我们之前学习 JavaWeb 的时候放的 WEB-INF/lib 目录下,例如这是一个项目的例子:
下面我们来实践下。首先我们修改的打包方式为 war 包(第 10 行),并新增了一个依赖(19 ~ 24 行),该依赖是用于 Servlet 的编译的:
<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>
<groupId>com.peterjxl.LearnJavaMaven</groupId>
<artifactId>hello-world</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Maven Hello World Project!</name>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
注意 23 行,我们配置了 scope(范围)为 provided,该配置的作用是告诉 Maven 该依赖仅仅用来编译时用到,打包时不会用到,因此在打包的时候不会添加 Servlet 的依赖到最后的 war 包里。
为什么该依赖不会放到最后的 war 包中呢?这是因为 Tomcat 等服务器已经有了 Servlet 的依赖,我们再添加的话,就会有两个一样的依赖,会冲突。
# 打包
使用 mvn clean package
打成一个 war 包,可以看到打包后的文件路径:
# 部署与启动 Tomcat
我们将这个 war 包放到 Tomcat 的 webapp 目录里,然后启动 Tomcat:可以看到正常访问
# 总结
本文我们讲解了如何用 Maven 管理 web 项目,并演示了打包。
已将所有代码上传到 Gitee (opens new window) 和 GitHub (opens new window) 上,本文中涉及到的代码在分支 demo2Servlet。