SSM框架搭建流程
spring+springMVC+MyBatis
准备工具:
idea企业版本+Maven(阿里镜像+环境变量)+Tomcat(本机环境变量)
1. idea创建项目
2.检查IDEA-Maven配置
3. 删除生成的Servlet案例类,改写index.jsp
index.jsp 清空body内容
4. 引入依赖Spring+SpringMVC+MyBatis+MySQL+JSON
pom.xml添加依赖
properties配置内容
<properties>
<spring-version>5.2.3.RELEASE</spring-version>
<aspectj-version>1.8.9</aspectj-version>
<junit-version>4.11</junit-version>
</properties>
1.Spring的依赖
<!-- Spring依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-version}</version>
</dependency>
2.SpringMVC依赖
<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-test</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring-version}</version>
</dependency>
3. 代理包 aspectj
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version></version>
</dependency>
4. junit测试包
<!--测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
5.servlet-api相关包
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
6.Mysql-j包
<!--mysql驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
7. json以及@Responsebody包(jackson)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.12.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
<!-- Fastjoson JSON处理工具 --><!-- TODO:gai -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.78</version>
</dependency>
8.文件上传和下载
<!-- 文件上传下载-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
9.lombok包
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
10.Mybatis包
<!-- mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- mybatis集成spring包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
11.阿里druid连接池
<!-- 阿里的druid连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
<scope>compile</scope>
</dependency>
12. 数据校验包(校验属性必填、邮箱验证)
<!-- 数据校验 -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.1.0.CR2</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.0.Final</version>
</dependency>
13. 验证码
<!--Easy-Captcha Java图形验证码-->
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>1.6.2</version>
</dependency>
14.日志包
<!--日志-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
15.mybatis分页-pagerHepler
<!-- github分页 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.2.1</version>
</dependency>
16. API文档生成器-Swagger
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
5. 修改一下tomcat配置
6.创建各种配置文件
1.spring配置文件(包含了mvc功能)
spring配置文件默认内容,文件名spring.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!-- 集成SpringMV的配置 -->
</beans>
2.创建mybatis配置文件
文件名:Mybatis.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!-- 集成SpringMVC时Mybatis配置文件也将使用SpringBean的方式来配置 -->
</beans>
3.数据库连接配置文件
名字:database.properties
url= jdbc:mysql://localhost:3306/javatest?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username=root
password=cxk666
driver=com.mysql.cj.jdbc.Driver
7.修改web配置文件-web.xml
设置项目名和加载mybatis配置文件
<!-- 设置项目名称 -->
<display-name>ssm</display-name>
<!-- 配置SpringMVC容器加载时的初始化参数 -->
<context-param>
<!-- 加载mybatis配置文件 -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:mybatis.xml</param-value>
</context-param>
<!-- 能够将ServletContext读取的内容加载到SpringMVC的application对象中 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
添加springMVC-前端控制器配置
<!-- 配置前端控制器 -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 当前端控制器加载时要加载springMVC配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</init-param>
<!-- 让前端控制器Servlet在项目启动加载阶段就进行实例 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
字符编码集过滤器
<!-- 过滤器:字符编码集过滤器(自动将请求和响应的字符编码集按照规则编解码) -->
<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>
<!-- 是否进行强制字符集转换 -->
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
实现RestFul规范的过滤器
<!-- RestFul规范请求:让mvc支持put、delete等等rest规范的请求 -->
<filter>
<filter-name>hiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
8.定义项目的包结构路径
根包节点定义
每个业务子节点定义方法
框架核心包结构
webapp目录更改
9.配置Maven的打包
源代码目录静态文件要参与打包(如:mybatis映射xml文件)、以及static目录加入打包、resources目录加入打包
在pom.xml文件末尾(dependencies标签同级、之后,project标签之中)
<build>
<!-- 静态资源参与打包 -->
<resources>
<!-- resources目录下配置文件参与打包 -->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.js</include>
<include>**/*.css</include>
<include>**/*.html</include>
</includes>
<filtering>false</filtering>
</resource>
<!-- 源代码目录参与打包 -->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.js</include>
<include>**/*.css</include>
<include>**/*.html</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<!-- maven打包工具组件 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version>
</plugin>
</plugins>
</build>
10.编写SpringMVC配置文件
视图解析器
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp" />
</bean>
自动包扫描注解
<!-- 自动实现ioc注入:@Controller @Component @Service -->
<context:component-scan base-package="com.huawei.ssmdemo2023" />
数据校验相关注解、依赖注入
<mvc:annotation-driven />
文件上传下载配置
<!-- 文件上传下载 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="5000000000" />
<property name="defaultEncoding" value="UTF-8" />
</bean>
配置静态资源访问映射
<!-- 静态资源目录配置(注意:之后controller请求路径不要出现static路径) -->
<mvc:resources location="/static/" mapping="/static/**" />
11.编写mybatis配置
1. 改写database.properties文件
url= jdbc:mysql://localhost:3306/javatest?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username=root
password=cxk666
driver=com.mysql.cj.jdbc.Driver
#定义初始连接数
initialSize=2
#定义最大连接数
maxActive=30
#定义最小空闲
minIdle=1
#定义最长等待时间
maxWait=60000
2. 在mybatis配置文件中加载database配置文件项目
<!-- 加载database.proterties配置项目内容 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:database.properties" />
</bean>
3. 在mybatis配置文件下配置阿里druid连接池
<!-- druid连接池配置 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<!-- 数据源连接属性 -->
<property name="driverClassName" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="${initialSize}" />
<property name="minIdle" value="${minIdle}" />
<property name="maxActive" value="${maxActive}" />
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="${maxWait}" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />
<!-- 检测空闲是否开启 -->
<property name="testWhileIdle" value="true" />
<!-- 这里建议配置为TRUE,防止取到的连接不可用 -->
<property name="testOnBorrow" value="true" />
<property name="testOnReturn" value="false" />
<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize" value="50" />
<!-- 这里配置提交方式,默认就是TRUE,可以不用配置 -->
<property name="defaultAutoCommit" value="true" />
<!-- 验证连接有效与否的SQL,不同的数据配置不同 mysql:select 1 ;oracle : select 1 from dual -->
<property name="validationQuery" value="select 1 from dual" />
<property name="filters" value="wall,stat" />
<property name="proxyFilters">
<list>
<ref bean="logFilter" />
<ref bean="stat-filter" />
</list>
</property>
</bean>
<!-- 慢SQL记录 -->
<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
<!-- 慢sql时间设置,即执行时间大于50毫秒的都是慢sql -->
<property name="slowSqlMillis" value="50"/>
<property name="logSlowSql" value="true"/>
</bean>
<!-- 启用慢sql日志记录时,需要引入slf4j日志包 -->
<bean id="logFilter" class="com.alibaba.druid.filter.logging.Slf4jLogFilter">
<property name="dataSourceLogEnabled" value="true" />
<property name="statementExecutableSqlLogEnable" value="true" />
</bean>
4.在web.xml文件中配置druid连接池数据监控中心
<!-- druid连接池数据监控中心 -->
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<!-- 监控中心的进入路径 -->
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
5.Mybatis配置-实例SQLSessionFactory工厂类
<!-- spring和mybatis完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- ref指向数据源配置id -->
<property name="dataSource" ref="dataSource" />
<!-- 自动扫描包中的类生成别名,如:com.a.User包 别名可以是User或user -->
<property name="typeAliasesPackage" value="com.huawei.ssmdemo2023" />
<!-- 自动扫描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:com/huawei/ssmdemo2023/mybatis/dao"></property>
</bean>
6.Mybatis配置-SQLSession类
<!-- SQLsession配置规则 -->
<!-- DAO接口所在的包名,spring会自动查找其下的类,!注意这句 value="sqlSessionFactory",不是ref而是value -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指向mybatis接口文件所在的包 -->
<property name="basePackage" value="com.huawei.ssmdemo2023.mybatis.dao" />
<!-- value指向配置sqlSessionFactory类的id -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
11.MyBatis集成Pagehepler分页工具
1. 引入分页工具依赖
<!-- github分页 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.2.1</version>
</dependency>
2.在mybatis配置文件中配置分页拦截器
<!-- pageHepler分页拦截器 -->
<bean id="pageInterceptor" class="com.github.pagehelper.PageHelper">
<property name="properties">
<props>
<prop key="helperDialect">mysql</prop>
<prop key="reasonable">true</prop>
<prop key="supportMethodsArguments">true</prop>
<prop key="params">count=countSql</prop>
</props>
</property>
</bean>
3.在SQLSessionFactory配置中添加分页工具配置项目
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
... ...
<!-- 配置分页工具 -->
<property name="plugins" ref="pageInterceptor" />
</bean>
12. 开启@Mapper进行配置
mybatis配置文件中编写
<!-- 自动扫描@Mapper注解,将mybatis接口自动实现实例且交由给springMVC管理 -->
<context:component-scan base-package="com.huawei.ssmdemo2023.mybatis.dao">
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Service" />
</context:component-scan>
13.开启日志记录
1.在resources目录下创建一个log4j.properties
######################## ????DEBUG????????consoleh?file?????, console?file?????????
log4j.rootLogger=DEBUG,console,file
log4j.appender.syslog.encoding=UTF-8
########################??????????
log4j.appender.console = org.apache.log4j.ConsoleAppender
#??????
log4j.appender.console.Target = System.out
#?DEBUG????
log4j.appender.console.Threshold = DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
#????
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n
# mybatis日志集成
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
2. 完整业务流程开发案例
1. 案例1-查询一个学生的信息通过学生id
控制器层
/**
* 模块名称: 学生信息管理-控制器
* 模块类型:C-控制器
* 编码人:高靖博
* 创建时间:2023/2/22
* 联系电话:18587388612
*/
@Controller
@RequestMapping("/student")
@Slf4j //提供一个日志log对象注入到当前类
public class StudentController {
// 注入业务层实例
@Resource(name = "studentServiceImpl")
private StudentService studentService;
@RequestMapping(value = "/getStudentByID",method = RequestMethod.GET)
@ResponseBody
public MyResult getStudentByID(String id){
log.debug("学生信息管理:获取学生信息通过学生id [param:id"+id+"]");
MyResult result = new MyResult();
//调用业务层
StudentDO studentDO = studentService.getStudentByID(id);
if(studentDO==null){
result.setCode(500);
result.setMsg("没有查询到任何学生数据!");
}else{
result.setMsg("学生信息查询成功!");
result.setData(studentDO);
}
return result;
}
}
业务接口
public interface StudentService {
StudentDO getStudentByID(String id);
}
业务实现层
@Service
public class StudentServiceImpl implements StudentService {
// mybatis接口使用自动注入的方法实现实例注入!!!!!!!!!!!!
@Autowired
private StudentMapper studentMapper;
public StudentDO getStudentByID(String id) {
StudentDO studentByID = studentMapper.getStudentByID(id);
return studentByID;
}
}
mybatis-dao接口(接口名和xml文件名一致)
@Mapper
public interface StudentMapper {
StudentDO getStudentByID(String id);
}
mybatis-xml映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.huawei.ssmdemo2023.mybatis.dao.student.StudentMapper">
<select id="getStudentByID" resultType="com.huawei.ssmdemo2023.mybatis.domain.student.StudentDO">
select * from student where id = #{id}
</select>
</mapper>
14. PagerHelper使用案例
定义一个接收分页数据的实体
@Data
public class MyPager<T> implements Serializable {
private Integer page;//当前的页码
private Integer size;//每页显示的行数
private List<T> rows;//当前页码的数据
private Long total;//数据总行数
}
在业务实现层,当出现分页调用情况该如何处理
案例-查询学生信息分页
控制器层
@RequestMapping(value = "/getStudentPage",method = RequestMethod.GET)
@ResponseBody
public MyResult getStudentPage(MyPager pager){
//接收前端分页的参数
log.debug("学生信息管理:查询学生信息分页");
MyResult result = new MyResult();
//调用业务层
MyPager<StudentDO> pageData = studentService.getStudentPage(pager);
result.setData(pageData);
result.setMsg("查询成功!");
return result;
}
业务接口
MyPager<StudentDO> getStudentPage(MyPager pager);
业务实现层
public MyPager<StudentDO> getStudentPage(MyPager pager) {
//1.创建分页结果集对象
MyPager<StudentDO> resultPageData = new MyPager<StudentDO>();
//2.调用分页工具设置分页参数(页码,每页显示多少行数据)
Page<StudentDO> stuPage = PageHelper.startPage(pager.getPage(), pager.getSize());
//3.正常调用mapper接口方法!!!!!!!!!!!不要返回值,只需要调用
studentMapper.getStudentPage();
//4.此时,pagehepler已经拦截到sql,且把sql分页执行的结果映射到stuPage对象中
//4.1 取出分页的结果集
List<StudentDO> result = stuPage.getResult();// 当前页码下的分页数据
long total = stuPage.getTotal();//数据查询的所有行数值
resultPageData.setTotal(total);
resultPageData.setRows(result);
resultPageData.setPage(pager.getPage());
resultPageData.setSize(pager.getSize());
return resultPageData;
}
mybatis-dao接口(接口名和xml文件名一致)
List<StudentDO> getStudentPage();
mybatis-xml映射文件
<select id="getStudentPage" resultType="com.huawei.ssmdemo2023.mybatis.domain.student.StudentDO">
select * from student
</select>
案例:
实现用户管理功能:(初级)(单表增、删、改、查-分页查询)
- 添加、修改、删除用户
- 查询用户信息(分页),可以通过用户名、手机号码等字段进行条件查询
用户的功能:能够实现系统登录
用户要能实现集成登录页面功能
登录功能需求:
1.登录需要验证码验证
2.要实现单点登录(同一个用户不能重复登录,如果重复登录需要给出响应提示)(高级)(难点:线程安全设计)
3.登录失效问题:用户登录如果30分钟不操作,30分钟之后再操作任何功能时要退出到登录界面
4.是否登录验证问题:(中级)(难点)
比如:进行任何操作时要验证用户是否登录且登录是否超时未操作,如果存在以上问题,直接返回登录界面且提示登录错误信息