背景
最近工作中需要開發一些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是持久化框架,目的是用配置來簡化代碼編寫和簡化數據庫連接、數據獲取及連接中斷的代碼流程,其中有很多配置過程,步驟主要如下:
- 安裝相關依賴組件
- 使用idea創建項目
- 添加pom依賴
- 配置spring mvc context文件,編寫一個helloworld作爲測試rest接口
- 給項目配置tomcat,調試驗證rest接口可用性
- 增加mybatis框架,編寫context文件,添加dao接口
- 最終聯合調試
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接口地址)
好啦,暫時到這裏,後面有空再續更。