12.3 account-web
account-web是本书背景案例中唯一的Web模块,本书旨在用该模块来阐述如何使用Maven来构建一个Maven项目。由于account-service已经封装了所有下层细节,account-web只需要在此基础上提供一些Web页面,并使用简单Servlet与后台实现交互控制。读者将会看到一个具体Web项目的POM是怎样的,也将能体会到让Web模块尽可能简洁带来的好处。
12.3.1 account-web的POM
除了使用打包方式war之外,Web项目的POM与一般项目并没多大的区别。account-web的POM代码见代码清单12-8。
代码清单12-8 account-web的POM
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.juvenxu.mvnbook.account</groupId>
<artifactId>account-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>account-web</artifactId>
<packaging>war</packaging>
<name>Account Web</name>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>account-service</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
</dependencies>
</project>
如上述代码所示,account-web的packaging元素值为war,表示这是一个Web项目,需要以war方式进行打包。account-web依赖于servlet-api和jsp-api这两个几乎所有Web项目都要依赖的包,它们为servlet和jsp的编写提供支持。需要注意的是,这两个依赖的范围是provided,表示它们最终不会被打包至war文件中,这是因为几乎所有Web容器都会提供这两个类库,如果war包中重复出现,就会导致潜在的依赖冲突问题。account-web还依赖于account-service和spring-web,其中前者为Web应用提供底层支持,后者为Web应用提供Spring的集成支持。
在一些Web项目中,读者可能会看到finalName元素的配置。该元素用来标识项目生成的主构件的名称,该元素的默认值已在超级POM中设定,值为${project.artifactId}-${project.version},因此代码清单12-8对应的主构件名称为account-web-1.0.0-SNAP-SHOT.war。不过,这样的名称显然不利于部署,不管是测试环境还是最终产品环境,我们都不想在访问页面的时候输入冗长的地址,因此我们会需要名字更为简洁的war包。这时可以如下所示配置finalName元素:
<finalName>account</finalName>
经此配置后,项目生成的war包名称就会成为account.war,更方便部署。