设为首页 收藏本站
查看: 2120|回复: 0

[经验分享] Java Spring MVC入门(四)使用Maven创建项目

[复制链接]

尚未签到

发表于 2017-3-3 08:08:55 | 显示全部楼层 |阅读模式
  使用普通方式创建项目的问题                                       
  前几篇文章中,我们使用普通方法在eclispe上创建了项目,并成功的运行了helloworld文件,那么普通方法创建的项目在多人协作开发项目的时候,可能会有下面问题
     1、多人协作时候各成员所使用的jar包版本可能不一致,比如:张三下载的版本是3.2,而李四下载的版本是4.2 ,服务器上的版本是4.3,这样可能导致在本地运行正常,而在服务器上运行却有可能出现问题。
     2、需要从网上去搜索自己所需要的依赖包,如果想要团队协作保证各个成员的jar包保持一致,需要来回的拷贝jar包。

  什么是Maven                                                         
  普通方式创建项目有上面所说的不足之处,还好我们有Maven可以解决上面的问题,那么什么Maven? (官网: http://maven.apache.org/index.html)
  在这里我只能简单的介绍,让大家有个感性上的认识。
  Maven是一个管理项目的工具,可以方便的管理项目的jar包依赖、测试、编译、打包、发布。
  1、管理jar包依赖
  这个功能可能是Maven最突出的特点,大家不用再去网上单独下载jar包,而是在pom.xml里配置jar包的依赖关系,具体看下面例子:



<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<!-- Spring的核心工具包,其他包依赖此包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
  大致解释下几个配置项的意思:
  groupId:所述的项目名称,由于有的项目并不是一个jar包构成的,而是由很多的jar包组成的。因此这个groupId就是整个项目的名称。
  artifactId:包的名称。
  version:版本号。
  packaging:包的类型,一般都是jar,也可以是war之类的。如果不填,默认就是jar。
  大家可以看到每个jar包配置项内都有版本号,这样团队开发时候大家只要保证pom.xml一致,那么Maven就会自动下载pom.xml配置项内的包,这样既不用自己下载,又保证了团队内各个成员下载jar包的版本都一样。
  2、其他功能
  Maven除了管理依赖包之外,还可以编译、测试、打包项目,具体命令如下:   



mvn archetype:create 创建Maven项目
mvn compile 编译源代码
mvn deploy 发布项目
mvn test-compile 编译测试源代码
mvn test 运行应用程序中的单元测试
mvn site 生成项目相关信息的网站
mvn clean 清除项目目录中的生成结果
mvn package 根据项目生成的jar
mvn install 在本地Repository中安装jar
mvn eclipse:eclipse 生成eclipse项目文件
mvn jetty:run 启动jetty服务
mvn tomcat:run 启动tomcat服务
mvn clean package -Dmaven.test.skip=true:清除以前的包后重新打包,跳过测试类
  如果想要更加深入了解Maven请看:
  maven学习(上)- 基本入门用法
  maven学习(中)- 私服nexus搭建
  maven学习(下)利用Profile构建不同环境的部署包

  Eclipse建立Maven项目                                          


  1、打开eclispe 选择Fire-> New -> Maven Project DSC0000.jpg



2、在弹框内填写选项

DSC0001.jpg

DSC0002.jpg



  GroupID是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构。
  ArtifactID就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。
  Version是版本号,这个自己写了。


DSC0003.jpg

填写完成点击“Finish”。项目建好之后如下:

DSC0004.jpg

到这里项目已经基本成型,但是还没有完成,还要稍做配置,我们首先右击项目名->Build Path ->Configure Build Path..

DSC0005.jpg



DSC0006.jpg

把两个"missing"的项"Remove"掉,之后点"OK"。之后右击Java Resources -> New -> Source Folder

DSC0007.jpg



新增Source Folder

DSC0008.jpg

建立三个Source Folder

src/main/java

src/test/java

src/test/resources

完成之后如下:

DSC0009.jpg

之后再进入Java Build Path->Libraries标签,选中 JRE System Library[J2SE-1.5],点击 Edit

DSC00010.jpg

选择下图选项:



DSC00011.jpg

接下来还要处理下排列顺序,进入Java Build path ->Order and Export

DSC00012.jpg

利用"Up" 和 "Down"将顺序调整成和上图一样。

最后还要设置部署程序集,右键项目名->Properties->Deployment Assembly,  此处列表是,部署项目时,文件发布的路径。
  我们删除test的两项,因为test是测试使用,并不需要部署。见下图:


DSC00013.jpg



完成之后应该是下面这样

DSC00014.jpg

OK,终于完成了。
  配置文件pom.xml                                       


   主要是要配置spring框架的一些依赖包,再就是和数据库相关的包,具体内容如下:




<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.mavenPro</groupId>
<artifactId>demo</artifactId>
<packaging>war</packaging>
<version>1.0</version>
<name>demo Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<!-- spring需要的jar包 -->
<!-- Spring的面向切面编程,提供AOP(面向切面编程)的实现 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<!-- Spring的核心工具包,其他包依赖此包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<!-- 提供在基础IOC功能上的扩展服务,此外还提供许多企业级服务的支持,有邮件服务、任务调度、JNDI定位,EJB集成、远程访问、缓存以及多种视图层框架的支持。 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<!-- Spring context的扩展支持,用于MVC方面 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<!-- Spring提供的对AspectJ框架的整合 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<!-- 整合第三方的orm实现,如hibernate,ibatis,jdo以及spring 的jpa实现 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<!-- 对JDBC 的简单封装 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<!-- 为简化jms api的使用而做的简单封装 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<!-- 包含SpringMVC框架相关的所有类。包含国际化、标签、Theme、视图展现的FreeMarker、JasperReports、Tiles、Velocity、XSLT相关类。当然,如果你的应用使用了独立的MVC框架,则无需这个JAR文件里的任何类。 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<!-- 安全相关(待验证) -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-ldap</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<!-- 对JUNIT等测试框架的简单封装 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>3.2.4.RELEASE</version>
<scope>provided</scope>
</dependency>
<!-- 使用 ehcache-spring-annotations 使得在工程中简单配置即可使用缓存   http://www.tuicool.com/articles/reuQvmn -->
<dependency>
<groupId>com.googlecode.ehcache-spring-annotations</groupId>
<artifactId>ehcache-spring-annotations</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.5.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.2.0.RELEASE</version>
</dependency>
<!-- servlet依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>mavenDemo</finalName>
</build>
</project>
  文件里有一些注释,初学者先大致了解,今后会详细介绍。

  配置文件web.xml                                          





<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>demo</display-name>
<!--
该元素用来声明应用范围(整个WEB项目)内的上下文初始化参数 ,这里是加载spring的配置文件
context-param 可以有多个,这里只介绍contextConfigLocation,作用是加载spring的配置文件
这里我曾经遇到一个坑,这里说出来告诉大家。
大家先看<servlet>内有个<init-param>里面也有一个<param-name>contextConfigLocation</param-name>配置
于是我自作聪明把最外层的<context-param>删除,只保留<servlet><init-param>内的配置,结果运行时候报错说找不到classpath:demo-servlet.xml
文件,此时系统会自动去找/WEB-INI/applicationContext.xml文件,此时文件是不存在的所以也报错。
切记:如果要用classpath方式去定位配置文件,文件路径在最外层的配置一定要有,仅仅只写servlet内的配置是无法找到的。如果最外层不想写
只在servlet标签内定位spring配置文件,只能用/WEB-INI/文件名.xml这样的方式。
这里可以看到我们有两个Spring 配置文件,一个是<context-param>里的<param-value>classpath:demo-root-serlvet.xml</param-value>
一个是<servlet><init-param>内的<param-value>classpath:demo-servlet.xml</param-value>,这样的目的是为了将配置文件分开,不同的配置放到不同的
文件里,例如:数据库配置可以放到单独文件,AOP配置可以放到单独文件里。demo-root-serlvet.xml里面可能包含了其他配置文件,这里我们仅仅作为演示,暂时为空。
-->
<context-param>
<param-name>contextConfigLocation</param-name>
<!--
配置路径方式有两种,一种是将文件放到WEB-INF目录下 parm-value的值为/WEB-INF/文件名.xml,另外一种是用classpath:文件名.xml
文件放到/src/main/resources/下
-->
<param-value>classpath:demo-root-servlet.xml</param-value>
</context-param>
<context-param>
<param-name>log4jExposeWebAppRoot</param-name>
<param-value>false</param-value>
</context-param>
<!-- character -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- spring mvc -->
<servlet>
<servlet-name>gameLiveServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:demo-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>gameLiveServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
  注释写的有点多,大家要仔细看,这里重点说下我踩过的坑:



这里我曾经遇到一个坑,这里说出来告诉大家。
大家先看<servlet>内有个<init-param>里面也有一个<param-name>contextConfigLocation</param-name>配置
于是我自作聪明把最外层的<context-param>删除,只保留<servlet><init-param>内的配置,
结果运行时候报错说找不到classpath:demo-servlet.xml文件,此时系统会自动去找/WEB-INI/applicationContext.xml文件,
此时文件是不存在的所以也报错。
切记:如果要用classpath方式去定位配置文件,文件路径在最外层的配置一定要有,仅仅只写servlet内的配置是无法找到的。如果最外层不想写
只在servlet标签内定位spring配置文件,只能用/WEB-INI/文件名.xml这样的方式。

  Spring容器加载web.xml的顺序为context-param >> listener  >> fileter  >> servlet

  Spring配置文件                                       
  在上面的web.xml配置文件中我们有两个Spring的配置文件,分别是/src/man/resources/demo-root-serlvet.xml 和/src/man/resources/demo-servlet.xml
  用classpath方式定位文件必须要放到/src/man/resources/下否则要放到/src/main/webapp/WEB-INF/ 路径下。
  /src/man/resources/demo-root-servlet.xml 文件的主要用途为包含其他子配置文件,例如数据库配置文件、AOP配置文件。
  /src/man/resources/demo-servlet.xml 文件主要是声明一些本项目用到的bean。
  /src/man/resources/demo-root-servlet.xml 内容:



<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd" default-autowire="byName">
<description>Spring公共配置</description>
<!--  <import resource="classpath*:demo-db.xml"/> -->
</beans>
  由于本次不涉及数据库内容,所以我将引入数据配置文件内容注释了。
  /src/man/resources/demo-servlet.xml内容:



<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd" default-autowire="byName">
<description>demo</description>
<!-- 注册Bean -->
<bean id = "HelloWorld" class="com.demo.game.HelloWorld"> </bean>
</beans>
  Hello world                                       
  接下来我们就要写hello world 了,先在/src/main/java里建立一个包,再包内建立一个文件HelloWorld
DSC00015.jpg

DSC00016.jpg

  HelloWorld.java内容如下:



package com.demo.game;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloWorld {
@RequestMapping("/hello")
public void index(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setHeader("content-type", "text/html;charset=UTF-8");
response.getWriter().append("hello World");
}
}
  大家看到没有demo-servlet.xml配置文件里有一句:



<bean id = "HelloWorld" class="com.demo.game.HelloWorld"> </bean>
  将HelloWorld注册为一个bean , 这样就让他由一个普通类变成控制器了,接下来我们启动tomcat server ,再浏览器里输入http://localhost:8080/demo/hello
DSC00017.jpg

  忙活了半天,hello world终于出来了,终于有点小小成就感!!!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-349431-1-1.html 上篇帖子: 大数据技术Hadoop笔试题 下篇帖子: Servlet 3.1 新特性详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表