基於idea+spring-mvc+mybatis+tomcat搭建web應用

背景

最近工作中需要開發一些web項目開始學習使用Spring、mybatis搭建web項目,因爲這裏面涉及的組件範圍比較多,網上的資料良莠不齊(看多了都是淚),對於新手而言很容易混雜,這片博客根據個人嘗試重新組織整理。

本文除了介紹流程性的搭建步驟,還會提供一些原理思想參考來幫助入門同學理解搭建過程,不僅能知道how,更通過原理能知道why。

環境搭建需要工具

  • jdk 本文使用1.8
  • maven 本文使用3.3.9
  • spring 本文使用4.2.5
  • mybatis 本文使用spring-mybatis 1.3.2
  • mysql 本文使用

搭建步驟

spring是容器管理工具,mybatis是持久化框架,目的是用配置來簡化代碼編寫和簡化數據庫連接、數據獲取及連接中斷的代碼流程,其中有很多配置過程,步驟主要如下:

  1. 安裝相關依賴組件
  2. 使用idea創建項目
  3. 添加pom依賴
  4. 配置spring mvc context文件,編寫一個helloworld作爲測試rest接口
  5. 給項目配置tomcat,調試驗證rest接口可用性
  6. 增加mybatis框架,編寫context文件,添加dao接口
  7. 最終聯合調試

1、安裝依賴

本項目基礎組件主要是Intellij IDEA 、jdk、mysql和maven,需要提前在官網下載安裝,可以參考其他教程,這裏不再詳細說明。

有了maven之後,spring、mybatis和mysql相關軟件依賴jar包使用maven管理下載。

2、使用idea創建項目

在File -> New -> Project 創建新項目,勾選下面幾項,創建webapp模版項目。
在這裏插入圖片描述
選擇好了後點擊next,輸入自己的GroupId、ArtifactId後繼續next,就創建新項目了。

新項目目錄結構如下,可以看到自動生成webapp目錄,用來放web相關資源;然後自己可以手動在main目錄下建立java目錄並設置爲root;在main下創建resource目錄,並設置爲Resource Root(設置方法是對改目錄右鍵點擊,出現Mark Directory As即可以設置)

自動生成的目錄:
在這裏插入圖片描述
手動創建目錄後,開始添加pom依賴

3、添加pom依賴

maven是包管理工具,通過pom文件管理項目需要使用的jar包,在使用idea創建模版已經讓pom.xml文件裏有相關的build配置,但還需要添加spring相關依賴,下面給出spring相關依賴(其中在本項目中沒有用到的依賴也添加進來):

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    <spring.version>4.2.5.RELEASE</spring.version>
  </properties>

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

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

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

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

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

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

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

  <build>
    <finalName>spring-mvc</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
          <configuration>
            <warName>spring-mvc</warName>   // 這裏是控制輸出war包的名稱
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

4、配置web相關文件

作爲web項目,很多配置自然是放在web.xml文件完成。這裏在配置web.xml文件前建議瞭解SpringMVC在tomcat中的執行原理和過程相關原理,已瞭解的可忽略。

Tomcat是一個web server,支持servlet規範(servlet可以理解成一個請求和響應過程),主要負責接收請求、請求轉發、響應封裝成response規範的格式。(這裏可參考手寫tomcat的例子來深入理解tomcat的功能)

當tomcat與spring mvc結合的時候,tomcat接收請求後其實就是轉發給spring來處理,在實現上就是給org.springframework.web.servlet.DispatcherServlet,然後找到對應映射關係的servlet處理請求並返回。

參數解釋

web.xml配置文件中需要注意的是context-param定義了spring配置文件路徑,可以加載spring ioc管理的對象;servlet配置定義了DispatcherServlet類,value是spring配置文件路徑,其實就是實現把web接收到的請求通過dispatcherservlet轉發給spring對於的handler處理;servlet-mapping的url-pattern是/*,表示對所有請求,都走DispatcherServlet這個servlet。

web.xml文件表達了請求進來(由url-pattern定義)、請求處理(由app這個servlet處理)和請求轉發處理(由app這個servlet的applicationContext.xml文件定義的spring框架處理)過程。

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

  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>

  <servlet>
    <servlet-name>app</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext.xml</param-value>   // 配置spring mvc的配置文件路徑
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>app</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>

配置spring配置文件和一個接口

創建spring的配置文件applicationContext.xml和一個控制類結構如下:
在這裏插入圖片描述

  • applicationContext.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:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">


    <mvc:annotation-driven/>
    <context:component-scan base-package="service,controller"/>
</beans>

mvc:annotation-driven/ 標籤表示啓用註釋
<context:component-scan 表示包掃描路徑,主要是使用spring註釋的文件路徑

  • HelloWorld.java
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @date 2019-03-31
 */
@Controller
public class HelloWorld {

    @RequestMapping(path="/hello", method= RequestMethod.GET)
    public @ResponseBody String helloWorld() {
        return "hello world!";
    }
}

配置tomcat

這個時候web項目已經快大功告成,就差部署測試。這裏使用Tomcat作爲web server,作用是加載web.xml文件,並通過其中的配置啓動項目,只有配置都正確才能啓動成功項目。

點擊右上角的edit configuration
在這裏插入圖片描述
點+號,創建local的tomcat項目
在這裏插入圖片描述
填寫名字後在deployment的地方配置發佈的war包
在這裏插入圖片描述
點擊右下角的fix按鈕,可以出現兩種選項,區別可以參考此文
在這裏插入圖片描述

  • war是發佈包,最終打包部署到所使用的Tomcat的webapps目錄下(通常如果選擇的tomcat是local,那麼就是tomcat安裝路徑下的webapps目錄)。用於發佈上線包階段。
  • war exploded是最終打包部署到項目target的位置,直接把文件夾、jsp頁面 、classes等等移到Tomcat 部署文件夾裏面,進行加載部署。因此這種方式支持熱部署,常用於開發測試階段。

使用熱部署的話,在選擇deployment方式之後,還需要對Tomcat進行相應的設置,這樣的話修改的jsp界面什麼的東西纔可以及時的顯示出來。
在這裏插入圖片描述
選擇好後,注意Application Context的地方,idea會給你默認填寫一個值,這個值就是web項目context,也就是該項目http路徑的root路徑,可以按需求自己修改。
在這裏插入圖片描述配置好了後,可以點擊運行右上角運行:
在這裏插入圖片描述
運行好項目後,會自動彈出瀏覽器,這個時候輸入localhost:8080/springmvc_war/hello就出現如下結果,說明配置成功。(注意springmvc_war是上一步配置的Application context,hello是http接口地址)
在這裏插入圖片描述

好啦,暫時到這裏,後面有空再續更。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章