栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

网上书城—登录、书籍管理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

网上书城—登录、书籍管理

前言:

登录模块涉及到的功能在jsp的时候其实就已经有写到过了,这边就不做过多的讲解代码意思了。

管理员模块,这边主要是书籍管理模块,涉及到了最基础增删改查。

目录

一、登录模块

1、主要功能:

2、实现对象:

3、界面展示

4、代码:

二、书籍管理模块

1、主要功能:

2、界面展示:

3、代码:


一、登录模块

1、主要功能:

①七天免登陆

②记住密码

2、实现对象:

cookie,session

3、界面展示

 

4、代码:

UserDao.java

package com.dao;

import com.entity.PO.UserPo;
import com.zking.util.baseDao;


public class UserDao extends baseDao{
	
	
	public UserPo Login(UserPo u) throws Exception {
		String sql="select * from t_easyui_user where name = '"+u.getName()+"' and pwd = '"+u.getPwd()+"'";
		return super.executeQuery(sql, UserPo.class, null).get(0);
	}
	
}

UserAction.java

package com.web;

import java.lang.reflect.Field;
import java.net.URLEncoder;

import javax.servlet.http.cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.dao.UserDao;
import com.entity.DO.UserDo;
import com.entity.PO.UserPo;
import com.zking.framework.ActionSupport;
import com.zking.framework.ModelDriver;
import com.zking.util.Change;
import com.zking.util.ResponseUtil;


public class UserAction extends ActionSupport implements ModelDriver {

	private UserDo userDo = new UserDo();
	private UserPo userPo = new UserPo();
	private UserDao ud = new UserDao();

	@Override
	public UserDo getModel() {
		return userDo;
	}

	
	public void login(HttpServletRequest req, HttpServletResponse resp) {
		try {
			Change u = new Change();
			
			userPo = (UserPo) u.change(userDo, x -> {
				UserPo po = null;
				try {
					po = UserPo.class.newInstance();
					Field[] fs = po.getClass().getDeclaredFields();
					for (Field f : fs) {
						f.setAccessible(true);
						Field ff = userDo.getClass().getDeclaredField(f.getName());
							ff.setAccessible(true);
							f.set(po, ff.get(userDo));
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
				return po;
			});
			UserPo user = ud.Login(userPo);
			
			boolean bremember = "true".equals(userDo.getRememberPwd());
			boolean bseven = "true".equals(userDo.getSevenLogin());
			if(user != null) {//如果账号验证成功
				if(bremember || bseven) {
					cookie name = new cookie("name", URLEncoder.encode(userDo.getName(), "utf-8"));
					cookie pwd = new cookie("pwd", URLEncoder.encode(userDo.getPwd(), "utf-8"));
					name.setMaxAge(60 * 60 * 24 * 7);
					pwd.setMaxAge(60 * 60 * 24 * 7);
					resp.addcookie(name);
					resp.addcookie(pwd);
					System.out.println("cook1");
				}
				if(bseven) { //如果勾选了七天免登陆
					cookie seven = new cookie("seven", URLEncoder.encode("true", "utf-8"));
					seven.setMaxAge(60 * 60 * 24 * 7);
					resp.addcookie(seven);
					System.out.println("cook2");
				}
				if(bremember) { //如果勾选了记住密码
					cookie remember = new cookie("remember", URLEncoder.encode("true", "utf-8"));
					remember.setMaxAge(60 * 60 * 24 * 7);
					resp.addcookie(remember);
					System.out.println("cook3");
				}else {
					cookie remember = new cookie("remember", URLEncoder.encode("false", "utf-8"));
					remember.setMaxAge(0);
					resp.addcookie(remember);
				}
				req.getSession().setAttribute("user", userPo);
			}else {
				ResponseUtil.writeJson(resp, 0);
			}
				ResponseUtil.writeJson(resp, user.getType());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

Change.java

package com.zking.util;

import java.util.function.Function;

public class Change {

	
	public Object change(Object t,Function f) throws Exception {
		return f.apply(t);
	}
	
}

UserPo.java

package com.entity.PO;

public class UserPo {
	private long id;
	private String name;
	private String pwd;
	private int type;
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public int getType() {
		return type;
	}
	public void setType(int type) {
		this.type = type;
	}
	public UserPo(long id, String name, String pwd, int type) {
		super();
		this.id = id;
		this.name = name;
		this.pwd = pwd;
		this.type = type;
	}
	
	public UserPo() {
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", pwd=" + pwd + ", type=" + type + "]";
	}
}

登录模块使用的是无刷新写法,前端接收响应码决定跳转的界面。

Login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@include file="common.jsp"%>




登录界面




	
		
 

Login.js

function login(){
		$.ajax({
			url : "user.action?methodName=login",
			type : "post",
			dataType : "json",
			data: {
				name : $("#name").val(),
				pwd : $("#pwd").val(),
				sevenLogin : $("#sevenLogin")[0].checked,
				rememberPwd : $("#rememberPwd")[0].checked
			},
			success : function(msg) {
				if(msg == '0'){
					layer.msg('密码错误!请重试!')
				}else if(msg == '1'){//用户
					layer.msg('欢迎光临!')
					location.href='index.jsp';
				}else{//管理员
					layer.msg('欢迎光临!')
					location.href='admin.jsp';
				}
			}
		})
	}

你们可能会发现一个问题,如果涉及到的角色多了,那么这里就会造成代码臃肿,写法是不太准确的!

这里我会设计一张表,专门存储不通过角色用户跳转的页面路径,在加载登录界面时就将该表的数据读取出来然后存储到js中定义的map集合之中,那么登录成功回调就根据响应码获取都对应路径。

二、书籍管理模块 1、主要功能:

①上架书籍

②下架书籍

③关键字搜索

④修改书籍

⑤新增书籍

2、界面展示:

 修改

3、代码:

BookDao.java

package com.dao;

import java.util.List;

import com.entity.PO.Book;
import com.zking.util.baseDao;
import com.zking.util.PageBean;
import com.zking.util.StringUtils;


public class BookDao extends baseDao{

	
	public void add(Book b) throws Exception {
		String sql="insert into t_easyui_book(name,pinyin,cid,author,price,image,publishing,description,deployTime) values(?,?,?,?,?,?,?,?,?)";
		String[] attrs = new String[] {"name","pinyin","cid","author","price","image","publishing","description","deployTime"};
		super.executeUpdate(sql, b, attrs);
	}
	
	
	public void upd(Book b) throws Exception {
		String sql="update t_easyui_book set name=?,pinyin=?,cid=?,author=?,price=?,image=?,publishing=?,description=?,deployTime=? where id="+b.getId();
		String[] attrs = new String[] {"name","pinyin","cid","author","price","image","publishing","description","deployTime"};
		super.executeUpdate(sql, b, attrs);
	}
	
}

BookVoDao.java

package com.dao;

import java.util.List;

import com.entity.VO.BookVo;
import com.zking.util.baseDao;
import com.zking.util.PageBean;
import com.zking.util.StringUtils;

public class BookVoDao extends baseDao{
	
	
	public List list(BookVo b,PageBean p) throws Exception{
		String sql="select b.*,c.name cname from t_easyui_book b,t_easyui_category c where b.cid = c.id";
		if(StringUtils.isNotBlank(b.getName())) {
			System.out.println(b.getName());
			sql+=" and b.name like '%"+b.getName()+"%'";
		}
		if(b.getState() != 0) {
			sql+=" and b.state = "+b.getState();
		}
		return super.executeQuery(sql, BookVo.class, p);
	}
	
	
	public void updState(BookVo b) throws Exception {
		String sql="update t_easyui_book set state="+b.getState()+" where id ="+b.getId();
		super.executeUpdate(sql, b, null);
	}
			
}

为什么查询是在BookVoDao中?

数据表格需要显示的数据不仅仅是一张表格需要展示的数据!这里需要用的连表查询。仅仅是实体类是不能满足数据表格显示需求,所以有一个BookVo实体类来满足前端显示。

admin.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@include file="common.jsp"%>




后台管理



	
		
			书城后台管理
			
			
  • 控制台
  • 商品管理
  • 用户
  • 其它系统
  • 贤心
    基本资料
    安全设置
  • 退了
      © layui.com - 底部固定区域

      admin.js

      var html = '';
      
      $(function() {
      	layui.use([ 'tree', 'element', 'jquery' ],function() {
      						var tree = layui.tree;
      						var element = layui.element;
      						var $ = layui.jquery;
      						var url = $('#ctx').val();
      						$.ajax({
      							type : 'post',
      							url : url + '/menu.action?methodName=tree',
      							dataType : 'json',
      							async : true,
      							success : function(data) {
      										  
      										 
      							tree.render({
      									elem : '#bookMenu',
      									data: data,
      									click : function(node) {
      										var exist = $("li[lay-id='"+ node.data.id +"']").length;
      										if (exist > 0) {
      											element.tabChange('tabs',node.data.id);// 切换到已有的选项卡
      										} else if (node.data.menuURL != null && node.data.menuURL != "") {
      											element.tabAdd('tabs',{
      													title : node.data.title,
      													content : '',// 支持传入html
      													id : node.data.id
      											});
      											element.tabChange('tabs',node.data.id);
      										}
      									}
      							})
      							}
      						});
      	})
      })
      
      
      function Buildtree(obj) {
      	var a = 1;
      	$.each(obj, function(i, n) {
      		var url = n.menuURL
      		if (n.hasParent == false) {
      			html += '
    • '; } if (n.children.length > 0) { html += '' + n.title + ''; html += '
      '; Buildtree(n.children); html += '
      '; } else { if (a > 0) { html += '' + n.title + ''; a = a - 1; console.log(a) } else { html += '
      ' + n.title + '
      '; } } if (n.hasParent == false) { html += '
    • '; } }); }

      右侧数点击会打开一个内嵌页面,对应js代码如下

      listBook1.js

      var URL = $('#ctx').val();
      
      var OpenId;
      
      var table;
      var $;
      var form;
      
      var bookTypeval;
      
      layui.use([ 'table', 'jquery', 'form' ], function() {
      	table = layui.table;
      	$ = layui.jquery;
      	form = layui.form;
      	
      	$(function() {
      		
      		table.render({
      			elem : '#listBook1',
      			height : 315,
      			tool : 'true',
      			url : URL + '/bookvo.action?methodName=list&state=1' // 数据接口
      			,
      			page : true // 开启分页
      			,
      			cols : [ [ // 表头
      			{
      				checkbox : 'true'
      			}, {
      				field : 'id',
      				title : 'ID',
      				width : 100,
      				sort : true,
      			}, {
      				field : 'name',
      				title : '书籍名',
      				width : 100
      			}, {
      				field : 'pinyin',
      				title : '拼音',
      				width : 100,
      				sort : true
      			}, {
      				field : 'cname',
      				title : '书籍类别',
      				width : 100
      			}, {
      				field : 'author',
      				title : '作者',
      				width : 100
      			}, {
      				field : 'price',
      				title : '价格',
      				width : 100,
      				sort : true
      			}, {
      				field : 'image',
      				title : '图片路径',
      				width : 120,
      				sort : true
      			}, {
      				field : 'publishing',
      				title : '出版社',
      				width : 120
      			}, {
      				field : 'sales',
      				title : '销量',
      				width : 100,
      				sort : true
      			}, {
      				title : '操作',
      				align : 'center',
      				toolbar : '#barDemo',
      				fixed : 'right'
      			} ] ]
      		});
      
      		
      		var html = '';
      		$.ajax({
      			url : URL + '/category.action?methodName=list',
      			type : 'post',
      			dataType : 'json',
      			async:false,
      			success : function(msg) {
      				$.each(msg, function(i, n) {
      					html += '';
      				});
      			}
      		})
      		$('#type').append(html);
      		form.render();
      		form.render('select'); 
      
      	})
      
      	
      	table.on('tool(listBook1)', function(obj) {
      		var book = obj.data; // 获得当前行数据
      		var layEvent = obj.event; // 获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)
      		if (layEvent === 'sj') {
      			$.ajax({
      				type : 'post',
      				dataType : 'json',
      				url : URL + '/bookvo.action?methodName=updState&state=2&id='
      						+ book.id,
      				success : function(msg) {
      					if (msg == '1') {
      						layer.msg('上架成功')
      						table.reload('listBook1');
      					}
      				}
      			})
      		}else if(layEvent == 'upd'){
      			$('#kind').val('upd')
      			var ts = $('#type option')
      			console.log(ts)
      			$.each(ts, function(i, n) {
      				if(n.text == book.cname){
      					n.selected = true;	
      					bookTypeval = n.value;
      				}
      			});
      			$('#bookId').val(book.id)
      			$('#name').val(book.name)
      			$('#description').val(book.description)
      			$('#publishing').val(book.publishing)
      			$('#price').val(book.price)
      			$('#type').val(book.cname)
      			$('#author').val(book.author)
      			openx('');
      		}
      	});
      
      	
      	form.on('select(bookType)', function(data) {
      		bookTypeval = data.value
      	});
      
      	
      	form.on('submit(form1)', function(data) {
      		var k = $('#kind').val()
      		var url;
      		if (k == 'add') {
      			url = URL + '/book.action?methodName=add&description='+$('#description').val()+'&publishing='+$('#publishing').val()+'&price='+$('#price').val()+'&cid='+bookTypeval+'&name='+$('#name').val()+'&author='+$('#author').val();
      		} else {
      			url = URL + '/book.action?methodName=upd&id='+$('#bookId').val()+'&description='+$('#description').val()+'&publishing='+$('#publishing').val()+'&price='+$('#price').val()+'&cid='+bookTypeval+'&name='+$('#name').val()+'&author='+$('#author').val();
      		}
      		$.ajax({
      			type : 'post',
      			url : url,
      			dataType : 'json',
      			success : function(msg) {
      				if (msg == '1') {
      					if(k == 'add'){
      						layer.msg('增加成功')
      					}else{
      						layer.msg('修改成功')
      					}
      					clear();
      					layer.close(OpenId);
      					table.reload('listBook1');
      				}
      			}
      		})
      		return false;
      	});
      })
      
      
      function seachByName() {
      	table.reload('listBook1', {
      		url : URL + '/bookvo.action?methodName=list&state=1',
      		where : {
      			name : $('#bookName').val()
      		}
      	});
      }
      
      
      function openx(id) {
      	if(id == '1'){
      		$('#kind').val('add')
      		console.log(1)
      	}
      	layer.open({
      		type : 1,
      		content : $('#caozuo'),
      		success : function(layero, index) {
      			OpenId = index;
      		},
      		cancel : function(index, layero) {
      			if (confirm('确定要关闭么')) { // 只有当点击/confirm/i框的确定时,该层才会关闭
      				layer.close(index);
      				clear();
      			}
      			return false;
      		}
      	});
      }
      
      
      
      function clear() {
      	$("#f input,textarea").val('')
      }

       

      转载请注明:文章转载自 www.mshxw.com
      本文地址:https://www.mshxw.com/it/301292.html
      我们一直用心在做
      关于我们 文章归档 网站地图 联系我们

      版权所有 (c)2021-2022 MSHXW.COM

      ICP备案号:晋ICP备2021003244-6号