詳解Java快速上手用戶后臺管理系統(tǒng)
主要功能
管理員登錄功能、管理員列表操作、用戶列表操作、訂單管理
登錄功能
設(shè)計思路:前端頁面獲取輸入的數(shù)據(jù),然后發(fā)送Ajax請求,在servlet中獲取數(shù)據(jù)并調(diào)用service層中的方法進行處理,service層中調(diào)用dao層的實現(xiàn)方法,最終servlet返回一個結(jié)果集,判斷登錄是否成功。
login.html主要功能代碼:
<script>
$(function () {
$("#btn_login").click(function () {
//獲取數(shù)據(jù)
let username = $("#username").val();
let password = $("#password").val();
//數(shù)據(jù)處理
$.post("admin/login", {username: username, password: password}, function (result) {
if (result.flag) {
location.href = "index.html";
} else {
alert(result.errorMsg);
}
});
});
})
</script>servlet中功能代碼:
//登錄
public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//獲取用戶名和密碼
String username = request.getParameter("username");
String password = request.getParameter("password");
//封裝管理員對象
Administrator admin = new Administrator();
admin.setAname(username);
admin.setPassword(password);
//創(chuàng)建結(jié)果對象
ResultInfo resultInfo = new ResultInfo();
//調(diào)用service查詢
Administrator administrator = service.login(admin);
if (administrator == null) {
resultInfo.setFlag(false);
resultInfo.setErrorMsg("用戶名或密碼錯誤!");
}
if (administrator != null && !administrator.getStatus().equals("Y")) {
resultInfo.setFlag(false);
resultInfo.setErrorMsg("該賬戶未激活!");
}
if (administrator != null && administrator.getStatus().equals("Y")) {
resultInfo.setFlag(true);
//設(shè)置session
request.getSession().setAttribute("username", administrator.getAname());
}
//調(diào)用父類中定義的方法,轉(zhuǎn)json數(shù)據(jù)后回傳
writeValue(resultInfo, response);
}service層中代碼實現(xiàn):
@Override
public Administrator login(Administrator administrator) {
return dao.login(administrator);
}dao層中代碼實現(xiàn):
@Override
public Administrator login(Administrator administrator) {
Administrator admin = null;
try {
String sql = "SELECT * FROM administrator WHERE aname = ? AND PASSWORD = ?";
admin = template.queryForObject(sql, new BeanPropertyRowMapper<>(Administrator.class), administrator.getAname(), administrator.getPassword());
} catch (Exception e) {
}
return admin;
}實現(xiàn)效果:

管理員列表
設(shè)計思路:數(shù)據(jù)操作與登錄功能大同小異,實現(xiàn)了管理員的增刪改查,在此重點介紹分頁、模糊查詢。
admin_list.html主要功能代碼:
<script>
$(function () {
let name = null;
$("#btn_search").click(function () {
name = $('#admin_name').val();
load(null, name)
//取消按鈕的默認跳轉(zhuǎn)行為 導(dǎo)致會刷新頁面
return false;
})
load(null, name);
});
function load(currentPage, admin_name) {
//發(fā)送ajax請求,請求route/pageQuery,傳遞cid
$.get("admin/pageQuery", {currentPage: currentPage, admin_name: admin_name}, function (pb) {
//定義字符
let lis = "";
//計算上一頁的頁碼
let beforeNum = pb.currentPage - 1;
if (beforeNum <= 0) {
beforeNum = 1;
}
let beforePage = '<a class="prev" href="javascript:load(' + beforeNum + ',\'' + admin_name + '\')" rel="external nofollow" ><<</a>';
lis += beforePage;
//定義開始位置begin,結(jié)束位置end
let begin;
let end;
if (pb.totalPage < 10) {
//總頁碼不足10頁
begin = 1;
end = pb.totalPage;
} else {
//總頁碼超過10頁
begin = pb.currentPage - 5;
end = pb.currentPage + 4;
//前邊不足5個,后邊補齊
if (begin < 1) {
begin = 1;
end = begin + 9;
}
if (end > pb.totalPage) {
end = pb.totalPage;
begin = end - 9;
}
}
//展示分頁頁碼
for (let i = begin; i <= end; i++) {
let li;
//判斷當(dāng)前頁碼是否等于i,創(chuàng)建頁碼的li
if (pb.currentPage === i) {
li = '<a class="num" href="javascript:load(' + i + ',\'' + admin_name + '\')" rel="external nofollow" rel="external nofollow" ><span class="current">' + i + '</span></a>';
} else {
li = '<a class="num" href="javascript:load(' + i + ',\'' + admin_name + '\')" rel="external nofollow" rel="external nofollow" >' + i + '</a>';
}
//拼接字符串
lis += li;
}
//計算下一頁的頁碼
let nextNum = pb.currentPage + 1;
if (nextNum >= pb.totalPage) {
nextNum = pb.totalPage;
}
let nextPage = '<a class="next" href="javascript:load(' + nextNum + ',\'' + admin_name + '\')" rel="external nofollow" >>></a>';
lis += nextPage;
//將lis內(nèi)容設(shè)置到ul
$("#pageNum").html(lis);
//列表數(shù)據(jù)展示
let admin_lis = "";
for (let i = 0; i < pb.list.length; i++) {
let admin = pb.list[i];
let li;
if (admin.status === "Y") {
li = '<tr>\n' +
' <td>\n' +
' <input type="checkbox" name="checkedId" id="checkedId" lay-skin="primary">\n' +
' <div class="layui-unselect layui-form-checkbox" lay-skin="primary"><i class="layui-icon layui-icon-ok"></i></div>' +
' </td>\n' +
' <td>' + admin.aid + '</td>\n' +
' <td>' + admin.aname + '</td>\n' +
' <td>' + admin.phone + '</td>\n' +
' <td>' + admin.email + '</td>\n' +
' <td>' + admin.role + '</td>\n' +
' <td>' + admin.date + '</td>\n' +
' <td class="td-status">\n' +
' <span class="layui-btn layui-btn-normal layui-btn-mini" style="background-color: #1E9FFF">已啟用</span></td>\n' +
' <td class="td-manage">\n' +
' <a onclick="member_stop(this,' + admin.aid + ')" href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" title="啟用">\n' +
' <i class="layui-icon"></i>\n' +
' </a>\n' +
' <a title="編輯" onclick="xadmin.open(\'編輯管理員\',\'admin-edit.html?aid=' + admin.aid + '\',600,500)" href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >\n' +
' <i class="layui-icon"></i>\n' +
' </a>\n' +
' <a title="刪除" onclick="member_del(this,\'要刪除的id\')" href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >\n' +
' <i class="layui-icon"></i>\n' +
' </a>\n' +
' </td>\n' +
'</tr>';
} else if (admin.status === "N") {
li = '<tr>\n' +
' <td>\n' +
' <input type="checkbox" name="checkedId" id="checkedId" lay-skin="primary">\n' +
' <div class="layui-unselect layui-form-checkbox" lay-skin="primary"><i class="layui-icon layui-icon-ok"></i></div>' +
' </td>\n' +
' <td>' + admin.aid + '</td>\n' +
' <td>' + admin.aname + '</td>\n' +
' <td>' + admin.phone + '</td>\n' +
' <td>' + admin.email + '</td>\n' +
' <td>' + admin.role + '</td>\n' +
' <td>' + admin.date + '</td>\n' +
' <td class="td-status">\n' +
' <span class="layui-btn layui-btn-normal layui-btn-mini" style="background-color: gray">已停用</span></td>\n' +
' <td class="td-manage">\n' +
' <a onclick="member_stop(this,' + admin.aid + ')" href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" title="停用">\n' +
' <i class="layui-icon"></i>\n' +
' </a>\n' +
' <a title="編輯" onclick="xadmin.open(\'編輯管理員\',\'admin-edit.html?aid=' + admin.aid + '\',600,500)" href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >\n' +
' <i class="layui-icon"></i>\n' +
' </a>\n' +
' <a title="刪除" onclick="member_del(this,\'要刪除的id\')" href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >\n' +
' <i class="layui-icon"></i>\n' +
' </a>\n' +
' </td>\n' +
'</tr>';
}
admin_lis += li;
}
//設(shè)置列表數(shù)據(jù)
$("#admin_msg").html(admin_lis);
});
}
</script>servlet中功能代碼:
//分頁、模糊查詢
public void pageQuery(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//接收參數(shù)
String currentPageStr = request.getParameter("currentPage");
//接收admin_name管理員名稱
String admin_name = request.getParameter("admin_name");
//判斷admin_name是否為null
if (admin_name != null && !"null".equals(admin_name) && admin_name.length() > 0) {
admin_name = new String(admin_name.getBytes("iso-8859-1"), "utf-8");
} else {
admin_name = "";
}
int currentPage = 0; //當(dāng)前頁碼,不傳遞參數(shù),默認為1
if (currentPageStr != null && currentPageStr.length() > 0) {
currentPage = Integer.parseInt(currentPageStr);
} else {
currentPage = 1;
}
//每頁顯示條數(shù),默認為5
int pageSize = 5;
//調(diào)用service查詢PageBean對象
PageBean<Administrator> pb = service.pageQuery(currentPage, pageSize, admin_name);
//將pageBean對象序列化為json,返回
writeValue(pb, response);
}service層中代碼實現(xiàn):
@Override
public PageBean<Administrator> pageQuery(int currentPage, int pageSize, String admin_name) {
//封裝PageBean
PageBean<Administrator> pb = new PageBean<>();
//設(shè)置當(dāng)前頁碼
pb.setCurrentPage(currentPage);
//設(shè)置每頁顯示條數(shù)
pb.setPageSize(pageSize);
//設(shè)置總記錄數(shù)
int totalCount = dao.findTotalCount(admin_name);
pb.setTotalCount(totalCount);
//設(shè)置當(dāng)前頁顯示的數(shù)據(jù)集合
int start = (currentPage - 1) * pageSize; //開始的記錄數(shù)
List<Administrator> list = dao.findByPage(start, pageSize, admin_name);
pb.setList(list);
//設(shè)置總頁數(shù) = 總記錄數(shù)/每頁顯示條數(shù)
int totalPage = totalCount % pageSize == 0 ? totalCount / pageSize : (totalCount / pageSize) + 1;
pb.setTotalPage(totalPage);
return pb;
}dao層中代碼實現(xiàn):
@Override
public int findTotalCount(String admin_name) {
//定義sql模板
String sql = "SELECT COUNT(*) FROM administrator WHERE 1=1 ";
StringBuilder sb = new StringBuilder(sql);
//條件
List<Object> params = new ArrayList<>();
if (admin_name != null && admin_name.length() > 0) {
sb.append(" and aname like ? ");
params.add("%" + admin_name + "%");
}
sql = sb.toString();
return template.queryForObject(sql, Integer.class, params.toArray());
}
@Override
public List<Administrator> findByPage(int start, int pageSize, String admin_name) {
String sql = "SELECT * FROM administrator WHERE 1=1 ";
StringBuilder sb = new StringBuilder(sql);
//條件
List<Object> params = new ArrayList<>();
//判斷參數(shù)是否有值
if (admin_name != null && admin_name.length() > 0) {
sb.append(" and aname like ? ");
params.add("%" + admin_name + "%");
}
//分頁條件
sb.append(" limit ?,? ");
params.add(start);
params.add(pageSize);
//轉(zhuǎn)字符串
sql = sb.toString();
return template.query(sql, new BeanPropertyRowMapper<>(Administrator.class), params.toArray());
}實現(xiàn)效果:

用戶列表
設(shè)計思路:與管理員列表設(shè)計思路基本類似。
實現(xiàn)效果:

訂單管理
設(shè)計思路:與管理員列表設(shè)計思路基本類似。

到此這篇關(guān)于詳解Java快速上手用戶后臺管理系統(tǒng)的文章就介紹到這了,更多相關(guān)Java 后臺管理系統(tǒng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java Lambda表達式與匿名內(nèi)部類的聯(lián)系和區(qū)別實例分析
這篇文章主要介紹了Java Lambda表達式與匿名內(nèi)部類的聯(lián)系和區(qū)別,結(jié)合實例形式分析了Java Lambda表達式與匿名內(nèi)部類功能、用法、區(qū)別及操作注意事項,需要的朋友可以參考下2019-10-10
淺談java中異步多線程超時導(dǎo)致的服務(wù)異常
下面小編就為大家?guī)硪黄獪\談java中異步多線程超時導(dǎo)致的服務(wù)異常。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06
關(guān)于IDEA的junit單元測試Scanner輸入不可用的問題(多種原因分析)
IDEA在Junit測試中使用了Scanner,但是控制臺一直轉(zhuǎn)圈,無法輸入,eclipse默認可用,其實解決方法很多,今天小編給大家分享多種問題原因分析及解決方法,感興趣的朋友一起看看吧2021-06-06
Spring MVC獲取參數(shù)和自定義參數(shù)類型轉(zhuǎn)換器及編碼過濾器
這篇文章主要為大家詳細介紹了Spring MVC獲取參數(shù)和自定義參數(shù)類型轉(zhuǎn)換器及編碼過濾器,文中通過代碼示例介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下2023-06-06
spring boot整合CAS Client實現(xiàn)單點登陸驗證的示例
本篇文章主要介紹了spring boot整合CAS Client實現(xiàn)單點登陸驗證的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01
SpringBoot項目使用?axis?調(diào)用webservice接口的實踐記錄
這篇文章主要介紹了SpringBoot項目使用?axis?調(diào)用webservice接口,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06
手把手教你設(shè)置IntelliJ IDEA 的彩色代碼主題的圖文教程
本文給出一系列 IntelliJ IDEA 代碼的彩色主題,感興趣的朋友一起看看吧2018-01-01
java實現(xiàn)Spring在XML配置java類的方法
下面小編就為大家?guī)硪黄猨ava實現(xiàn)Spring在XML配置java類的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11

