2020-10-29(MVC实现DVD系统)

6 篇文章 0 订阅
2 篇文章 0 订阅
MVC实现的DVD系统:
    关联了两张表,一张user表,用于登录验证,username和password都满足方可登录成功,另一张DVD表,存储了dvd信息,其中DVD的编号为主键,不可重复。

登录界面:
    账号和密码会去user表中验证。验证码利用ValidateCode.jar包生成,输入之后会去Codesevlet中去验证输入的验证码。
        ValidateCode vc=new ValidateCode(100, 20, 5, 20);
		String code = vc.getCode();
		HttpSession session = request.getSession();
		session.setAttribute("code", code);
		System.out.println("生成的随机验证码是:"+code);
		vc.write(response.getOutputStream());
    可以勾选自动登录时间,之后会在LoginServlet中设置cookie的最大时长,并把用户名和密码保存在session中,可以实现下次的自动登录。(即使结束会话,即关闭浏览器或关机,但可以根据cookie实现自动登录。) 如果没有cookie,会自动跳到登录界面。

@WebFilter("/dvd")
public class AutoLoginFilter implements Filter {
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		
		UserService service = new UserServiceImpl();
		System.out.println("这里是拦截器");
		HttpServletRequest req=(HttpServletRequest) request;
		HttpServletResponse rep=(HttpServletResponse) response;
		
		Cookie[] cookies = req.getCookies();
		String autologin = null;
		if (cookies == null) {
			rep.sendRedirect("login.jsp");
		} else {

			for (Cookie c : cookies) {
				if (c.getName().equals("autologin")) {
					autologin = c.getValue();//找到对应的cookie
					break;

				}
			}
			
			if(autologin != null){
				//做自动登陆
				System.out.println("进入过滤器。");
				String [] parts = autologin.split("-");
				String username = parts[0];
				String password = parts[1];
				
				User u = service.getUser(username);
				if (u == null) {
					rep.sendRedirect("login.jsp");
				} else if (password.equals(u.getPassword())) {
					chain.doFilter(request, response);//放行
				} else {
					rep.sendRedirect("login.jsp");
				}
			} else {
				rep.sendRedirect("login.jsp");
			}
		}
	}

}

这里写了一个Filter:AutoLoginFilter,防止绕过登录以及实现自动登录。
这是登录之后的主界面,
    这里实现了DVD的借阅归还,增删改查,以及分页和批量删除。

    增加:增加时用jQuery和Ajax对输入的编号做了判断,不能使其重复。输入完毕,点击增加按钮,会发送请求action="dvd?action=add" method="post"到dvdServlet中,判断action调用相应的方法,去service层,再去dao层通过传入的DVD对象(新增的dvd)中执行
String sql = "INSERT INTO dvd_1(id,DVD_name,type,state) VALUES (?,?,?,0);"; 
state为dvd的状态,0代表着未借出。

    删除:<a href="dvd?action=del&id=${d.id }">删除</a> 通过传入的id执行相应的sql语句。

    修改:<a href="dvd?action=updataFind&id=${d.id }">修改</a> 会先通过id去查找id对应的dvd,然后把dvd信息显示在修改页面上,修改id编号时,一样会用jQuery和Ajax对输入的编号做判断。

    查找:通过传入的name查找dvd并分页展示,开始的查找和通过name的查找执行的是用同一个方法,在sql语句中对相应的值做了判断;
    sql语句:select * from dvd_1 where DVD_name like ? limit ?,?;
    
    部分代码如下:
    jsp:
    <div id="search">
		<form action="dvd" method="post">
			姓名:<input type="text" name="name" value="${name }"> 
				<input type="submit" value="查找">
		</form>
	</div>

    dao层代码:
    con = JDBCUtil.getCon();
	String sql="select * from dvd_1 where DVD_name like ? limit ?,?;";
	pre = con.prepareStatement(sql);
	String name2 = (name == null ? "" : name);
	pre.setString(1, "%"+name2+"%");
	pre.setInt(2, ((pageIndex - 1) * pageSize));
	pre.setInt(3, pageSize);
	rs = pre.executeQuery();
	while(rs.next()) {
		String id = rs.getString("id");
		String name1 = rs.getString("DVD_name");
		String type = rs.getString("type");
		int status = rs.getInt("state");
		/**
		 * 获取时间类型的方法, 1.getTimestamp()获取年月日时分秒
		 * 2.getDate()只能获取年月日,时分秒会默认为00:00:00 3.注意获取的时间可能为null
		 */
		Timestamp timestamp = rs.getTimestamp("lend_time");
		Timestamp timestamp2 = rs.getTimestamp("return_time");
		java.util.Date lendTime = null;
		java.util.Date returnTime = null;
		if (timestamp == null) {
			lendTime = null;
		} else {
			lendTime = new Date(timestamp.getTime());
		}
		if (timestamp2 == null) {
			returnTime = null;
		} else {
			returnTime = new Date(timestamp2.getTime());
		}
		DVD d = new DVD(id, name1, type, status == 1 ? true:false, lendTime, returnTime);
		list.add(d);	

增加:

修改:

查找:

批量选择,全选按钮,选择所有,全选情况下,取消某一个子选项,全选框也变为不选中,没有点击全选的情况下,选中了所有子选项,全选框自动选中。
        var delAll = function() {
			//var allpro = document.getElementsByName("check"); //获取所有选择的
		
		    var checkedId = ""; 
		    
		    for (var i = 0, len = allpro.length; i < len; i++) { 
		         if (allpro[i].checked) {     
		              checkedId += allpro[i].value + '-'; 
		    	 } 
		     }
		  	var flag = window.confirm("你确定要删除这条记录吗");
		   	//alert(checkedId);
		  	if(flag){
				window.location.href = "dvd?action=delAll&ids="+checkedId;
		  
		  	}
		}

借阅和归还:

<a href="dvd?action=lendDvd&id=${d.id }">借阅</a>| 
<a href="dvd?action=returnDvd&id=${d.id }">归还</a>| 
借阅和归还会在请求中包含id,首先会根据id去查找dvd的状态,判断是否可以借出,如果可以,则修改dvd的状态,并获取当前系统的时间,赋值给借阅时间或归还时间。

分页:详细见目录其他文章。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值