# 软件开发与管理 - spring **Repository Path**: zhanghaoxuan1/web-framework-spring ## Basic Information - **Project Name**: 软件开发与管理 - spring - **Description**: 基于Spring的Web开发 - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 446 - **Created**: 2021-03-22 - **Last Updated**: 2022-06-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 软件开发与管理 - spring #### 介绍 基于Spring的Web开发 #### 5.基于Spring的用户登陆验证 ##### 内容 1. 持久层(UserDao.java,LoginLogDao.java) 2. 业务层(UserService.java) 3. 单元测试(UserServiceTest.java) 4. 控制器层(UserController.java) 5. 展现层(login.jsp,loginSuccess.jsp) 6. 日志slf4j的应用 ##### 介绍 1. 首先导入spring的maven依赖,dbcp的依赖,springmvc的依赖,数据库连接的依赖,jstl的依赖,slf4j的依赖,testng的依赖 2. 接着配置DAO层,dao使用spring框架的JdbcTemplate,连接池使用dbcp连接池,需要注意的是mysql版本需要和jdbc的jar包一致,如果是mysql8以上的版本,需要更改驱动和url,具体看我的配置 3. 接着配置Service层,这层主要是用来做业务逻辑操作的,需要在applicationContext.xml中进行配置,因为这里会引入事务 4. applicationContext的配置依次是,扫描包,配置数据源,配置事务 5. 接着使用testng来进行单元测试,测试完成之后,进行controller层的配置 6. springmvc.xml的配置依次是,扫描包,配置视图解析器 7. log4j.properties的配置,这个是从网上找的一个模板配置 8. 随后在web.xml中进行配置,把log4j,springmvc,applicationContext,这几个文件在web.xml中配置了,这样启动项目的时候,会启动这几个东西 9. 用到了几个注解Autowired,这个是用来自动注入bean的,Repository,这个是用来定义一个dao,Service,用来定义一个service,Controller,用来定义一个 controller,RequestMapping这个用来声明访问路径的 #### 6.实现IOC ##### 内容 1. 实现构造函数注入,新增Director,GeLi,LiuDeHua,MoAttack 2. 实现属性注入 #### 7.装配Bean ##### 内容 1. 使用spring IOC容器作为第三方,来进行具体饰演者的注入,实现构造函数注入 2. 使用spring IOC容器作为第三方,实现属性注入 #### 8.反射 ##### 内容 1. 使用反射模仿spring IOC的属性注入依赖的实现 2. 使用反射模仿spring IOC的构造器注入依赖的实现 ##### 介绍 1. 新增TestReflex类,TestDom4j类 2. 新增Dom4j依赖,使用dom4j进行xml文件的解析 3. 解析xml之后,返回的是一个hashmap类型的对象,保存的是key:id,value:list对象,list中第一个保存的是id的全限类路名,第二个和第三个保存的分别是引用name和引用ref的值,此后依次保存name和ref 4. 进行属性注入的时候,需要判断name和setXXX中的xxx是否一致,这里不区分大小写,一致,可以将ref中的类先进行初始化,然后将初始化的传入到set方法进行执行注入,然后执行逻辑方法 5. 进行构造器注入的时候,需要判断type和构造器中的是否一致,一致,就将ref中的类进行初始化,然后执行构造器方法进行注入,然后执行真正的方法 #### 9.AOP ##### 内容 1. 记录用户登陆和注册的操作 2. 写入数据库 ##### 介绍 1. 新增LogAspectj类 2. 使用aspectj来进行aop操作,在pom文件中把依赖引入aspectjrt,aspectjweaver 3. 使用注解进行aspectj操作,在applicationContext中打开aspectj注解 4. 在注解中定义切入点,增强,切面,就是对那些方法进行增强操作 5. 在注册之后,在日志表中新增这个用户注册时间一行,在登陆之后,新增这个用户登陆时间一行 #### 9.事务 ##### 内容 1. 使用注解配置事务 2. 验证发生异常时的事务回滚 ##### 介绍 1. 在applicationContext中开启事务注解 2. 在service层中的UserService中的@Transactional这里开启事务 3. 在aspcet包中的LogAspectj中的AfterReturning开启事务 4. 在dao包中的insertUser方法中开启事务 5. 在dao包中的insertLogLog方法中开启事务 6. 这样会进行事务的传递,使用的传递方法:propagation = Propagation.REQUIRED #### 13.缓冲技术 ##### 内容 1. 用户连接输入3次错误密码,锁定用户1分钟 ##### 介绍 1. 使用Ehcache缓冲来实现功能 2. 需要在pom中加入缓冲依赖 3. 在applicationcontext中配置缓冲管理器 4. 在resource中定义缓冲配置文件,这里配置了两个缓冲,一个users,用来存储出错的用户名和出错的次数,一个user,用来存储出错次数大于等于3的用户 5. 在用户登陆的时候,判断user中是否有这个用户,有说明需要锁定1分钟,没有,判断是否登录成功,成功,把users中这个用户删除,失败,把users中这个用户的出错次数+1,同时判断次数是否大于等于3,如果是则把这个用户加入到user缓冲中 6. users的有效时间是30分钟,user的有效时间是1分钟 #### 14.任务调度 ##### 内容 1. 每天凌晨两点,统计每个用户的全部登陆次数,包括成功次数和失败次数,写入数据库的统计表中 ##### 介绍 1. 新创建一个统计表,t_login_count表,存的是id,user_id,login_count 2. 采用quartz任务调度来完成任务,采用注解的形式,在spring配置文件中开启注解 3. 任务是LoginCountDao类中的insertLoginCount方法,执行删除统计表,然后插入统计信息 4. 在insertLoginCount添加@Scheduled(cron="0 0 2 ? * *"),表示每天2点执行这个任务