概述
詳細
注:由於項目直接下載后,只要符合部署環境,保證可運行,並且已經上線部署運行測試(無需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大師發表,拒絕轉載,轉載需要作者授權
