概述
詳細
注:由於項目直接下載后,只要符合部署環境,保證可運行,並且已經上線部署運行測試(無需maven等版本控制)。此外,由於項目代碼數量巨大,此處已對文件結構及詳細進行說明,故只貼登錄控制層(LoginController)為例。下載后有任何問題均可與我聯系(郵箱:yws_ssh@163.com),或者直接點擊http://yws233.cn:8080/kuaib/(項目部署網址進行體驗)查看系統功能詳細說明。
此外,由於該項目耗費作者半年左右時間、心血,是純粹的原創,版權完全歸作者所有,僅供個人學習交流使用,如要用於其他商業、分享、建議等行為,請務必與作者聯系。
一、代碼實現過程
1.項目技術說明
前端:HTML5 + CSS3 + JS + jQuery + ajax + fastjson + xhEditer + pdf.js
后端:SpringMVC + Spring + Mybatis + POIXMLDocument + SimHash
數據庫:MySQL + Redis(緩存后期)
服務器:Tomcat9.02 + aliyun + jdk1.8
文件處理:POI + PDFBOX + JDOM + itextpdf
開發環境:ubuntu16.04 + IDEA17.2
2.配置文件部分
-
MySQL數據庫配置 -----> database.properties
-
LOG4J配置文件-----------> log4j.properties
-
Mybatis----------------------> mybatis-config.xml
-
SpringMVC配置文件-----> springmvc-servlet.xml
-
Spring配置文件------------> applicationContext-mybatis.xml
3.核心控制層
BaseController(基礎過濾層)
LoginController(登錄控制層)
UserController(主頁控制層)
下貼登錄層代碼為例:
/* * 登錄控制層 * */ package cn.kuaib.controller; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import com.mysql.jdbc.StringUtils; import org.apache.log4j.Logger; 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.RequestParam; import cn.kuaib.pojo.User; import cn.kuaib.service.UserService; import cn.kuaib.tools.Constants; import org.springframework.web.bind.annotation.ResponseBody; import java.text.SimpleDateFormat; import java.util.Date; @Controller public class LoginController { private Logger logger = Logger.getLogger(LoginController.class); @Resource private UserService userService; @RequestMapping(value="/login.html") public String login(){ logger.debug("LoginController welcome Kuaib=================="); // 隨機顯示登錄頁文字 return "login"; } @RequestMapping(value="/dologin.html",method=RequestMethod.POST) public String doLogin(@RequestParam String userCode,@RequestParam String userPassword,HttpServletRequest request,HttpSession session) throws Exception{ logger.debug("doLogin===================================="); //調用service方法,進行用戶匹配 User user = userService.login(userCode,userPassword); String loginPic = request.getParameter("picconfirm"); //獲取驗證值 Boolean confirm = loginPic.equals("驗證成功!"); logger.info("######piccccccccccccccccccc:" + loginPic); logger.info("######piccccccccccccccccccc:" + confirm); if (null != user){ if(user.getUserCode() != "" && user.getUserCode() != null && user.getUserPassword() != null && user.getUserPassword() != "" && loginPic.equals("驗證成功!")){//登錄成功 //放入session session.setAttribute(Constants.USER_SESSION, user); //放入密碼,文件上傳使用 session.setAttribute(Constants.USER_PASS,user); return "redirect:/sys/main.html"; //進入攔截器進行驗證 } }else{ //頁面跳轉(login.jsp)帶出提示信息--轉發 request.setAttribute("error", "*用戶名或密碼不正確"); return "login"; } return "login"; } /* * 用戶注冊 * */ @RequestMapping(value = "adduser.html", method = RequestMethod.POST) public String addUser(User user, HttpSession session){ try { if (userService.addReg(user) == true){ session.setAttribute("regtrue", "注冊成功!"); //放置注冊成功提示 return "redirect:/login.html"; } } catch (Exception e) { e.printStackTrace(); } return "register"; } /* * 異步判斷注冊用戶是否重名 * */ @RequestMapping(value = "/userCodeExist.html") @ResponseBody //異步處理結果直接寫入HTTP ResponseBody中 public Object userCodeIsExist(@RequestParam String userCode){ logger.info("///////////*****************////////////進入異步判斷"); /*HashMap<String, String> resultMap = new HashMap<String, String>();*/ String cjson = null; logger.debug("userCodeIsExit userCode===================== "+userCode); if (StringUtils.isNullOrEmpty(userCode)){ /*resultMap.put("userCode", "exist");*/ //如果用戶已經存在 logger.info("//////************************進入null:"); return "nullcode"; }else { try { User user = userService.registerUser(userCode); if (null != user){ cjson = "exist"; //用戶不為空則已存在 }else { // 注冊用戶長度不能長於10 int len = userCode.length(); if (len >= 10){ cjson = "toolen"; //用戶輸入的長度超過10則提示 }else { cjson = "noexist"; //用戶為空,則可以注冊 } } } catch (Exception e) { e.printStackTrace(); } } /*logger.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>" + JSONArray.toJSONString(resultMap)); return JSONArray.toJSONString(resultMap);*/ logger.info("//////************************cjson:" + cjson); return cjson; } /* * 異步判斷用戶郵箱是否存在 * */ @RequestMapping(value = "/userpwdexist.html") @ResponseBody public String userPasswordExist(@RequestParam String email){ logger.info("進入郵箱異步判斷>>>>>>>>>>>>>>>>>>>>>>>>>>>"); String ejson = null; if (StringUtils.isNullOrEmpty(email)){ return "nullpwd"; }else { User user = userService.backPassword(email); if (null != user){ ejson = "existpwd"; }else { ejson = "noexistpwd"; } } logger.info("//////************************cjson:" + ejson); return ejson; } /* * 跳轉至找回密碼頁面 * */ @RequestMapping(value = "back.html") public String back(){ return "forget"; } /* * 找回密碼 * */ @RequestMapping(value = "backpassword.html",method = RequestMethod.POST) public String backPass(@RequestParam String email, HttpSession session){ User user = userService.backPassword(email); if (user != null){ session.setAttribute(Constants.PASSWORD,user.getUserPassword()); return "backpwd"; } session.setAttribute(Constants.SYS_MESSAGE,"*您的郵箱不存在,請先注冊"); return "forget"; } /* * 跳轉到登錄頁面 * */ @RequestMapping(value = "backlogin.html") public String backLogin(){ return "login"; } @RequestMapping(value = "register.html") public String skipRegister(){ return "register"; } @RequestMapping(value="/sys/main.html") public String main(HttpSession session){ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//設置日期格式 session.setAttribute(Constants.DATA_NOW,df.format(new Date())); return "main"; } }
Dao層,Service層等
4.前端部分
其中pdf和xhEditer為插件,可在官網了解。
jsp及lib包
二、代碼實現過程
1.整體項目下載后,解壓后導入IDEA:
2.數據庫及SSM配置文件(修改你自己的用戶名密碼)
3.核心控制層
4.前端web層
三、演示效果
1.登錄頁
2.主頁(各區域文件上傳顯示圖)
3.交換系統
4.注冊頁
5.密碼找回
注:本文著作權歸作者,由demo大師發表,拒絕轉載,轉載需要作者授權