使用Maven创建Web项目

本文通过Maven完成一个简单的Web项目(注意,Spring配置不是重点,看看就行)

1.从Maven模板创建Web应用程序

命令格式如下:

mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name} -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
这就告诉Maven从**maven-archetype-webapp **这个模板来创建

友情提示:是不是太难记了..好吧,直接输入

mvn archetype:generate
根据向导来创建把。。

比如我这样写:

> mvn archetype:generate -DgroupId=com.mkyong -DartifactId=CounterWebApp -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
[INFO] Scanning for projects…
[INFO]
[INFO] ———————————————————————— [INFO] Building Maven Stub Project (No POM) 1 [INFO] ———————————————————————— [INFO] [INFO] Generating project in Batch mode [INFO] —————————————————————————- [INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-webapp:1.0 [INFO] —————————————————————————- [INFO] Parameter: groupId, Value: com.mkyong [INFO] Parameter: packageName, Value: com.mkyong [INFO] Parameter: package, Value: com.mkyong [INFO] Parameter: artifactId, Value: CounterWebApp [INFO] Parameter: basedir, Value: /Users/mkyong/Documents/workspace [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] project created from Old (1.x) Archetype in dir: /Users/mkyong/Documents/workspace/CounterWebApp [INFO] ———————————————————————— [INFO] BUILD SUCCESS [INFO] ———————————————————————— [INFO] Total time: 3.147s [INFO] Finished at: Thu Dec 20 20:35:19 MYT 2012 [INFO] Final Memory: 12M/128M [INFO] ————————————————————————
就创建了一个包名为com.mkyong,类名为CounterWebApp的项目了

2.Maven的Web程序目录结构

标准的web.xml部署描述文件生成了

CounterWebApp
   |-src
   |—main
   |—–resources
   |—–webapp
   |——-index.jsp
   |——-WEB-INF
   |———web.xml
   |-pom.xml
对结构有疑问的去这里

生成的pom.xml文件如下

<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.mkyong</groupId>
  <artifactId>CounterWebApp</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>CounterWebApp Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>CounterWebApp</finalName>
  </build>
</project>
没啥疑问的。web.xml文件则如下:
<!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> </web-app>

index.jsp内容是:
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>

 3.转换以支持Eclipse

为了使Maven的web项目支持Eclipse,在命令行下,cd到CounterWebApp目录下,然后输入这个命令

mvn eclipse:eclipse -Dwtpversion=2.0
-Dwtpversion=2.0参数是必需的,这个参数指明了是web项目,然后导入到eclipse里就行了。从导入的工程ico可以看出是个web项目

图一

eclipse-tomcat-server final-folder project-structure

不要迷惑,如果我们只输入

mvn eclipse:eclipse
会转换成java项目,而不是web项目的。

好了,现在项目已经准备好部署了,eclipse里的tomcat server插件装好,然后启动项目

图二

eclipse-tomcat-server

可以通过_http://localhost:8080/CounterWebApp/_地址来访问

4.更新pom文件

为了使Maven项目支持Spring MVC框架,我们需要修改pom.xml文件

1.添加编译插件指定jdk6来编译

2.添加Spring框架依赖

3.升级JUnit到4.1.1

<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.mkyong</groupId>
    <artifactId>CounterWebApp</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>CounterWebApp Maven Webapp</name>
    <url>http://maven.apache.org</url>

&lt;properties&gt;
    &lt;spring.version&gt;3.0.5.RELEASE&lt;/spring.version&gt;
    &lt;junit.version&gt;4.11&lt;/junit.version&gt;
    &lt;jdk.version&gt;1.6&lt;/jdk.version&gt;
&lt;/properties&gt;

&lt;dependencies&gt;

    &lt;!-- Spring 3 dependencies --&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.springframework&lt;/groupId&gt;
        &lt;artifactId&gt;spring-core&lt;/artifactId&gt;
        &lt;version&gt;${spring.version}&lt;/version&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;org.springframework&lt;/groupId&gt;
        &lt;artifactId&gt;spring-web&lt;/artifactId&gt;
        &lt;version&gt;${spring.version}&lt;/version&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;org.springframework&lt;/groupId&gt;
        &lt;artifactId&gt;spring-webmvc&lt;/artifactId&gt;
        &lt;version&gt;${spring.version}&lt;/version&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;junit&lt;/groupId&gt;
        &lt;artifactId&gt;junit&lt;/artifactId&gt;
        &lt;version&gt;${junit.version}&lt;/version&gt;
        &lt;scope&gt;test&lt;/scope&gt;
    &lt;/dependency&gt;
&lt;/dependencies&gt;
&lt;build&gt;
    &lt;finalName&gt;CounterWebApp&lt;/finalName&gt;
    &lt;plugins&gt;
        &lt;plugin&gt;
            &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
            &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
            &lt;version&gt;3.0&lt;/version&gt;
            &lt;configuration&gt;
                &lt;source&gt;${jdk.version}&lt;/source&gt;
                &lt;target&gt;${jdk.version}&lt;/target&gt;
            &lt;/configuration&gt;
        &lt;/plugin&gt;
    &lt;/plugins&gt;
&lt;/build&gt;

</project>

 5.Spring MVC 松耦合

创建Spring MVC控制器类,有两个方法,打印信息

package com.mkyong.controller;

import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod;

@Controller @RequestMapping(“/”) public class BaseController {

@RequestMapping(value="/welcome", method = RequestMethod.GET)
public String welcome(ModelMap model) {

    model.addAttribute("message", "Maven Web Project + Spring 3 MVC - welcome()");

    //Spring uses InternalResourceViewResolver and return back index.jsp
    return "index";

}

@RequestMapping(value="/welcome/{name}", method = RequestMethod.GET)
public String welcomeName(@PathVariable String name, ModelMap model) {

    model.addAttribute("message", "Maven Web Project + Spring 3 MVC - " + name);
    return "index";

}

}

然后,创建Spring配置文件,定义视图解析器
<beans xmlns=“http://www.springframework.org/schema/beans"
    xmlns:context=“http://www.springframework.org/schema/context"
    xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation=”
        http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

&lt;context:component-scan base-package="com.mkyong.controller" /&gt;

&lt;bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt;
    &lt;property name="prefix"&gt;
        &lt;value&gt;/WEB-INF/pages/&lt;/value&gt;
    &lt;/property&gt;
    &lt;property name="suffix"&gt;
        &lt;value&gt;.jsp&lt;/value&gt;
    &lt;/property&gt;
&lt;/bean&gt;

</beans>

然后更新一下web.xml文件,通过Spring的监听器ContextLoaderListener把Spring框架集成进去
<web-app xmlns=“http://java.sun.com/xml/ns/javaee"
          xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation=“http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
          version=“2.5”>

&lt;display-name&gt;Counter Web Application&lt;/display-name&gt;

&lt;servlet&gt;
    &lt;servlet-name&gt;mvc-dispatcher&lt;/servlet-name&gt;
    &lt;servlet-class&gt;
        org.springframework.web.servlet.DispatcherServlet
    &lt;/servlet-class&gt;
    &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
&lt;/servlet&gt;

&lt;servlet-mapping&gt;
    &lt;servlet-name&gt;mvc-dispatcher&lt;/servlet-name&gt;
    &lt;url-pattern&gt;/&lt;/url-pattern&gt;
&lt;/servlet-mapping&gt;

&lt;context-param&gt;
    &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;
    &lt;param-value&gt;/WEB-INF/mvc-dispatcher-servlet.xml&lt;/param-value&gt;
&lt;/context-param&gt;

&lt;listener&gt;
    &lt;listener-class&gt;
        org.springframework.web.context.ContextLoaderListener
    &lt;/listener-class&gt;
&lt;/listener&gt;

</web-app>

然移动index.jsp到WEB-INF目录里,以防用户直接访问他,同时我们编辑,增加${message}变量,也就是controller控制器传过来的值到页面

最终的页面结构是:

图三

final-folder

6.Eclipse+Tomcat

为了通过Eclipse的Tomcat插件开始/调试项目,需要再执行一次下面的命令,使得所有的依赖附加完成

mvn eclipse:eclipse -Dwtpversion=2.0
在没执行以前,项目依赖是空的

图四

web-deployment-assembly

执行完以后,就都有了

图五

web-deployment-assembly-2

重要!许多人就是没有第二次执行这个命令导致无法开始/调试,如果有问题,右击你的项目属性,看看依赖是否为空

7.Maven打包

<project …>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mkyong</groupId>
    <artifactId>CounterWebApp</artifactId>

&lt;packaging&gt;war&lt;/packaging&gt;
&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;</pre>

web项目打包成war。放在target目录

进入项目目录,执行一下就可以了

mvn package
然后把target目录的CountWebApp.war文件拷贝,并部署到你的web容器里就行了

8.Demo演示

打开http://localhost:8080/CounterWebApp/welcome

可以看到

图六

demo1

我们传个参数进去

http://localhost:8080/CounterWebApp/welcome/mkyong

就可以看到效果了

图七

demo2

9.Demo下载

CounterWebApp.zip

comments powered by Disqus