web.xml详解
1.在启动Web项目时,容器(比如Tomcat)会读web.xml配置文件中的两个节点<listener>和<contex-param>。
2.接着容器会创建一个ServletContext(上下文),应用范围内即整个WEB项目都能使用这个上下文。
3.接着容器会将读取到<context-param>转化为键值对,并交给ServletContext。
4.容器创建<listener></listener>中的类实例,即创建监听(备注:listener定义的类可以是自定义的类但必须需要继承ServletContextListener)。
5.在监听的类中会有一个contextInitialized(ServletContextEvent event)初始化方法,在这个方法中可以通过event.getServletContext().getInitParameter("contextConfigLocation") 来得到context-param 设定的值。在这个类中还必须有一个contextDestroyed(ServletContextEvent event) 销毁方法.用于关闭应用前释放资源,比如说数据库连接的关闭。
6.得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早。
pom.xml详解
1.
<modelVersion>4.0.0</modelVersion>
当前POM模型的版本,对于maven2及maven3来说,它只能是4.0.0。
2.
<parent>
项目或者组织的唯一标志,并且配置时生成的路径也是由此生成,如org.codehaus.mojo生成的相对路径为:/org/codehaus/mojo
<groupId>com.liuli.pro</groupId>
项目的通用名称
<artifactId>syspro</artifactId>
项目的版本
<version>0.0.1-SNAPSHOT</version>
</parent>
3.当前项目的名称
<artifactId>syspro-web</artifactId>
4.打包的机制,如pom, jar, maven-plugin, ejb, war, ear, rar, par
<packaging>war</packaging>
5.<name>mfts-web Maven Webapp</name>
6.profile可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个profile,
然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。比如说,
我们可以通过profile定义在jdk1.5以上使用一套配置信息,在jdk1.5以下使用另外一套配置信息;
或者有时候我们可以通过操作系统的不同来使用不同的配置信息,比如windows下是一套信息
,linux下又是另外一套信息,等等。具体的激活条件有哪些我在后文会讲到。
<profiles>
<profile>
<id>dev</id>
<properties>
<target.dist>dev</target.dist>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<target.dist>test</target.dist>
</properties>
</profile>
<profile>
<id>product</id>
<properties>
<target.dist>product</target.dist>
</properties>
</profile>
<profile>
<id>learning</id>
<properties>
<target.dist>learning</target.dist>
</properties>
</profile>
<profile>
<id>personal</id>
<!-- 默认激活开发配制,使用config-learning.properties来替换设置过虑的资源文件中的${key} -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<target.dist>personal</target.dist>
</properties>
</profile>
</profiles>
7.jar版本
<properties>
<slf4j.version>1.6.4</slf4j.version>
</properties>
8.build 创建项目时必须的信息。
<build> build开始
resources: resource的列表,用于包括所有的资源
<resources>
<resource>
资源所在的位置
<directory>src/main/java</directory>
样式,包括那些资源
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
排除的资源
<excludes>
<exclude>*.sql</exclude>
<exclude>log4j.xml</exclude>
<exclude>logback.xml</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>log4j.xml</include>
<include>logback.xml</include>
<include>jdbc.properties</include>
<include>common.properties</include>
</includes>
是否替换资源中的属性placehold
<filtering>true</filtering>
</resource>
</resources>
9.
<filters>
定义过滤,用于替换相应的属性文件,使用maven定义的属性。设置所有placehold的值
<filter>src/main/resources/config/config-${target.dist}.properties</filter>
</filters>
生成最后的文件的样式
<finalName>mfts-web-${target.dist}</finalName>
10.plugins
<plugins>
<plugin>
的唯一的标识符
为了使项目结构更为清晰,Maven区别对待Java代码文件和资源文件,maven-compiler-plugin用来编译Java代码,maven-resources-plugin则用来处理资源文件。
默认的主资源文件目录是src/main/resources,很多用户会需要添加额外的资源文件目录,这个时候就可以通过配置maven-resources-plugin来实现。
此外,资源文件过滤也是Maven的一大特性,你可以在资源文件中使用${propertyName}形式的Maven属性,然后配置maven-resources-plugin开启对资源文件的过滤,
之后就可以针对不同环境通过命令行或者Profile传入属性的值,以实现更为灵活的构建。
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
用于配置execution目标,一个插件可以有多个目标。
<executions>
<execution>
<id>copy-resources</id>
表示阶段,目标将会在什么阶段执行
<phase>validate</phase>
表示目标
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>src/main/webapp/WEB-INF/</outputDirectory>
<resources>
<resource>
<directory>src/main/resources/fis/</directory>
<filtering>true</filtering>
</resource>
</resources>
<filters>
<filter>src/main/resources/config/config-${target.dist}.properties</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
build完成
</build>
借鉴:
http://www.infoq.com/cn/news/2011/05/xxb-maven-8-plugin/
http://www.cnblogs.com/davidwang456/p/3915031.html
http://blog.csdn.net/eclipser1987/article/details/5755603
http://blog.csdn.net/carolzhang8406/article/details/13622287