👉文末查看项目功能视频演示+获取源码+sql脚本+视频导入教程视频
1 、功能描述
基于SSM的垃圾分类管理系统拥有两种角色:用户和管理员。具体功能如下:
1.1 背景描述
基于SSM的垃圾分类管理系统采用Spring、SpringMVC和MyBatis框架,实现了垃圾分类、回收、统计等核心功能。该系统可便捷地添加、查询和分类垃圾信息,提高垃圾分类效率,促进环保事业。界面简洁,操作方便,可广泛应用于小区、学校等场所。通过该系统,用户可轻松掌握垃圾分类知识,养成良好的垃圾分类习惯,共同构建美好的生活环境。
2、项目技术
后端框架:SSM(Spring、SpringMVC、Mybatis)
前端框架:Bootstrap、html、css、JavaScript、JQuery
2.1 SSM
SSM(Spring+SpringMVC+MyBatis)是目前比较主流的Java EE企业级框架,适用于搭建各种大型的企业级应用系统。其中,Spring就像是整个项目中的粘合剂,负责装配bean并管理其生命周期,实现控制反转(IoC)的功能。SpringMVC负责拦截用户请求,通过DispatcherServlet将请求匹配到相应的Controller并执行。而MyBatis则是对JDBC的封装,让数据库底层操作变得透明,通过配置文件关联到各实体类的Mapper文件,实现了SQL语句映射。
2.2 mysql
MySQL是一款Relational Database Management System,直译过来的意思就是关系型数据库管理系统,MySQL有着它独特的特点,这些特点使他成为目前最流行的RDBMS之一,MySQL想比与其他数据库如ORACLE、DB2等,它属于一款体积小、速度快的数据库,重点是它符合本次毕业设计的真实租赁环境,拥有成本低,开发源码这些特点,这也是选择它的主要原因。
3、开发环境
- JAVA版本:JDK1.8,其它版本理论上可以
- IDE类型:IDEA、Eclipse、Myeclipse都可以。推荐IDEA与Eclipse
- tomcat版本:Tomcat 7.x、8.x、9.x、10.x版本均可
- 数据库版本:MySql 5.5-8.0
- maven版本:无限制
- 硬件环境:Windows 或者 Mac OS
4、功能截图+视频演示+文档目录
4.1 登录
4.2用户 模块
- 垃圾分类信息:用户可以根据垃圾分类名字,查询分类信息
- 垃圾运输信息:用户可以查看自己小区对应的垃圾运输信息
- 报修信息:用户可以根据关键词搜索自己报修过的信息,并能够增、删、改
- 留言信息:用户可以根据关键词搜索自己留言过的信息,并能够增、删、改
- 垃圾站信息:用户可以根据垃圾站名搜索垃圾站信息
4.3 管理员模块
- 小区管理:管理员可以根据小区名搜索小区信息,并能增删改查,还能禁止或开启小区账户
- 垃圾运输信息管理:管理员可以增删改垃圾运输信息
- 垃圾分类管理:管理员可以根据垃圾分类名搜索,,并能增删改查
- 垃圾站管理:管理员可以根据垃圾站名搜索,并能增删改查
- 报修管理:管理员可以根据关键字和小区名(即业主)搜索报修信息,并能修改信息的状态(状态分为“待处理”和“已完成”)
- 投诉管理:管理员可以根据关键字和小区名(即业主)搜索投诉信息,并能修改信息的状态
4.4 设计文档目录
5 、核心代码实现
5.1 配置代码
jdbc.url=jdbc:mysql://localhost:3306/database?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
jdbc.username=root
jdbc.password=200212
jdbc.initialSize=5
jdbc.maxActive=30
jdbc.minPoolSize=2
jdbc.maxIdleTime=30000
jdbc.idleConnectionTestPeriod=100
5.2 其它核心代码
package com.learn.controller;
import com.learn.entity.SysUserEntity;
import com.learn.service.SysUserService;
import com.learn.utils.R;
import com.learn.utils.ShiroUtils;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.LockedAccountException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.crypto.hash.Sha256Hash;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
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;
import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.Producer;
/**
*
* 登录相关
*/
@Controller
public class SysLoginController {
@Autowired
private Producer producer;
@Autowired
private SysUserService sysUserService;
@RequestMapping("captcha.jpg")
public void captcha(HttpServletResponse response) throws ServletException, IOException {
response.setHeader("Cache-Control", "no-store, no-cache");
response.setContentType("image/jpeg");
//生成文字验证码
String text = producer.createText();
//生成图片验证码
BufferedImage image = producer.createImage(text);
//保存到shiro session
ShiroUtils.setSessionAttribute(Constants.KAPTCHA_SESSION_KEY, text);
ServletOutputStream out = response.getOutputStream();
ImageIO.write(image, "jpg", out);
}
/**
* 登录
*/
@ResponseBody
@RequestMapping(value = "/sys/login", method = RequestMethod.POST)
public R login(String username, String password, String captcha) throws IOException {
String kaptcha = ShiroUtils.getKaptcha(Constants.KAPTCHA_SESSION_KEY);
System.out.println("==验证码=="+kaptcha);
System.out.println("==password=="+password);
System.out.println("==username=="+username);
if(!captcha.equalsIgnoreCase(kaptcha)){
return R.error("验证码不正确");
}
if(password==null){
return R.error("密码不能为空");
}
try {
Subject subject = ShiroUtils.getSubject();
//sha256加密
password = new Sha256Hash(password).toHex();
System.out.println("==sha256加密==="+password);
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
subject.login(token);
} catch (UnknownAccountException e) {
return R.error(e.getMessage());
} catch (IncorrectCredentialsException e) {
return R.error(e.getMessage());
} catch (LockedAccountException e) {
return R.error(e.getMessage());
} catch (AuthenticationException e) {
return R.error("账户验证失败");
}
return R.ok();
}
/**
*/
@ResponseBody
@RequestMapping(value = "/sys/reg", method = RequestMethod.POST)
public R reg(String username, String password, String captcha) throws IOException {
// String kaptcha = ShiroUtils.getKaptcha(Constants.KAPTCHA_SESSION_KEY);
// if(!captcha.equalsIgnoreCase(kaptcha)){
// return R.error("验证码不正确");
// }
//sha256加密
SysUserEntity user = new SysUserEntity();
user.setUsername(username);
user.setPassword(password);
user.setStatus(1);
List<Long> roles = new ArrayList<>();
roles.add(1L);
user.setRoleIdList(roles);
this.sysUserService.save(user);
return R.ok();
}
/**
* 退出
*/
@RequestMapping(value = "logout", method = RequestMethod.GET)
public String logout() {
ShiroUtils.logout();
return "redirect:login.html";
}
}
6 、功能视频演示
基于SSM的垃圾分类管理系统