1.Web项目的目录结构
基于Java的Web项目,标准的打包方式是WAR。与JAR比较,包含更多的内容,比如JSP文件、Servlet、Java类、web.xml配置文件、依赖JAR包、静态web资源(HTML、CSS、JavaScript)等。
一个典型的WAR文件如下目录结构:
—war/ + META-INF/ + WEB-INF/ | + classes/ | | + ServletA.class | | + config.properties | | + ... | + web.xml + img/ + css/ + js/ + index.html + sample.jsp
一个WAR包下至少包含两个子目录:META-INF和WEB-INF,前者包含了一些打包元数据信息;后者是WAR包的核心,WEB-INF下必须包含一个Web资源描述文件web.xml,它的子目录classes包含所有该Web项目的类,而另一个子目录lib则包含所有该Web项目的依赖JAR包。classes和lib目录都会在运行的时候被加入到Classpath中。除此之外,WAR包中会包含很多Web资源,比如html、jsp、图片等。
Maven对Web项目的布局结构也有一个通用的约定,Web项目必须显示的指定打包方式为war
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.gqshao.myapp</groupId> <artifactId>project-a</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>project-a</name> </project>
Web项目的类及资源文件同一般JAR项目一样,默认位置都是src/main/java和src/main/resources
Web项目比较特殊的地方在于:它还有一个Web资源目录,其默认位置是src/main/webapp/。一个典型Web项目的Maven目录结构如下:
+ project + pom.xml + src | + main/ | | + java/ | | | + ServletA.class | | | ... | | + ... | + resources/ | | + config.properties | + webapp/ | | + WEB-INF/ | | | + web.xml/ | | + img/ | | + css/ | | + js/ | | + index.html/ | | + sample.jsp/ | + test/ | | + java/ | + resources
在src/main/webapp/目录下,必须包含一个子目录WEB-INF,该子目录还必须要包含web.xml文件
2. web项目的POM
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.gqshao.myapp</groupId> <artifactId>learn-maven</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>myapp.learn_maven Maven Webapp</name> <properties> <springframework.version>3.2.2.RELEASE</springframework.version> <junit.version>4.7</junit.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </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> </dependencies> <build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <finalName>test</finalName> <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>8.1.10.v20130312</version> <configuration> <scanIntervalSeconds>10</scanIntervalSeconds> <webAppConfig> <contextPath>/test</contextPath> </webAppConfig> </configuration> </plugin> </plugins> </build> </project>
(1)packaging元素值为war
(2)几乎所有的Web都要依赖于servlet-api和jsp-api,但这两个依赖范围是provided,表示他们最终不会被打包至war文件中,因为web容器会提供这两个类库。
(3)build-finalName:用来标识项目生成的主构件的名称,改变该元素的默认值,方便部署。
3.使用jetty-maven-plugin进行测试
Web页面测试应该仅限于页面的层次,例如JSP、CSS、JavaScript的修改,其他代码的修改(如数据访问)、请编写单元测试。
传统的Web测试方法要求我们编译、测试、打包及部署,jetty-maven-plugin能够帮助我们节省时间,它能够周期性的检查项目内容,发现变更后自动更新到内置的Jetty Web容器中,也就是帮我们省去了打包和部署的步骤。通常情况下,我们只需要在IDE中修改源码,IDE能够执行自动编译,jetty-maven-plugin发现编译后的文件变化后,自动更新到Jetty容器,就可以直接测试Web页面了。
jetty-maven-plugin配置
<build> <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>8.1.10.v20130312</version> <configuration> <scanIntervalSeconds>10</scanIntervalSeconds> <webAppConfig> <contextPath>/test</contextPath> </webAppConfig> </configuration> </plugin> </plugins> </build>
注意:
(1)jetty-maven-plugin不是官方Maven插件,需要注意groupId和artifactId;scanIntervalSeconds表示该插件扫描项目变更的时间间隔,单位是秒;contextPath表示项目部署后的content path。http://hostname:port/{contextPath}/
(2)默认情况下,只有org.apache.maven.plugins和org.codehaus.mojo两个groupId下的插件才支持简化的命令行调用,即可以运行mvn help:system。为了能在命令行直接运行mvn jetty:run,用户需要配置setting.xml如下:
<settings> <pluginGroups> <pluginGroup>org.mortbay.jetty</pluginGroup> <!-- 8、9 --> <pluginGroup>org.eclipse.jetty</pluginGroup> </pluginGroups> </settings>
如果希望使用其它端口,可以添加jerry.port参数;跳过测试为maven.test.skip
mvn jetty:run -Djetty.port=80 -Dmaven:test:skip=true
4.使用Cargo实现自动化部署
Cargo是一组帮助用户操作Web容器的工具,它能够帮助用户实现自动化部署,而且它几乎支持所有Web容器,如Tomcat、JBoss、Jetty和Glassfish等。Cargo通过cargo-maven2-plugin提供了Maven继承,Maven用户可以使用该插件将Web项目部署到Web容器中。
cargo-maven2-plugin和jetty-maven-plugin的功能看起来很相似,但目的不同。jetty-maven-plugin主要是帮助日常的快速开发和测试,而cargo-maven2-plugin主要服务于自动化部署。
(1)部署至本地Web容器
Cargo支持两种本地部署的方式,分别为standalone模式和existing模式。在standalone模式中,Cargo会从Web容器的安装目录复制一份配置到用户指定的目录,然后在此基础上部署应用,每次重新构建的时候,这个目录都会被清空,所有配置重新生成;existing模式中,用户需要指定现有的Web容器配置目录,然后Cargo会直接使用这些配置并将应用部署到其对应的位置。
standalone/模式部署应用至本地Web容器
<plugin> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven2-plugin</artifactId> <version>1.4.0</version> <configuration> <container> <containerId>tomcat7x</containerId> <home>D:\myspaces\worktools\apache-tomcat-7.0.37</home> </container> <configuration> <!-- standalone模式部署应用至本地Web容器 --> <!-- <type>standalone</type> <home>${project.build.directory}\tomcat7x</home> --> <!-- cargo.servlet.port属性修改监听端口 --> <!-- <properties> <cargo.servlet.port>80<cargo.servlet.port> </properties> --> <!-- existing模式部署应用至本地Web容器 --> <type>existing</type> <home>D:\myspaces\WorkTools\apache-tomcat-7.0.37</home> </configuration> </configuration> </plugin>在setting.xml中添加<pluginGroup>org.codehaus.cargo</pluginGroup>
运行命令:mvn cargo:start
(2)部署至远程Web容器
首先修改tomcat\conf\tomcat-users.xml中添加用户
<role rolename="manager-gui"/> <user username="tomcat" password="tomcat" roles="manager-gui"/>
POM配置如下
<plugin> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven2-plugin</artifactId> <version>1.4.0</version> <configuration> <container> <containerId>tomcat7x</containerId> <type>remote</type> </container> <configuration> <type>runtime</type> <properties> <cargo.remote.username>tomcat</cargo.remote.username> <cargo.remote.password>tomcat</cargo.remote.password> <cargo.remote.manager.url>http://localhost/manager</cargo.remote.manager.url> </properties> </configuration> </configuration> </plugin>
相关推荐
在IT行业中,构建Web应用程序是常见的任务,而Maven和Eclipse是开发人员常使用的工具。本教程聚焦于如何在Eclipse集成开发环境中利用Maven来构建Web项目,旨在帮助初学者快速上手,但不涉及特定的框架如Spring或...
本篇文章将深入探讨如何使用Maven构建Web项目,并详细解释如何将构建好的项目部署到Tomcat服务器。 首先,Maven是Apache软件基金会的一个开源项目,它通过一个统一的方式来管理项目的构建、报告和文档。Maven的核心...
【使用Maven开发Java Web应用】的详细指南 在Java Web开发中,管理各种框架的jar包及其依赖是一项挑战。传统的构建工具Ant逐渐被Maven和Gradle等更先进的工具取代,尤其是Maven,它提供了强大的依赖管理和项目构建...
在MyEclipse中使用Maven构建Web项目是一个常见的开发任务,可以帮助开发者更加高效地管理和构建项目。Maven是一个强大的项目管理工具,它依赖于配置文件(pom.xml)来管理项目的构建、报告和依赖关系。以下是在...
在IT行业中,构建Web项目是开发过程中的重要环节,而Maven作为一种强大的项目管理工具,极大地简化了这一过程。本文将深入探讨如何使用Maven来构建一个名为“helloweb”的Web项目,以及相关的知识点。 **一、Maven...
* webapp:存放web应用程序的文件夹 本文介绍了基于maven创建web项目的步骤,包括搭建maven环境、集成maven到Myeclipse2013和创建maven架构下的WEB工程。通过这篇文章,读者可以学习到如何使用maven来构建和管理web...
- **反应式编程支持**:Spring 5.2.x引入了对Reactor的支持,这是Spring WebFlux框架的一部分,允许开发人员创建非阻塞、响应式的Web应用程序。Reactor遵循Reactive Streams规范,确保低延迟和高吞吐量。 - **...
标签 "java" 指明了这是基于Java的解决方案,"spring"、"springmvc"、"mybatis"进一步确认了SSM框架的使用,而 "maven" 表示项目采用Maven作为构建工具,意味着依赖管理和构建流程遵循Maven的约定。 关于Maven,它...
3. **构建Web应用结构** - Maven Web项目的基本目录结构包括src/main/java(存放Java源代码)、src/main/resources(存放资源文件)、src/main/webapp(存放Web应用资源,如HTML、JS、CSS、Web-INF等)。 - Web-...
在创建Web应用时,Maven提供了多种生命周期和构建阶段。例如,“compile”阶段用于编译源代码,“test”阶段执行单元测试,“package”阶段将编译后的结果打包成可部署的形式,如WAR文件。对于Web应用,最终的WAR...
【标题】"demo4-Maven-Webapp.zip MAVEN WEB_maven ssh_maven增删改查" 提供了一个关于使用Maven构建Java Web应用程序,并结合SSH(Struts2、Hibernate和Spring)框架实现CRUD(增删改查)功能的项目实例。...
** Maven构建Web工程详解 ** Maven是一款强大的项目管理和依赖管理工具,广泛应用于Java开发领域。它通过统一的构建过程和约定优于配置的原则,极大地简化了项目的构建、编译、测试和部署流程。在本篇内容中,我们...
首先,我们需要理解这三个核心组件:IDEA是流行的Java开发集成环境,Maven是项目管理和构建工具,而SpringMVC和Mybatis则分别是用于构建Web应用和数据库操作的框架。 ### IDEA与Maven **IDEA** 是由JetBrains公司...
这个压缩包可能包含了一个完整的Maven Web项目,解压后应该能看到上述提到的目录结构和文件,如pom.xml、src目录以及Web应用相关的资源。开发者可以将这个项目导入到Eclipse中,通过上述步骤理解和学习Maven Web...
使用Maven引入相关jar包" 的主题中,我们将深入探讨如何在Java项目中利用Maven管理依赖,特别是针对SSH(Struts2、Spring、Hibernate)框架的应用。SSH是Java开发中广泛使用的三大开源框架,它们各自负责Web层、...
在实际开发中,`org.zip maven jar`这样的组件可能被用于构建Web应用、服务端逻辑、桌面应用或者其他任何基于Java技术栈的项目。通过Maven的依赖传递性,开发者可以利用这些预先封装好的库,避免重复造轮子,提高...
maven-webstart 使用 Maven 构建 Java Webstart 应用程序的模板。 此存储库包含多个示例项目,用于使用 Maven 构建 Java Webstart 应用程序。 不同的配置: 使用 JnlpDownloadServlet 使用自定义的 Jsp 作为 jnlp 而...
总结来说,使用SpringBoot+maven构建Web项目,可以高效地组织项目结构,简化配置,加速开发流程。通过父子工程的方式,可以更好地管理和共享项目资源,使得大型项目的开发和维护变得更加便捷。结合SpringBoot的自动...
### Maven实践-使用Maven开发Web应用 #### Maven简介与优势 Maven是Apache软件基金会支持的一款开源项目管理工具,它通过一个项目对象模型(POM),结合一组标准集合,提供了一套完整的构建规则和最佳实践。Maven的...