首先我们和别的博客风格不同,我们不会直接以上来就讲原理或者直接一上来就扔代码,笔者认为,这样做可能会较大的打击新人的学习信心,使其陷入一种尴尬的只能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框架
此部分内容由于篇幅限制,故转移到下一篇文章