Java EE 学习(5):IDEA + maven + spring 搭建 web(1)

参考:http://www.cnblogs.com/lonelyxmas/p/5397422.html

  http://www.ctolib.com/docs-IntelliJ-IDEA-c--159047.html

孔老师的《SpringMVC视频教程

记录: 本节主要完成 使用 maven 管理 spring + 项目 包,搭建 maven+spring 的 web 项目平台。

前提: 已安装并配置好

- Intellij IDEA 16.3.5 Ultimate

- JDK 1.8.0_45

- Maven 3.3.9

- Tomcat 8.5.12

- MySql 5.7

- Spring 4.0.0

- Bootstrap 3.3.5 (可有可无)

不清楚的可参考

1. 创建 Maven 项目

对于不使用Maven的开发者,可以直接建一个简单的Web项目。使用Maven的话,请按照图进行操作。

(1)File->New Project 可进入以下界面:首先选择左边栏Maven,再配置JDK(一般如果之前添加了JDK的话会自动填充,如未添加的话点击旁边的New将JDK目录导入即可)。勾选“Create from archetype“,然后选中4处蓝色位置webapp,点Next。

(2)Next 后进入如下界面:这里需要填写GroupId和ArtifactId还有Version,这三个属性目的是标识你的项目的唯一性,比如Tomcat的GroupId是org.apache,即它是apache组织的项目,ArtifactId是tomcat,项目名为tomcat,而我当前使用的Version是7.0.68。这些只在发布时有用,在此可以随便填写,填好后点Next。

(3)Next 后,进入如下界面(配置 maven ):打开Maven home directory,可以发现IntelliJ IDEA已经集成了Maven 2和Maven 3两个版本,如果使用默认集成的maven的话,选择Buldled(Maven 3),直接点击Next。

我们也可以导入本地新安装的较新的Maven版本,点击蓝色箭头右边的 ... 按钮将Maven路径导入即可,点击Next:

(4)Next 后进入如下界面:填写项目名(可与上面 ID 相同,也可不同),选择项目保存路径,点击Finish:

(5)finish 后,进入如下界面,maven会在后台生成web项目,这需要等待一定的时间,视网络环境而定,经验发现用较新版本的maven项目生成更快,使用IDEA集成的maven可能会等待很长一段实践。

左边红框中展示了该项目的文件结构。可以发现,它在src/main下创建了以下文件夹:

recources文件夹:一般用来存放一些资源文件
webapp文件夹:用来存放 web 配置文件以及 jsp 页面等,这已经组成了一个原始的 web 应用。

注意:选择 右边红框 的 Enable-Auto-Import,可以在每次修改 pom.xml 后,自动的下载并导入 jar 包,这一点在后面详述。

2. 新建 source 文件夹并命名为 Java,并设置:

(1) 按 ctrl+alt+shift+s,或者File->Project Structure,或点击如下:查看项目结构

出现如下图:

(2)选择Modules,在SpringMVCDemo的src\main文件夹中新建一个文件夹,取名为java:

接着,选中java文件夹,点击上面的 Make as:Sources,该文件夹就会变成蓝色,用以保存java代码,按OK,结束配置。

3.Maven自动导入jar包(添加项目包):包括 Spring 包(使用 spring 框架),测试包,日志包 等...

既然我们要用SpringMVC开发,那肯定少不了SpringMVC的相关jar包。如果不使用Maven的话,那就需要去官网下载相关的jar包,然后导入到项目中。现在使用maven的话,就不需要上网找jar包了。具体容我一一道来。

Maven所做的工作其实很简单,就是自动把你需要的jar包下载到本地,然后关联到项目中来。maven的所有jar包都是保存在几个中央仓库里面的,其中一个最常用的是Maven Repository,即,你需要什么jar包,它就会从仓库中拿给你。那么如何告诉maven需要什么jar包呢?我们看看工程目录,能找到一个pom.xml文件(这个文件在刚创建好项目时就已经展现在了大家面前),maven就是靠它来定义需求的,代码如下:

<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.example</groupId>
    <artifactId>testWeb</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>testWeb 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>testWeb</finalName>
    </build>
</project>

我们可以看到这个文件包含了我们之前定义的本项目的gropId等信息,这些信息是该项目的标识,我们不要去改动它们。

重点看<dependencies>标签,翻译过来是”依赖“的意思,也就是说把对每个包的需求都称为一个依赖<depedency>,定义在<dependencies>中。在每个<depedency>中,你需要提供的是所需jar包的groupId、artifactId、version这三个必要信息。比如上面我们看到引入可一个junit包,格式如下:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
</dependency>

这是单元测试包,提供了三个基本信息,第4个scope对其他包来说是非必需的。所有jar包的引入都要满足这个格式。那么如何查看这些jar包的3个信息呢,可能刚接触是开发者还不是很熟悉,这个时候就需要查阅仓库了。比如我们需要引入Spring核心jar包spring-core,打开Maven Repository搜索spring-core,进入如下界面:

点击进入红框选中的 Spring Core,如下所示,可以看到各版本的使用情况:

选择使用最多版本 4.3.7.RELEASE,可以看到其dependency写法如下红框所示:

我们将其复制到 pom.xml 中的 <dependencies> 中(此节使用的是参考实例中的目录,不影响,直接使用自己对应目录的文件,无须注意什么):

这样,Maven 就会开始自动下载 jar 包到本地仓库,然后关联到你的项目中,下载完成后,我们展开工程目录中 External Libraries:

可以发现,虽然我们只写了一个依赖,但是它导入了两个jar包,也就是说,导入某个jar包时,与它密切相关的 jar 包也会同时被导入进来。

除了spring-core,我还要spring-context,复制spring-core的<dependency>,将spring-core改为spring-context,如下:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.3.7.RELEASE</version>
</dependency>

下载完成后,查看External Libraries,会不会发现,瞬间导入了好多jar包(当然不是瞬间,这得看你的网速了)呢:

这就是 Maven 的强大之处,如果你需要使用 SpringMVC 开发网站的话,只需记住几个重要的包的名字,就可以轻松将所有包导入项目中。

长话短说,现在我们要进行 SpringMVC 的开发,请把你的 pom.xml 变成下面的样子,当然不要改你的 grupId 等信息(从modelVersion 到 url 都不要动):

<properties>
        <spring.version>4.3.7.RELEASE</spring.version>
        <hibernate.version>5.2.10.Final</hibernate.version>
</properties>

请在<dependencies>中加入以下依赖:

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.11.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.39</version>
        </dependency>

将<build>改成如下形式:

<build>
     <finalName>springmvcdemo</finalName>
     <plugins>
          <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-compiler-plugin</artifactId>
               <configuration>
                   <source>1.8</source>   # 此处的 1.8 指的是 JDK 的版本,目前一般为 1.7 或 1.8
                   <target>1.8</target>
               </configuration>
          </plugin>
     </plugins>
</build>

我的 完整的 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.example</groupId>
  <artifactId>testWeb</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>testWeb Maven Webapp</name>
  <url>http://maven.apache.org</url>

    <properties>
        <spring.version>4.3.7.RELEASE</spring.version>
        <hibernate.version>5.2.10.Final</hibernate.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.11.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.39</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>testWeb</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

完整的 pom.xml 文件

我们可以发现,除了导入了spring相关jar包,还有一些其他的包,这些包都是有作用的,我们后面慢慢说。如果不使用Maven请自行下载spring、hibernate、mysql、jstl等相关jar包然后导入到工程中。至此,jar包的导入就完成了

此处补充下 Maven 快速排查依赖包冲突

(1)如下图,点击 箭头所指按钮,

  • 出现左边的项目依赖结构图,通过此图我们可以很好的观察项目的依赖依赖情况。
  • 如下标注1 所示,我们可以直接在依赖结构图上编辑依赖,常用的就是此排除功能。

(2)如下图所描述,一般我们出现红色线的时候是都要进行排除的,防止出现因为版本不同的依赖包造成无法编译。

(另开一文,见Java EE 学习(6):IDEA + maven + spring 搭建 web(2)- 配置 Spring

时间: 2024-10-27 02:20:31

Java EE 学习(5):IDEA + maven + spring 搭建 web(1)的相关文章

Java EE 学习(7):IDEA + maven + spring 搭建 web(3)- 配置数据库

参考: https://my.oschina.net/gaussik/blog/513444 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) Java EE 学习(6):IDEA + maven + spring 搭建 web(2) 5 数据库配置 下面,就要通过一个简单的例子,来介绍 SpringMVC 如何集成 Spring Data JPA(由 Hibernate JPA 提供),来进行强大的数据库访问,并通过本章节

Java EE 学习(8):IDEA + maven + spring 搭建 web(4)- 用户管理

转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) ava EE 学习(6):IDEA + maven + spring 搭建 web(2)- 配置 Spring Java EE 学习(7):IDEA + maven + spring 搭建 web(3)- 配置数据库 记录: 通过对用户表的管理,更加深入地讲解SpringMVC的操作. 6 用户管理 既然我们

Java EE 学习(9):IDEA + maven + spring 搭建 web(5)- 博客文章管理

转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) . 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) Java EE 学习(6):IDEA + maven + spring 搭建 web(2)- 配置 Spring Java EE 学习(7):IDEA + maven + spring 搭建 web(3)- 配置数据库 Java EE 学习(8):IDEA + maven + spring 搭建 web(

Java EE 学习(3):IDEA + maven + spring 搭建 web

摘要: 主要讲解使用 IDEA 开发 Spring MVC 的环境搭建,Maven的简单教学. 参考1:https://my.oschina.net/gaussik/blog/385697 参考2:http://www.cnblogs.com/Leo_wl/p/4459274.html 前言 本文是本人开始使用 IDEA 的开端,从 java 框架开始,安装参考以上文章. 一.相关环境 - JDK 1.8.0_45 - Maven 3.3.9   (Maven 开发) - Tomcat 8.5.

JAVA EE 学习笔记[V1 jsp编程]

在三月初学校开设了javaee的课程,也就此展开了对javaee基础的学习.然后老师也对这次的课程有一定要求.前面的基础就为最终的作业做准备啦~ 在上学期我们学习了java相关知识,也对java se 的安装使用有了一定的认知,而java ee则是构建于java se 平台之上的一套多层的,可扩展的的网络应用. 学习java ee我们首先进行环境的搭建.无非就是使用 tomcat进行服务器的搭建和jdk环境变量配置.而IDE这方面我们选择myeclipse 2016 CI(这个编译器自带tomc

Java EE学习之旅1——HeadFirstJavaEE

因为找到的实习是用Java开发的公司,所以来学习一下Java EE的知识. 首先找来了书<轻量级Java EE企业应用实战>. 啊不得不说学了Java之后直接看这个还是完全不行呢,好多名词看都没有看过啊哈哈. 首先来看看都些啥看不懂的词... 1.JSP.Servlet和JavaBean JSP和Servlet都是用在表现层的东西,而实质上JSP编译成Servlet才运行. 但Servlet开发成本太大,所以用JSP. JavaBean用来通信交换表现层和底层数据. 2.MVC和Struts

Java EE学习路线

java EE学习路线 一.java基础 1.初识Java 内存  数据  变量     2.结构语句        1)条件           if  switch        2)循环           for  while        3)语句           break  continue    3.数组    4.嵌套循环    5.最终任务 万年历      2048小游戏  二.面向对象 1.类和对象 2.方法    3.String()       Date  cal

Java EE学习--Quartz基本用法

新浪博客完全不适合写技术类文章.本来是想找一个技术性的博客发发自己最近学的东西,发现博客园起源于咱江苏,一个非常质朴的网站,行,咱要养成好习惯,以后没事多总结总结经验吧.很多时候都在网上搜索别人的总结,我自己也总结些东西,或许多多少少能帮得上别人. 首先提到的是Quartz,一个开源的定期执行计划任务的框架.其实我内心好奇这个框架很久了,像那些能定时修改数据库数据,定时分配任务的功能一直觉得很神奇.心动不如行动,今天我就小小的学习了一下用法,力求言简意赅,大家都懂的我就不说了. 第一步:下载Qu

【Java EE 学习第16天】【dbcp数据库连接池】【c3p0数据库连接池】

零.回顾之前使用的动态代理的方式实现的数据库连接池: 代码: 1 package day16.utils; 2 3 import java.io.IOException; 4 import java.lang.reflect.InvocationHandler; 5 import java.lang.reflect.Method; 6 import java.lang.reflect.Proxy; 7 import java.sql.Connection; 8 import java.sql.D