本文版权归作者和共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
最近一直在练习java后台开发,感觉后台开发需要的知识点有点杂,比如你的会java开发,数据库开发(SQL语句的编写),JSP页面的编写(HTML),JS等等,但是也不是太难,只要认真去学习,相信聪明的你们都会学会的。
在学习的过程中我是在做每个小项目中去具体的去应用,我做的练习是java里面经典的《用户,角色,权限管理系统》。
用到的知识/框架
这个小项目采用的是JFinal框架,,前台框架使用的是layui前台框架,数据库采用的是MySql,前后台交互使用jQuery。
JFinal框架:http://www.jfinal.com/doc/2-3
layui框架:http://www.layui.com/
MySQL教程:http://www.runoob.com/mysql/mysql-tutorial.html
jQuery教程:http://www.w3school.com.cn/jquery/index.asp
JSTL教程:http://www.runoob.com/jsp/jsp-jstl.html
EL表达式教程:http://www.runoob.com/jsp/jsp-expression-language.html
数据库设计了五张表:
数据库.png
下面先奉上系统内的截图:
部分代码
JFinal基本配置
/**
*
*/
package com.gengen.manager.config;
import java.io.File;
import com.gengen.manager.controller.LoginController;
import com.gengen.manager.controller.MainController;
import com.gengen.manager.controller.MenuController;
import com.gengen.manager.controller.RoleController;
import com.gengen.manager.controller.UserController;
import com.gengen.manager.interceptor.LoginInterceptor;
import com.gengen.manager.model.User;
import com.gengen.manager.model._MappingKit;
import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.json.FastJsonFactory;
import com.jfinal.kit.PathKit;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.render.ViewType;
import com.jfinal.template.Engine;
/**
* @ClassName: MyConfig
* @author Liu_xg
* @date 2018年5月4日
* @Description: TODO
*/
public class MyConfig extends JFinalConfig {
/**
* 通用配置
*/
@Override
public void configConstant(Constants me) {
// TODO Auto-generated method stub
me.setDevMode(true);
me.setEncoding("utf-8");
me.setViewType(ViewType.JSP);
me.setError404View("/WEB-INF/common/error404.jsp");
me.setError500View("");
// 指定json工具jar包为fastjson
me.setJsonFactory(new FastJsonFactory());
// 上传图片的路径
me.setBaseUploadPath(PathKit.getWebRootPath()+File.separator+"upload"+File.separator);
}
/**
* 配置路由
*
* @param me
*/
@Override
public void configRoute(Routes me) {
// 配置拦截器
me.addInterceptor(new LoginInterceptor());
me.add("/", LoginController.class, "/WEB-INF/views/login");
me.add("/main", MainController.class, "/WEB-INF/views/main");
me.add("/menu", MenuController.class, "/WEB-INF/views/menu");
me.add("/user", UserController.class, "/WEB-INF/views/user");
me.add("/role", RoleController.class, "/WEB-INF/views/role");
}
@Override
public void configEngine(Engine me) {
// TODO Auto-generated method stub
}
/**
* 配置插件
*/
@Override
public void configPlugin(Plugins me) {
// 配置D3p0数据库连接池
DruidPlugin plugin = createDruidPlugin();
me.add(plugin);
// 配置ActiveRecord插件
ActiveRecordPlugin arp = new ActiveRecordPlugin(plugin);
_MappingKit.mapping(arp);
me.add(arp);
arp.addMapping("t_user", User.class);
}
@Override
public void configInterceptor(Interceptors me) {
// TODO Auto-generated method stub
}
@Override
public void configHandler(Handlers me) {
// TODO Auto-generated method stub
}
/**
* 连接数据库
*
* @return
*/
public static DruidPlugin createDruidPlugin() {
PropKit.use("jdbc.properties");
return new DruidPlugin(PropKit.get("db.url"), PropKit.get("db.username"), PropKit.get("db.password"));
}
}
通过登陆用户的ID来查询此用户对应角色所分配的权限信息,用于在登陆后菜单的展示.
首先根据登陆用户id来查询此用户对应的一级目录信息,然后在根据一级目录id和用户id来查询此用户在该一级目录下的二级目录信息。
Controller层代码
/**
* 展示权限管理系统后台页
*/
@SuppressWarnings("unchecked")
public void mainMenu() {
User user=getSessionAttr("user");
menus = (List
Service层代码
/**
* 菜单展示(通过用户id来查询菜单、权限)
*
* @param userId
* @return
*/
@SuppressWarnings("unchecked")
public List> mainMenuByUserIdFromMain(int userId) {
menus = new ArrayList<>();
// 查到父item的信息
menusParent = (List
Dao层代码
/**
* 查询父菜单item的相关信息
*/
public List> queryMenuParent(int menuId) {
String sql = "select id,menu_name,parent_id from t_menu where statue=1 and parent_id=0 ";
prarms = new ArrayList
JSP页面代码
请接下篇:用户、角色、权限管理系统(二)