在Intellij Idea中使用Maven创建SpringMVC项目



最最最傻瓜式的创建Spring MVC新项目,我就是个小白……写的会很细,借鉴类很多但是还有好多没懂,欢迎指正~

一、新建项目


1、点击Create New Project




2、选择maven,勾选create from archetype,选择webapp项目,next;


  • <groupId> - The group or organization that the dependency belongs to.

  • <artifactId> - The library that is required.

  • <version> - The specific version of the library that is required.

3、然后就是两个next直到finish,此时会进入idea的正式界面,稍等一会直到全部东西都加载完毕,可能会很长的时间;


全部加载完毕以后,点击右上角向下小箭头的的Edit Configurations,出现下面的界面




4、点击左上角的+号,下拉,选择Tomcat-local

//这里有个问题,为什么选择local呢,上网查了下没有找到很好的答案,以后再补充

点击第二个+号,选择Artifact,选择 war 或者 war exploded 都可以,我选择了war exploded 


tips:

exploded war VS war二者的区别:

war,称为packaged模式,将工程以打包的形式部署到应用服务器中

exploded war,称为exploded模式,将工程以文件夹包含需要的内容的方式(含有打包war解压后的内容)部署到应用服务器中

exploded war的特点:部署更快且支持热部署(可以修改代码实时反应),eclipse中的tomcat插件基本都支持这种技术


此时点击右上角的运行按钮,应该会自动启动浏览器并看到hello,world


二、配置几个重要的XML文件

 几个重要的xml文件分别是

pom.xmlweb.xmldispatcher-servlet.xml

导入Spring依赖

<servlet>:SpringMVC核心配置文件名字和位置
<servlet-mapping>:注册的组件的访问路径
<listener>:会在整个Web应用程序启动的时候运行一次,并初始化传统意义上的Spring的容器
<context-param>:修改listener默认位置
一、头部声明,Schema-based XML的声明
二、组件定义,指定组件的实现模式
1. 基于Schema-based XML的配置定义模式
2. 基于Traditional XML的配置定义模式


定义组件:用具体的实现类来指定接口的行为方式,然后在初始化WebApplicationContext时初始化这些组件

后两者XML文件的默认位置都是src/webapp/WEB-INF/

1、pom.xml



这是默认情况下pom.xml的配置:

<modelVersion>. POM 模型版本号 (通常为 4.0.0).//这是啥……我也不知道
<groupId>. 组织或者公司名,通常是反向域名
<artifactId>. Name to be given to the project’s library artifact (for example, the name of its JAR or WAR file).
<version>. 当前版本号
<packaging>- 项目的包装方式,默认为jar或者war//不是很懂,等以后解决


我这里已经默认有了一个junit,版本号是3.8.1,这里可以手动改为4.0,然后idea会自动帮你加载

依赖的构成:

<dependencies>
  <dependency>//一个依赖
    <groupId>junit</groupId>//这个依赖所属于的组织或公司
    <artifactId>junit</artifactId>//我们需要的依赖的程序库
    <version>4.0</version>//版本号
    <scope>test</scope>//作用域
  </dependency>//一个依赖的结尾
</dependencies>

Spring版本控制和BOM:

当使用Maven时,可能会意外混合不同版本的Spring JAR。 例如,您可能会发现第三方库或另一个Spring项目会将旧的版本的依赖关系传递给旧版本。 如果您忘记自己明确声明直接依赖,可能会出现各种意外问题。为了克服这些问题,Maven支持 “bill of materials ”(BOM)依赖的概念。 您可以在dependencyManagement部分中导入spring-framework-bom,以确保所有Spring依赖(直接和传递的)都是相同的版本。

具体可以看Spring的官方文档或者看一下这篇文章: maven中DependencyManagement和Dependencies

用BOM的时候出了个很大的问题,使用BOM的格式如下

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>4.3.11.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <!-- spring framework start -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
    </dependency>
          ……
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
    </dependency>
    <!-- spring framework end -->

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.6.2</version>  
    </dependency>
</dependencies>



可是Spring死命都加载不进来,网上搜索了半天也没发现和我一样问题的;

后来纠结了好几个小时,把pom.xml文件传给了我家大爷,他那边就可以加载??喵喵喵?

至少知道了不是代码的问题,后来又刷新重载了好几次都不行,最后他告诉我

问题在于:网络

maven默认的中央仓库在海外,我在BOM里配置了bom里的4.3.11版本;

电脑里面是之前的版本,就要去海外的服务器下载连接不上的话就识别不了这个依赖了;

解决方法:https://skyao.gitbooks.io/learning-maven/content/installation/mirror.html

这里还有一个问题要注意,maven的setting的文件可能不是此文所说setting.xml,要去idea的Perferences中查看你的maven的setting文件的位置

最终的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.sandao</groupId>
    <artifactId>newjavaweb</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>newjavaweb Maven Webapp</name>
    <url>http://maven.apache.org</url>


    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-framework-bom</artifactId>
                <version>4.3.11.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <!-- spring framework start -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
        </dependency>
        <!-- spring framework end -->

        <!-- servlet start -->
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>javax.servlet.jsp.jstl-api</artifactId>
            <version>1.2.1</version>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>
        <!-- servlet end -->
        <!-- json start -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.6.2</version>
        </dependency>
        <!-- json end -->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.9.10</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>newjavaweb</finalName>
    </build>
</project>

里面有些别的配置我也看不懂……以后再说



2、web.xml

在配置前,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>


配置后:

<!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 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         metadata-complete="true" version="3.0">//这里的我还没仔细看!!!!
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>spring-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:web/applicationContext-dispatcherServlet.xml</param-value>
    </init-param>//这部分可选,用于修改核心配置文件的默认位置
  </servlet>
  <servlet-mapping>
    <servlet-name>spring-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:context/applicationContext-*.xml</param-value>
  </context-param>//这部分也可选,用于修改listener配置文件的默认位置
</web-app>


这里很有意思:

servlet的配置文件位置修改是包在<servlet>里面的

listener的配置文件位置修改是不包在<listener>里面的

DispatcherServlet和ContextLoaderListener会分别构建不同作用范围的容器(WebApplicationContext)。

ContextLoaderListener所初始化的容器,我们称之为Root WebApplicationContext;

DispatcherServlet所初始化的容器,是SpringMVC WebApplicationContext。 

spring-dispatcher-servlet.xml


3、spring-dispatcher-servlet.xml.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

配置后:

<?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:mvc="http://www.springframework.org/schema/mvc"
       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 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <mvc:annotation-driven />//启用注解配置
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>//用于解析 View ,指定了 View 页面的位置及类型(后缀)。
    <mvc:resources mapping="/static/**" location="/static/" cache-period="31556926"/>//将静态文件添加为例外。
    <context:component-scan base-package="com.sys.springandspringmvc.controller"/>//配置 Spring 以扫描 controller 目录进行依赖注入。

</beans>




三、编写Controller和目录点击打开链接

目录结构参见:http://blog.csdn.net/lengyue_wy/article/details/6718637

ps:新建开始的时候是Directory,然后右键 java 文件,在 Mark Directory As 中选择第一个 Source Root 。此时会看见文件夹变天蓝色;

新建一个class作为controller

package com.sys.springandspringmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class IndexController {
    @RequestMapping("/")
    public String index() {
        return "index";
    }
}

这里又有个问题:Spring好像没什么规定controller的类该放在哪个文件夹的规定;以后再说

总之,到这里一个最简单的Spring MVC项目就建好了


参考资料:

Building Java Projects with Maven:https://spring.io/guides/gs/maven/#scratch

Maven 引入 Spring 依赖的最佳方法:http://charmingoh.com/

SpringMVC深度探险(三) —— DispatcherServlet与初始化主线:http://downpour.iteye.com/blog/1341459

在Intellij Idea中使用Maven创建Spring&SpringMVC项目:https://eason-yang.com/2016/08/03/use-maven-to-create-a-spring-springmvc-project-in-intellijidea/

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值