最近正在写一个项目,此项目是用Spring、SpringMVC 搭建。但是,由于各种原因,需要重写,才发现对 Spring 并没有想象中的那么熟悉,于是通过博客记录一下初始化 Spring 项目的过程。

说明

项目名称: HelloWorld
JDK version: 1.8.131
IDE: Spring Tool Suite 3.8.4.RELEASE[以下简称 STS]
Maven: 3.3.9

一、 Maven 项目的搭建

  1. 首先打开 STS,新建一个工作空间,修改工作空间字符集为 UTF-8,修改 jsp 文件的编码为 UTF-8,并且设置 Maven 的安装位置及配置文件所在的位置。这里建议将 Maven 中央仓库的位置设置为阿里云,速度能够得到保障。
<mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

不知如何设置的请自行 Google or Baidu。

  1. 待一切设置好后可以开始创建 Maven 工程了。

新建Maven工程1

  1. 记住一定勾选 Create a simple project(skip archetype selection),尽量不要使用任何模板,不然会造成很多不必要的麻烦。

新建Maven工程2

  1. 填写相关内容并 Finish。

新建Maven工程3

由于我们选择的 package 为 war,初始化项目的时候肯定会报错,因为没有 web.xml 文件,稍后我们将解决这个问题。在此之前先解决一下 Java 和 Dynamic Web Module 版本

  1. 右击 hello-world 项目->属性(properties),或者 Alt+Enter 也能打开该界面,接着点击 Project Facets。

项目的属性界面

选择相应的版本进行设置。
如果 jdk 版本过低,请选择稍低一点的 web module 版本。

  1. 在 webapp 文件夹下新建文件夹 WEB-INF。

新建WEB-INF文件夹

  1. 在 WEB-INF 目录中创建 web.xml 文件,确保版本为当初设置的 Web Module 版本。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">

  <display-name>hello-world</display-name>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

至此,项目没有任何的错误信息,Maven 项目的搭建基本完成。

二、 Spring 的集成

由于需要连接数据库,所以这里采用**Mybatis以及druid**数据库连接池,同时也需要 slf4j 作为日志的操作。

  1. 依赖的配置,相关的配置可以查看**github 源码**
<properties>
    <java.version>1.8</java.version>
    <junit.version>4.12</junit.version>
    <spring.version>4.3.7.RELEASE</spring.version>

    ...

    </properties>
    <dependencies>

    ...

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

</dependencies>
  1. 配置资源拷贝插件、Maven 编译插件和 Tomcat 插件

我习惯用 Tomcat 插件作为项目的运行服务器,但这会带来一个问题就是,调试是一个很艰难的过程。所以请慎重! 当然配置文件不是一层不变的,你可以根据自己的喜好自行配置。

<build>
    <finalName>${project.artifactId}</finalName>
    <plugins>
        <!-- 资源文件拷贝插件 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.7</version>
            <configuration>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <!-- java编译插件 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.2</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <!-- 配置Tomcat插件 -->
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.2</version>
            <configuration>
                <port>80</port>
                <path>/</path>
            </configuration>
        </plugin>
    </plugins>
</build>
  1. 配置 Spring 相关的配置

在 src/main/resources 创建 mybatis、resource、spring 三个文件夹。

  1. 新建包名

cn.edu.xxx.dao cn.edu.xxx.service
cn.edu.xxx.controller
cn.edu.xxx.util

  1. 配置 Mybatis

在 mybatis 文件夹里新建 SqlMapConfig.xml 文件。

  <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
  <configuration>
      <!-- 这里可以不需要配置任何配置 -->
      <settings>
      <setting name="cacheEnabled" value="true" />
      </settings>
  </configuration>

在 resource 文件夹里新建 db.properties 文件。这是有关数据库的配置,部分配置是需要读者自己填写。

# Database Configuration
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc.mysql://your ip:your port/you db name?useSSserverTimezone=UTC
jdbc.user=your db user name
jdbc.password=your db password
  • 配置 Spring-DAO

在 spring 文件夹中新建 applicationContext-dao.xml

由于配置文件过长,请移步至**github 源码**查看相应的配置。

  • 配置 Spring-Transaction

在 spring 文件夹中新建 applicationContext-trans.xml 点击查看

  • 配置 Spring-Service

在 spring 文件夹中新建 applicationContext-service.xml 点击查看

  • 配置 Spring-MVC

在 spring 文件夹中新建 springmvc.xml 点击查看

  • 配置 web.xml

加载 Spring 容器

<!-- 加载Spring容器  -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/applicationContext-*.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.conContextLoaderListener</listener-class>
</listener>

配置 SpringMVC

<!-- SrpingMVC的前端控制器 -->
<servlet>
    <servlet-name>hello-world</servlet-name>
    <servlet-class>org.springframework.web.sDispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>hello-world</servlet-name>
    <!-- 这里会拦截所有的资源,包括静态资源,所以需要在springmvresource -->
    <url-pattern>/</url-pattern>
</servlet-mapping>

解决 Post 乱码

<!-- 解决Post乱码 -->
<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>
</filter>

<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

至此,几乎所有的配置都已经完毕。接下来可以新建 jsp 文件进行测试。

由于在 spring MVC 配置中添加了资源映射,故 jsp 文件的位置必须放入指定的位置。

在 WEB-INF 中新建 jsp 文件夹,并在此文件夹中新建 index.jsp 文件。

在 cn.edu.xxx.controller 包中新建 PageController。

    package cn.edu.xxx.controller;

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

    @Controller
    public class PageController {

        @RequestMapping("/")
        public String showIndex(){
            return "index";
        }
    }

该项目可能存在报错的情况,那是因为 pom 文件的配置还未得到更新,只需要右击项目> Maven> Update Project,或者点击项目,然后按 Alt+F5 即可。

Maven更新

由于该 Maven 中配置有 tomcat-plugin,故可以使用它来运行我们的项目。

右击项目> Run As> Maven build

Maven build1

设置命令

Maven build2

点击 Run,项目开始启动,等待启动完毕

Server start

打开浏览器,输入 localhost 或者 127.0.0.1。

由于此前插件的端口设置的 80 端口,故不需要设置端口,且由于该插件的存在,不需要输入项目名称。

Brower show