使用Maven创建Web应用程序项目

在本教程中,我们将演示如何使用 Maven 创建一个 Java Web 项目(Spring MVC)。

用到的技术/工具:

  1. Maven 3.3.3
  2. Eclipse 4.3
  3. JDK 8
  4. Spring 4.1.1.RELEASED
  5. Tomcat 7
  6. Logback 1.0.13

1. 从Maven模板创建Web项目

您可以通过使用Maven的maven-archetype-webapp模板来创建一个快速启动Java Web应用程序的项目。在终端(* UNIX或Mac)或命令提示符(Windows)中,导航至您想要创建项目的文件夹。

键入以下命令:

$ mvn archetype:generate -DgroupId=com.yiibai -DartifactId=CounterWebApp -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

具体示例 :

C:worksp>mvn archetype:generate -DgroupId=com.yiibai -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] >>> maven-archetype-plugin:2.4:generate (default-cli) > generate-sources@ standalone-pom >>>[INFO][INFO] <<< maven-archetype-plugin:2.4:generate (default-cli) < generate-sources@ standalone-pom <<<[INFO][INFO] --- maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom ---[INFO] Generating project in Batch modeDownloading: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-webapp/1.0/maven-archetype-webapp-1.0.jarDownloaded: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-webapp/1.0/maven-archetype-webapp-1.0.jar (4 KB at 0.1 KB/sec)Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-webapp/1.0/maven-archetype-webapp-1.0.pomDownloaded: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-webapp/1.0/maven-archetype-webapp-1.0.pom (533 B at 0.1 KB/sec)[INFO] ----------------------------------------------------------------------------[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-webapp:1.0[INFO] ----------------------------------------------------------------------------[INFO] Parameter: basedir, Value: C:worksp[INFO] Parameter: package, Value: com.yiibai[INFO] Parameter: groupId, Value: com.yiibai[INFO] Parameter: artifactId, Value: CounterWebApp[INFO] Parameter: packageName, Value: com.yiibai[INFO] Parameter: version, Value: 1.0-SNAPSHOT[INFO] project created from Old (1.x) Archetype in dir: C:workspCounterWebApp[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 10:30 min[INFO] Finished at: 2015-10-28T20:31:03+08:00[INFO] Final Memory: 16M/174M[INFO] ------------------------------------------------------------------------

新的Web项目命名为 “CounterWebApp”,以及一些标准的 web 目录结构也会自动创建。

2. 项目目录布局

查看生成的项目结构布局:

.|____CounterWebApp||____pom.xml||____src|||____main||||____resources||||____webapp|||||____index.jsp|||||____WEB-INF||||||____web.xml


Maven 产生了一些文件夹,一个部署描述符 web.xml,pom.xml 和 index.jsp。

注意,
请查看官方Maven标准目录布局指南来了解更多。

pom.xml

<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"> <display-name>Counter Web Application</display-name> <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>                        org.springframework.web.servlet.DispatcherServlet                </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value> </context-param> <listener> <listener-class>                   org.springframework.web.context.ContextLoaderListener                </listener-class> </listener></web-app>

5.4 移动文件 index.jsp 到 WEB-INF/pages 目录下, 为了保护直接访问。并更新内容:

/src/main/webapp/WEB-INF/pages/index.jsp


5.5 在资源文件夹(resources)中创建 logback.xml 文件

/src/main/resources/logback.xml
<?xml version="1.0" encoding="UTF-8"?> 

6. Eclipse + Tomcat

在第5步中创建所有文件以后,这里有一些方法可以用来部署和测试Web项目,我们这里推荐使用6.2中的方法。

6.1 要编译,测试和项目打包成一个WAR文件,输入:

mvn package

一个新的 WAR 文件将在 project/target/CounterWebApp.war产生,只需复制并部署到Tomcat 发布的目录。

6.2 如果想通过 Eclipse 服务器这个项目插件(Tomcat 或其它容器)调试,这里再输入:

mvn eclipse:eclipse

如果一切顺利,该项目的依赖将被装配附加到 Web部署项目。图片: 右键点击 project -> Properties -> Deployment Assembly

6.3 Maven 的 Tomcat 插件声明(加入到 pom.xml):

pom.xml
<!-- For Maven Tomcat Plugin --> 

键入以下命令(有时网络不通畅需要执行2-3次):

mvn tomcat:runtp://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details20:37:32,089 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Seg level of logger [com.yiibai.controller] to DEBUG20:37:32,089 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Seg additivity of logger [com.yiibai.controller] to false20:37:32,090 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction -ching appender named [STDOUT] to Logger[com.yiibai.controller]20:37:32,090 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerActiontting level of ROOT logger to ERROR20:37:32,090 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction -ching appender named [STDOUT] to Logger[ROOT]20:37:32,090 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationActi End of configuration.20:37:32,091 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@3bead5  Registering current configuration as safe fallback point十月 28, 2015 20:37:32 下午 org.apache.catalina.core.ApplicationContext log信息: Initializing Spring root WebApplicationContext十月 28, 2015 20:37:33 下午 org.apache.catalina.core.ApplicationContext log信息: Initializing Spring FrameworkServlet 'mvc-dispatcher'十月 28, 2015 20:37:33 下午 org.apache.coyote.http11.Http11Protocol init信息: Initializing Coyote HTTP/1.1 on http-8080十月 28, 2015 20:37:33 下午 org.apache.coyote.http11.Http11Protocol start信息: Starting Coyote HTTP/1.1 on http-8080

这将启动Tomcat,部署项目默认在端口8080。

出错:Maven项目下update maven后Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderL

解决方案:

1.右键点击项目--选择Properties

选择Deployment Assembly,在右边点击Add按钮,在弹出的窗口中选择Java Build Path Entries

2.点击Next,选择Maven Dependencies

3.点击Finish,然后可以看到已经把Maven Dependencies添加到Web应用结构中了

操作完后,重新部署工程,不再报错了。然后我们再到.metadata.pluginsorg.eclipse.wst.server.coretmp0wtpwebapps目录下,发现工程WEB-INF目录下自动生成了lib目录,并且所有的依赖jar包也都已经部署进来。问题因此解决。