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

用到的技术/工具:

Maven 3.3.3

Eclipse 4.3

JDK 8

Spring 4.1.1.RELEASED

Tomcat 7

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=CounterWebAp

p -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 mode

Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/ma

ven-archetype-webapp/1.0/maven-archetype-webapp-1.0.jar

Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/mav

en-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/ma

ven-archetype-webapp/1.0/maven-archetype-webapp-1.0.pom

Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/mav

en-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:\worksp\CounterWebApp

[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。

pom.xml

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">

4.0.0

com.yiibai

CounterWebApp

war

1.0-SNAPSHOT

CounterWebApp Maven Webapp

http://maven.apache.org

junit

junit

3.8.1

test

CounterWebApp

web.xml – Servlet 2.3 已经比较旧, 建议升级到2.5

/p>

"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd" >Archetype Created Web Application

index.jsp – 一个简单的 hello world html 页面文件

data-ad-client="ca-pub-2836379775501347"data-ad-slot="3642936086"data-ad-region="mkyongregion">

(adsbygoogle = window.adsbygoogle || []).push({});

Hello World!

3. Eclipse IDE 支持

要导入这个项目到Eclipse中,需要生成一些 Eclipse 项目的配置文件:

3.1、在终端,进入到 “CounterWebApp” 文件夹中,键入以下命令:

C:\worksp>cd CounterWebApp

C:\worksp\CounterWebApp>mvn eclipse:eclipse -Dwtpversion=2.0

[INFO] Scanning for projects...

Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven -war-plugin/2.2/maven-war-plugin-2.2.pom

Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven- war-plugin/2.2/maven-war-plugin-2.2.pom (7 KB at 2.5 KB/sec)

Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven -war-plugin/2.2/maven-war-plugin-2.2.jar

Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven- war-plugin/2.2/maven-war-plugin-2.2.jar (77 KB at 26.2 KB/sec)

[INFO]

[INFO] ------------------------------------------------------------------------

[INFO] Building CounterWebApp Maven Webapp 1.0-SNAPSHOT

[INFO] ------------------------------------------------------------------------

[INFO]

[INFO] >>> maven-eclipse-plugin:2.10:eclipse (default-cli) > generate-resources

@ CounterWebApp >>>

[INFO]

[INFO] <<

@ CounterWebApp <<<

[INFO]

[INFO] --- maven-eclipse-plugin:2.10:eclipse (default-cli) @ CounterWebApp ---

[INFO] Adding support for WTP version 2.0.

[INFO] Using Eclipse Workspace: null

[INFO] Adding default classpath container: org.eclipse.jdt.launching.JRE_CONTAINER

[INFO] Not writing settings - defaults suffice

[INFO] Wrote Eclipse project for "CounterWebApp" to C:\worksp\CounterWebApp.

[INFO]

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 7.982 s

[INFO] Finished at: 2015-10-28T20:24:57+08:00

[INFO] Final Memory: 15M/146M

[INFO] ------------------------------------------------------------------------

注意,此选项 -Dwtpversion=2.0 告诉 Maven 将项目转换到 Eclipse 的 Web 项目(WAR),而不是默认的Java项目(JAR)。为方便起见,以后我们会告诉你如何配置 pom.xml 中的这个 WTP 选项。

3.2 导入到 Eclipse IDE – File -> Import… -> General -> Existing Projects into workspace.

图像说明: 在 Eclipse 中,如果看到项目顶部有地球图标,意味着这是一个 Web 项目。

4. 更新POM

在Maven中,Web项目的设置都通过这个单一的pom.xml文件配置。

添加项目依赖 - Spring, logback 和 JUnit

添加插件来配置项目

阅读注释清楚明了。

pom.xml

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">

4.0.0

com.yiibai

CounterWebApp

war

1.0-SNAPSHOT

CounterWebApp Maven Webapp

http://maven.apache.org

1.7

4.1.1.RELEASE

1.2

4.11

1.0.13

1.7.5

junit

junit

${junit.version}

org.springframework

spring-core

${spring.version}

commons-logging

commons-logging

org.slf4j

jcl-over-slf4j

${jcl-over-slf4j.version}

ch.qos.logback

logback-classic

${logback.version}

org.springframework

spring-web

${spring.version}

org.springframework

spring-webmvc

${spring.version}

jstl

jstl

${jstl.version}

CounterWebApp

org.apache.maven.plugins

maven-eclipse-plugin

2.9

true

false

2.0

org.apache.maven.plugins

maven-compiler-plugin

2.3.2

${jdk.version}

${jdk.version}

org.apache.tomcat.maven

tomcat7-maven-plugin

2.2

/CounterWebApp

注意,为方便起见,声明 maven-eclipse-plugin,并配置wtpversion 来避免输入参数 -Dwtpversion=2.0。现在,每次使用 mvn eclipse:eclipse,Maven将这个项目导入转换为 Eclipse Web 项目。

#之前

mvn eclipse:eclipse --> Eclipse Java project (JAR)

mvn eclipse:eclipse -Dwtpversion=2.0 --> Eclipse Java web project (WAR)

#之后

mvn eclipse:eclipse --> Eclipse Java web project (WAR)

5. 更新源代码

在这一步中,在上一步配置完pom.xml后,重新执行 mvn eclipse:eclipse 这个命令,我们将创建Spring MVC的一些文件和logback日志框架的文件夹,最终的项目结构如下所示:

.

|____pom.xml

|____src

| |____main

| | |____java

| | | |____com

| | | | |____yiibai

| | | | | |____controller

| | | | | | |____BaseController.java

| | |____resources

| | | |____logback.xml

| | |____webapp

| | | |____WEB-INF

| | | | |____mvc-dispatcher-servlet.xml

| | | | |____pages

| | | | | |____index.jsp

| | | | |____web.xml

注意,如果它不存在,需要手动创建文件夹。

5.1 创建 Spring MVC 的控制器类。

/src/main/java/com/yiibai/controller/BaseController.java

package com.yiibai.controller;

import org.slf4j.LoggerFactory;

import org.springframework.stereotype.Controller;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

@Controller

public class BaseController {

private static int counter = 0;

private static final String VIEW_INDEX = "index";

private final static org.slf4j.Logger logger = LoggerFactory.getLogger(BaseController.class);

@RequestMapping(value = "/", method = RequestMethod.GET)

public String welcome(ModelMap model) {

model.addAttribute("message", "Welcome");

model.addAttribute("counter", ++counter);

logger.debug("[welcome] counter : {}", counter);

// Spring uses InternalResourceViewResolver and return back index.jsp

return VIEW_INDEX;

}

@RequestMapping(value = "/{name}", method = RequestMethod.GET)

public String welcomeName(@PathVariable String name, ModelMap model) {

model.addAttribute("message", "Welcome " + name);

model.addAttribute("counter", ++counter);

logger.debug("[welcomeName] counter : {}", counter);

return VIEW_INDEX;

}

}

5.2 创建Spring配置文件。

/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml

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.xsd         http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd">

class="org.springframework.web.servlet.view.InternalResourceViewResolver">

/WEB-INF/pages/

.jsp

5.3 更新让现有的 web.xml 支持 Servlet 2.5(默认的Servlet2.3 太旧了), 并且还通过 Spring 监听器 ContextLoaderListener 集成了Spring框架。

/src/main/webapp/WEB-INF/web.xml

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">

Counter Web Application

mvc-dispatcher

org.springframework.web.servlet.DispatcherServlet

1

mvc-dispatcher

/

contextConfigLocation

/WEB-INF/mvc-dispatcher-servlet.xml

org.springframework.web.context.ContextLoaderListener

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

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

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

mvn tomcat:run

tp://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details

20:37:32,089 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Se

g level of logger [com.yiibai.controller] to DEBUG

20:37:32,089 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Se

g additivity of logger [com.yiibai.controller] to false

20: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.RootLoggerAction

tting level of ROOT logger to ERROR

20: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\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\目录下,发现工程WEB-INF目录下自动生成了lib目录,并且所有的依赖jar包也都已经部署进来。问题因此解决。

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

用c 语言创建web项目,使用Maven创建Web应用程序项目相关推荐

  1. 空调箱项目,恒温恒湿。 暖通程序项目全部资料。 从设计前原理图,元器件选型,控制柜接线图

    空调箱项目,恒温恒湿. 暖通程序项目全部资料. 从设计前原理图,元器件选型,控制柜接线图,程序及上位机,说明书,参数设置,竣工图等. 该项目适合新手学习,全方面提升自己. 1.0自控竣工图纸 1.1自 ...

  2. maven创建父子依赖项目—pom

    maven创建父子依赖项目 maven创建父子依赖项目: 参考思路: 思维图: 三种项目示例: jar:控制台项目: war:web项目: war:web项目:(待写) 案例:横向拆分(按照项目结构进 ...

  3. 健康菜谱微信小程序+项目前后台源码(JavaSSM+Mysql)

     博主介绍:✌在职Java研发工程师.专注于程序设计.源码分享.技术交流.专注于Java技术领域和毕业设计✌ 项目名称 健康菜谱微信小程序+项目前后台源码(JavaSSM+Mysql) 视频效果 ht ...

  4. 微信小程序项目开发教程

    一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可. 2.注册成功后进入首页,在 小程序发布流程->小程序 ...

  5. 小程序 --- 项目小练手Ⅰ

    1. 接口文档 2. 帮助文档 小程序开发文档 mdn 阿里巴巴字体 iconfont 3. 项目搭建 3.1 新建小程序项目 填入自己的appid: wxdbf2b5e8c2f521a3 3.2 文 ...

  6. 全网最全微信小程序项目源码

    查看全文 http://www.taodudu.cc/news/show-3737788.html 相关文章: 使用ColorUI构建小程序项目 [小程序从0到1]小程序项目的创建(项目目录结构) 微 ...

  7. 微信开发者工具怎么导入电商小程序项目教程

    从网上下载的小程序源码怎么导入微信开发者工具呢? 1.打开已经安装的微信官方开发者工具,登录. 2.选择"无AppID",随意取个项目名称,然后点击"选择"找到 ...

  8. Eclipse+Maven创建web项目

    有时候我们想用eclipse+maven创建web项目,怎么操作呢,下面我来给大家来分享一下方法 所需工具 已经安装了maven插件的elipse 步骤 1.打开eclipse,右键new--othe ...

  9. Maven学习总结(七)——eclipse中使用Maven创建Web项目

    2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(七)--eclipse中使用Maven创建Web项目 一.创建Web项目 1.1 选择建立Maven Pr ...

  10. 使用maven创建项目和cannot change version web module 3.0

    近期下载了最新的Eclipse mars.2, 这个eclipse自带了maven插件,于是就用maven尝试创建一个java web项目. 第一步,例如以下图所看到的选择 Maven Project ...

最新文章

  1. 特斯拉“自动召唤”有软肋!正面识别很厉害,侧面物体看不见,实测差点碾过行人脚面...
  2. gcc / -L 和 -Wl,-rpath 区别
  3. typescript接口定义
  4. 尚硅谷_JavaScript_学习笔记
  5. Scala里Unit 与 () Unit的区别
  6. 作者:吴城文,男,清华大学计算机科学与技术系硕士生。
  7. android开发中悬浮窗被禁用,无权限开启悬浮窗的解决方案
  8. GRADS软件初步学习
  9. 教你写脚本屏蔽百度广告 csdn广告
  10. 计算机cpi的公式,cpi定义及计算公式(CPI definition and calculation formula).doc
  11. 在追寻梦想的路上,我们都一样
  12. 晨光计算机开n次方,【三名工程】晓之以理,导之以行,动之以情——郑标名师工作室第一次网络研修记录...
  13. 原来 Elasticsearch 还可以这么理解
  14. 打造移动应用与游戏安全防线,腾讯WeTest安全服务全线升级
  15. css3新增属性sticky
  16. freebsd php 编译 mysql sql2005_[伊达原创]FreeBSD8.0源码编译安装MYSQL5 APACHE2.2 PHP5.3.2
  17. MIT 线性代数 Linear Algebra 26:复矩阵,傅里叶矩阵, 快速傅里叶变换 FFT
  18. php微信网页不缓存,微信浏览器取消缓存的方法
  19. 解决小程序-wx.canvasGetImageData()-RGB取色盘苹果手机获取颜色慢问题
  20. 什么是模型思维?发现问题解决问题之道:14种 MR 模型关系思维模式

热门文章

  1. java扫码盒_[腾讯 TMQ] JAVA 代码覆盖率工具 JaCoCo-实践篇
  2. opencv数字图像处理(3)- 图像平滑与锐化
  3. Hector代码笔记
  4. 加权最小二乘(wls)滤波算法原理及实现
  5. 上海中环C位出道,自动驾驶天团横「扫」北上广
  6. [算法]机器人运动范围
  7. 类名作为形式参数传递
  8. PHP中“简单工厂模式”实例讲解(转)
  9. [译]C#7 Pattern Matching
  10. “被”夭折的翻译——《CoffeeScript: Accelerated JavaScript Development》