首先我們和別的博客風格不同,我們不會直接以上來就講原理或者直接一上來就扔代碼,筆者認爲,這樣做可能會較大的打擊新人的學習信心,使其陷入一種尷尬的只能CV操作的境地,這樣做也有可能,一頓神操作,一看戰績0比5。所以筆者認爲,我們應當換位思考,先把自己當成一個啥都不知道的傻子,去理解,去學習這個框架。那麼,作爲一個簡單的登錄項目來講,我們需要有什麼呢?
前臺作爲我們(用戶)直接看見的網頁端或者其他,應該有一個比較良好的網頁頁面來顯示我們所需要的登錄功能,比如一個登錄表單。
後臺就需要處理我們登錄的業務邏輯,我們通過前臺傳來的數據來處理登錄這一塊的業務邏輯。
這樣纔算一個完整的比較簡單的登錄項目。
本章我們會繼續繼續使用上一章所創建的項目來繼續不斷的修改,完善,運行。
本系列博文的風格是W(what)H(how to do)W(why),是什麼->怎麼做->爲什麼
本文章更新於2020年4月6日,主要更改了maven項目中所採用的版本以及其他部分內容。
目錄
2.2.1 首先是spring框架以及springmvc框架所需要的包
1. 前臺部分的功能實現
首先我們先不管後臺也就是SSM框架的搭建和實現,我們先考慮如何創建我們所經常看見的登錄頁面。
1. 1 創建登錄頁面
沿用我們之前的創建的SSMTest項目,我們發現其中index.jsp可以直接拿來使用。於是我們可以通過編輯index.jsp創建登錄頁面。
<form action="/index.jsp">
<label>用戶名:</label> <input type="text" name="username"><br>
<label>密碼:</label> <input type="password" name="password"><br>
<input type="submit" value="登錄">
<input type="reset" value="重置">
</form>
在body標籤中鍵入以上代碼,然後運行,我們可以發現,之前的頁面顯示出來包含有用戶名和密碼文本框的表單內容。
1.2 頁面顯示亂碼
但是我們發現,顯示出的中文內容是亂碼,那麼我們怎麼辦呢?可以在html之後,body之前加入以下設置編碼格式代碼
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page pageEncoding="UTF-8" %>
這樣我們就可以把頁面設置成utf-8編碼格式,這時候,我們再運行,發現我們的表單內容已經可以正常顯示了。到這兒,我們前臺的頁面內容工作就基本做完了。
1.3 效果如圖所示
2. 後臺部分的功能實現
我們再來思考一下,我們後臺究竟需要什麼東東,應該怎麼處理業務邏輯,需要寫什麼代碼?配置文件如何寫?
我們可以思考一下,我們通常做的web項目中,這個整體流程大概應該是什麼樣的?
index.jsp->login->loginaction->loginservice->logindao
作爲一個登陸的功能來講,大概的流程就是這樣的。當我們在前臺頁面輸入對應的用戶名和密碼字符串時,點擊登錄按鈕,後臺接受到了相關請求,並把這個請求轉發給對應的登錄控制器,控制器完成對應的業務邏輯,然後返回處理結果到前臺,前臺完成進一步的結果渲染,顯示出信息。以上便是我們通常web項目中的運行流程和原理。
我們需要考慮到需要有什麼層次結構,需要有什麼配置文件。
2.1 項目包名需要有一定的層次結構
示例如下
作爲一個標準的MVC架構項目來講,我們需要將包進行分層,每層都有自己的功能
以上的圖片顯示在項目工程文件代碼中,有controller,dao,entity,exception,service,utils等包
controller包下:主要存放我們編寫的controller層的代碼,一般作爲控制層的實現
dao包下: 主要存放我們編寫的dao層的代碼,一般作爲數據庫操作層的實現(現在都更改成mapper層,主要存放mapper相關的文件了)
entity包下:主要存放我們的pojo類或者其他對應到數據庫中的記錄字段的實體類
exception包下:主要存放我們編寫的異常處理包括全局異常或者局部異常處理的代碼
service包下:主要存放我們service層實現的代碼,通常service層是調用的dao層的實現
utils包下:主要存放我們一些常用的工具類比如MD5Utils這些的工具類
子類包下的impl包:用於存放我們有關於service或者mapper層的實現代碼
Q1: 爲什麼需要把包分層?
A1 : 因爲層次化設計,使得不同的模塊解耦了,使得項目各種模塊可以功能各司其職,顯得清楚明瞭而不會紊亂
PS1: 根據代碼規範,包名一律小寫
2.2 maven引入所需要的lib文件
在pom.xml文件中寫我們需要的jar包,讓maven自動下載jar包並且導入到項目中
2.2.1 首先是spring框架以及springmvc框架所需要的包
spring-core sping框架核心包
spring-web spring框架支持web的模塊包
spring-webmvc spring框架支持webmvc模塊包
spring-tx spring框架支持transaction模塊包
spring-oxm spring框架支持obejct-xml 轉換的模塊包
spring-jdbc spring框架支持jdbc的模塊包
spring-aop spring框架支持aop(切面編程)的模塊包
spring-test spring框架支持test(測試)的模塊包
spring-context spring框架支持上下文context的模塊包
spring-context-support spring框架上下文context內容支持的模塊包
<!-- 首先需要properties節點下添加一個spring版本的節點,這樣做的好處是,可以只需要更改這麼一個地方,而不需要更改全局 -->
<properties>
<spring.version>5.1.5.RELEASE</spring.version>
</properties>
<!-- dependencies引入spring框架需要的內容 -->
<dependencies>
<!-- spring 框架 begin -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</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>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</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-test</artifactId>
<version>${spring.version}</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-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring 框架 end -->
</dependencies>
2.2.2 其次是mybatis框架所需要的包
mybatis所需要的包有以下:
mybatis mybatis框架的核心包
mybatis-spring mybatis和spring框架結合的模塊包
同樣的,先在properties節點下設置關於mybatis的版本
<mybatis.verison>3.4.6</mybatis.verison>
<mybatis-spring.version>2.0.3</mybatis-spring.version>
再在dependency節點引入mybatis包
<!-- mybatis 框架 begin -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.verison}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
<!-- mybatis 框架 end-->
2.2.3 用於日誌記錄的log4j以及slf4j框架的包
log4j-api log4j-api核心包
log4j-core log4j核心包
logj-web log4j-web包
slf4j-api slf4j-api核心包
同樣的,先在properties節點下設置關於log4j和slf4j版本
<log4j.version>2.11.2</log4j.version>
<slf4j.version>1.7.30</slf4j.version>
再在dependency節點引入log4j和slf4j包
<!-- log 日誌記錄框架 begin-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log 日誌記錄框架 end -->
PS2: 坑1:由於spring5採用了新的log4j框架,之前的採用的log4j已經被廢除了,所以需要重新配置log4j,詳細的配置文件請參考下面的log4j的有關配置
PS3: 坑2: 我以爲只需要配置log4j框架就可以了,但運行時發現報錯,大概原因是因爲採用了druid數據源,而druid數據源使用了slf4j來記錄日誌,由於我沒有加入slf4j,就報缺包找不到類的異常,因此也需要把slf4j的jar包引入
2.2.4 Junit測試框架包
junit Junit測試框架的核心包
<!-- junit begin -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- junit end -->
2.2.5 mysql 連接以及數據源druid包
mysql-connector-java java連接mysql驅動包
druid 阿里巴巴開發的用於管理數據源的包
同樣的,先在properties節點下設置關於msyql和druid版本
<mysql.version>5.1.47</mysql.version>
<druid.version>1.1.10</druid.version>
再在dependency節點引入msyql和druid包
<!-- mysql connector java begin -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- mysql connector java end -->
<!--druid begin -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!--druid end -->
2.3 註解+xml配置好SSM框架
此部分內容由於篇幅限制,故轉移到下一篇文章