基于jsp+servlet图书管理系统之后台用户信息删除操作

上一篇的博客写的是修改操作,且附有源码和数据库,这篇博客写的是删除操作,附有从头至尾写的代码(详细的注释)和数据库!

  此次删除操作的源码和数据库:http://download.csdn.net/detail/biexiansheng/9732955



自此,基于jsp+servlet开发的用户信息增删该查已经全部写完了,上面的链接是全部的代码,包含增删该查和数据库。

  注意点:

    1:删除操作使用的是伪删除。即只是不在页面显示了,但是还保存在数据库。

    2:分页查询使用的是一个小工具,后面有时间把这些很实用的小工具详细介绍一下。

    3:在提交的表单和后台数据交互的时候使用了一个封装好的小工具。后面有时间介绍。



下面先将删除操作的流程过一遍:

  1:执行伪删除操作的流程:

    1.1:点击删除按钮就是这一句话,提交到system/userinfodelete这个路径的servlet层,注意是doSet()方法。

      <d:column href="system/userinfodelete" value="删除" title="删除"

        paramId="userId" paramProperty="userId">

      </d:column>
           1.2:执行到servlet  层之后调用service业务逻辑层伪删除方法。

       UserInfoService service=new UserInfoServiceImpl();
            //调用业务逻辑层的删除方法
            boolean mark=service.deleteUser(user);  

    1.3:service层(业务逻辑层)调用工具类的公共方法,

      (由于修改和插入可以提取公共的方法,这里做的伪删除其实就是修改也可以使用工具类)

      int count=DbUtils.addAndUpdate(sql, list.toArray());
            1.4:执行工具类之后又返回到service层(业务逻辑层)

      return ps.executeUpdate();

    1.5:业务逻辑层又返回true或者false,返回到servlet层。

      int count=DbUtils.addAndUpdate(sql, list.toArray());
              if(count>0){
                  return true;
              }else{
                  return false;
              }

    1.6:执行servlet层之后之后转发到user_info.jsp页面,并且提示信息

        boolean mark=service.deleteUser(user);
          if(mark){
               request.setAttribute("info", "用户信息删除成功");
           }else{
              request.setAttribute("info", "用户信息删除失败");
           }
           request.getRequestDispatcher("/view/system/userinfo/user_info.jsp").forward(request, response);
        1.7:执行到user_info.jsp页面之后又转到system/userinfoselect这个servlet层。

      window.location="system/userinfoselect";

    1.8:转到servlet层之后又转发到userinfo_list.jsp页面。显示当前删除之后的信息。   

      request.getRequestDispatcher("/view/system/userinfo/userinfo_list.jsp").forward(request, response);
      至此删除信息已经完成了,不过需要注意的是删除操作到了上面1.8这个步奏的时候执行select语句很特殊,需要注意

    StringBuffer sql=new StringBuffer("select * from user_info where user_mark!=-1 ");

    即做了标识,-1作为伪删除的,所以查询出!=-1的信息,但是数据库里面的信息还是存在的。



下面将重要的代码按照流程写一下:

  1:点击删除按钮,即下面此页面的代码。

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <%
 4     //获取绝对路径路径
 5     String path = request.getContextPath();
 6     String basePath = request.getScheme() + "://"
 7                 + request.getServerName() + ":" + request.getServerPort()
 8                 + path + "/";
 9 %>
10 <%@ taglib prefix="d" uri="http://displaytag.sf.net"%>
11 <!DOCTYPE html>
12 <html>
13 <head>
14 <base href="<%=basePath %>" />
15 <meta charset="UTF-8">
16 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
17 <title>用户管理-用户查询</title>
18 <link href="resource/css/bootstrap.min.css" rel="stylesheet" />
19 <script type="text/javascript" src="resource/js/jquery.min.js"></script>
20 <script type="text/javascript"
21     src="resource/js/bootstrap.min.js"></script>
22 </head>
23 <body>
24     <div>
25         <ul class="breadcrumb" style="margin: 0px;">
26             <li>系统管理</li>
27             <li>用户管理</li>
28             <li>用户查询</li>
29         </ul>
30     </div>
31     <form action="system/userinfoselect" class="form-inline" method="post">
32         <div class="row alert alert-info" style="margin: 0px; padding: 5px;">
33             <div class="form-group">
34                 <label>账号:</label>
35                 <input type="text" name="userAccount" value="${user.userAccount }" class="form-control" placeholder="请输入查询账号" />
36                 <label>姓名:</label>
37                 <input type="text" name="userName" value="${user.userName }" class="form-control" placeholder="请输入查询姓名" />
38                 <select class="form-control" name="userMark">
39                     <option value="">全部</option>
40                     <option value="0" ${user.userMark==‘0‘?‘selected‘:‘‘ }>普通会员</option>
41                     <option value="1" ${user.userMark==‘1‘?‘selected‘:‘‘ }>管理员</option>
42                 </select>
43             </div>
44             <input type="submit" class="btn btn-danger" value="查询"> <a
45                 href="view/system/userinfo/userinfo_add.jsp" class="btn btn-success">添加用户</a>
46         </div>
47         <div class="row" style="padding: 15px;">
48             <d:table name="list" pagesize="5" requestURI="system/userinfoselect" class="table table-hover table-condensed">
49                 <d:column property="userId" title="用户编号"></d:column>
50                 <d:column property="userAccount" title="用户账号"></d:column>
51                 <d:column property="userPw" title="用户密码"></d:column>
52                 <d:column property="userNumber" title="用户学号"></d:column>
53                 <d:column property="userName" title="用户姓名"></d:column>
54                 <d:column property="userAge" title="用户年龄"></d:column>
55                 <d:column property="userSex" title="用户性别"></d:column>
56                 <d:column property="userMark" title="用户标识"></d:column>
57                 <d:column href="system/userinfoupdate" value="修改" title="修改" paramId="userId" paramProperty="userId"></d:column>
58                 <!-- 这里提交到的是相对应的servlet的doSet方法里面 -->
59                 <d:column href="system/userinfodelete" value="删除" title="删除" paramId="userId" paramProperty="userId"></d:column>
60                 <!-- 需要注意的是删除做的是伪删除,数据库里面的信息依旧保存 -->
61             </d:table>
62         </div>
63     </form>
64 </body>
65 </html>

  2:之后就到了删除的servlet层。

 1 package com.bie.system.servlet;
 2
 3 import java.io.IOException;
 4
 5 import javax.servlet.ServletException;
 6 import javax.servlet.annotation.WebServlet;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10
11 import com.bie.po.UserInfo;
12 import com.bie.system.service.UserInfoService;
13 import com.bie.system.service.impl.UserInfoServiceImpl;
14 import com.my.web.servlet.RequestBeanUtils;
15
16 @WebServlet("/system/userinfodelete")
17 public class UserInfoDeleteServlet extends HttpServlet{
18
19     private static final long serialVersionUID = 1L;
20
21     @Override
22     protected void doGet(HttpServletRequest request, HttpServletResponse response)
23             throws ServletException, IOException {
24         //将表单提交的数据封装到javabean中的用户信息表中
25         UserInfo user=RequestBeanUtils.requestToSimpleBean(request, UserInfo.class);
26         UserInfoService service=new UserInfoServiceImpl();
27         //调用业务逻辑层的删除方法
28         boolean mark=service.deleteUser(user);
29         if(mark){
30             request.setAttribute("info", "用户信息删除成功");
31         }else{
32             request.setAttribute("info", "用户信息删除失败");
33         }
34         request.getRequestDispatcher("/view/system/userinfo/user_info.jsp").forward(request, response);
35     }
36
37
38
39 }

  3:执行删除的servlet层之后调用service层(业务逻辑层)的伪删除方法

  1 package com.bie.system.service.impl;
  2
  3 import java.util.ArrayList;
  4 import java.util.List;
  5
  6 import com.bie.po.UserInfo;
  7 import com.bie.system.dao.UserInfoDao;
  8 import com.bie.system.dao.impl.UserInfoDaoImpl;
  9 import com.bie.system.service.UserInfoService;
 10 import com.bie.utils.DbUtils;
 11 import com.bie.utils.MarkUtils;
 12 /***
 13  * 1.4:这是业务逻辑层的实现类,实现用户信息的接口
 14  *
 15  * 切忌新手写好service业务逻辑层需要test测试(junit)
 16  * @author biehongli
 17  *
 18  */
 19 public class UserInfoServiceImpl implements UserInfoService{
 20
 21     private UserInfoDao dao=new UserInfoDaoImpl();
 22     @Override
 23     public boolean insertUser(UserInfo user) {
 24         try{
 25             //System.out.println(user);//测试传来的UserInfo里面是否够存在用户信息
 26             if(user!=null && user.getUserAccount()!=null){
 27                 String sql="INSERT INTO user_info(user_account,user_pw,"
 28                         + "user_number,user_name,user_age,user_sex,user_mark)"
 29                         + " VALUES(?,?,?,?,?,?,?)";
 30                 List<Object> list=new ArrayList<Object>();
 31                 //可以理解位将实体类中get到的信息放到数据库中,因为set设置的信息就是为了查到数据库中
 32                 list.add(user.getUserAccount());//将设置好的账号信息保存到集合中
 33                 list.add(user.getUserPw());//将设置好的账号信息保存到集合中
 34                 list.add(user.getUserNumber());//将设置好的密码信息保存到集合中
 35                 list.add(user.getUserName());//将设置好的姓名信息保存到集合中
 36                 list.add(user.getUserAge());//将设置好的年龄信息保存到集合中
 37                 list.add(user.getUserSex());//将设置好的性别信息保存到集合中
 38                 //list.add(user.getUserMark());//将设置好的标识信息保存到集合中
 39                 //后台只可以添加管理员
 40                 user.setUserMark(MarkUtils.USER_MARK_MANAGER);
 41                 //将设置为默认的管理员添加到数据库
 42                 list.add(user.getUserMark());
 43
 44                 //将封装到集合list中的信息和sql语句传递到DbUtils封装好的 方法中
 45                 //这里sql转化位String语句,list转化位数组类型
 46                 int count=DbUtils.addAndUpdate(sql.toString(), list.toArray());
 47                 //System.out.println(count);//测试返回值是0还是1
 48                 if(count>0){
 49                     return true;//成功返回true
 50                 }else{
 51                     return false;//失败返回false
 52                 }
 53             }
 54         }catch(Exception e){
 55             e.printStackTrace();
 56         }
 57         return false;
 58     }
 59
 60     @Override
 61     public List<UserInfo> selectUser(UserInfo user) {
 62         //使用StringBuffer进行字符串的拼接,不使用String
 63         //StringBuffer sql=new StringBuffer("select * from user_info where 1=1 ");
 64         StringBuffer sql=new StringBuffer("select * from user_info where user_mark!=-1 ");
 65         //设置集合,用户存放用户信息设置值的时候使用
 66         List<Object> list=null;
 67         //判断用户的信息不为空的时候
 68         if(user!=null){
 69             list=new ArrayList<Object>();
 70             //按照账号查询,如果账号不为null且不为空
 71             if(user.getUserAccount()!=null && !user.getUserAccount().equals("")){
 72                 sql.append(" and user_account=?");
 73                 list.add(user.getUserAccount());
 74             }
 75             //按照姓名查询,如果姓名不为null且不为空
 76             if(user.getUserName()!=null && !user.getUserName().equals("")){
 77                 sql.append(" and user_name like ?");
 78                 //模糊查询这样拼接字符串
 79                 list.add("%"+user.getUserName()+"%");
 80             }
 81             //按照标识查询,如果标识不为null且不为空
 82             if(user.getUserMark()!=null && !user.getUserMark().equals("")){
 83                 sql.append(" and user_mark=?");
 84                 list.add(user.getUserMark());
 85             }
 86         }
 87
 88         sql.append(" order by user_id desc");
 89         //返回的参数,sql语句是字符类型,集合转化为数组类型
 90         return dao.selectUser(sql.toString(), list.toArray());
 91     }
 92
 93     @Override
 94     public boolean updateUser(UserInfo user) {
 95         try{
 96             if(user!=null && user.getUserId()!=null){
 97                 //更新的sql语句
 98                 String sql="UPDATE user_info SET user_account=?,"
 99                         + "user_pw=?,user_number=?,user_name=?,"
100                         + "user_age=?,user_sex=? WHERE user_id=?";
101                 List<Object> list=new ArrayList<Object>();
102                 //添加到集合中的顺序必须和上面些的字段一致,不然报错
103                 list.add(user.getUserAccount());
104                 list.add(user.getUserPw());
105                 list.add(user.getUserNumber());
106                 list.add(user.getUserName());
107                 list.add(user.getUserAge());
108                 list.add(user.getUserSex());
109                 list.add(user.getUserId());
110
111                 //添加和修改(伪删除)都可以调用工具类里面公共的方法。
112                 int count=DbUtils.addAndUpdate(sql, list.toArray());
113                 if(count>0){
114                     return true;
115                 }else{
116                     return false;
117                 }
118             }
119         }catch(Exception e){
120             e.printStackTrace();
121         }
122         return false;
123     }
124
125     @Override
126     public UserInfo getUser(UserInfo user) {
127         //判断用户信息和id编号是否为空
128         if(user!=null && user.getUserId()!=null){
129             return dao.getUser(user.getUserId());
130         }
131         return null;
132     }
133
134     @Override
135     public boolean deleteUser(UserInfo user) {
136         try{
137             String sql="update user_info set user_mark=? where user_id=?";
138             List<Object> list=new ArrayList<Object>();
139             //直接给user_mark设置为-1,查询的时候加上等于-1的不显示,即在页面就无法显示了
140             list.add(MarkUtils.USER_MARK_DEL);
141             list.add(user.getUserId());
142             int count=DbUtils.addAndUpdate(sql, list.toArray());
143             if(count>0){
144                 return true;
145             }else{
146                 return false;
147             }
148         }catch(Exception e){
149             e.printStackTrace();
150         }
151         return false;
152     }
153
154
155 }

  4:执行service业务逻辑层之后调用工具类

  1 package com.bie.utils;
  2
  3 import java.sql.Connection;
  4 import java.sql.DriverManager;
  5 import java.sql.PreparedStatement;
  6 import java.sql.ResultSet;
  7 import java.util.ResourceBundle;
  8
  9 /***
 10  * 1.1:写DbUtils的工具类
 11  * :utils是工具类,方便以后调用
 12  * 在main方法测试的时候出现一个错误,
 13  * 瞄了一眼立马想到了没有添加mysql的驱动,
 14  * 所以我感觉测试还是很有必要的
 15  * @author biehongli
 16  *
 17  */
 18 public class DbUtils {
 19
 20     private static String drivername;//数据库驱动,为了加载数据库驱动
 21     private static String url;//数据库连接字符串,只要是找到自己的数据库,需要和自己的数据库一致
 22     private static String user;//数据库账号,需要和自己的一致
 23     private static String password;//数据库密码,需要和自己的一致
 24
 25     static{
 26         drivername=ResourceBundle.getBundle("db").getString("drivername");
 27         url=ResourceBundle.getBundle("db").getString("url");
 28         user=ResourceBundle.getBundle("db").getString("user");
 29         password=ResourceBundle.getBundle("db").getString("password");
 30     }
 31
 32     /***
 33      * 加载数据库驱动和连接到数据库,我一般是加载和连接的时候分别输出,可以快速找到哪里出错
 34      * @return
 35      * @throws Exception
 36      */
 37     public static Connection getCon() throws Exception{
 38         Class.forName(drivername);//记载数据库驱动
 39         System.out.println("测试加载数据库驱动");
 40         //连接到数据库
 41         Connection con=DriverManager.getConnection(url, user, password);
 42         System.out.println("测试连接到数据库");
 43         return con;
 44     }
 45
 46     /***
 47      * 这个用来判断关闭数据库的方法
 48      * @param con 关闭Connection的连接
 49      * @param ps  关闭PreparedStatement
 50      * @param rs  关闭ResultSet
 51      */
 52     public static void getClose(Connection con,PreparedStatement ps,ResultSet rs){
 53         //关闭数据库,注意关闭的顺序。养成好习惯
 54         try{
 55             if(rs!=null){
 56                 rs.close();
 57             }
 58             if(ps!=null){
 59                 ps.close();
 60             }
 61             if(con!=null){
 62                 con.close();
 63             }
 64         }catch(Exception e){
 65             e.printStackTrace();
 66         }
 67     }
 68
 69     /***
 70      * 添加(插入)和更新(更改)可以提取公共的方法写在工具类中
 71      * 删除一般使用伪删除,这样删除就是更新(更改)操作,
 72      * 所以只有查询(查找)需要写更多的代码
 73      * @param sql 外面传来的sql语句
 74      * @param arr 外面传来的数组类型的,是用户信息封装到集合传递进来
 75      * @return 返回的是一个整形的数据类型
 76      */
 77     public static int addAndUpdate(String sql,Object[] arr){
 78         Connection con=null;
 79         PreparedStatement ps=null;
 80         try{
 81             con=DbUtils.getCon();//第一步连接数据库
 82             ps=con.prepareStatement(sql);//第二步预编译
 83             //第三步给sql语句中的参数复制
 84             for(int i=0;i<arr.length;i++){
 85                 ps.setObject(i+1, arr[i]);
 86             }
 87             //第四步执行sql并且返回。
 88             return ps.executeUpdate();
 89         }catch(Exception e){
 90             e.printStackTrace();
 91         }finally{
 92             //关闭资源,如果没有ResultSet类型的,加上null即可
 93             DbUtils.getClose(con, ps, null);
 94         }
 95         return 0;
 96     }
 97     /*public static void main(String[] args) {
 98         //我一般在写好连接数据库的工具类时先测试一下,避免连接数据库都失败,测试后可注释即可
 99         try {
100             DbUtils.getCon();
101             System.out.println("测试连接数据库终极版!!!");
102         } catch (Exception e) {
103             e.printStackTrace();
104         }
105     }*/
106 }

  5:执行工具类之后返回到service层(业务逻辑层),service层(业务逻辑层)返回到servlet层,删除的servlet层,删除的servlet层到提示信息层,提示信息层到查询的servlet层,查询的servlet层执行service层(业务逻辑层),service层(业务逻辑层)调用用户信息的dao层(数据交互层),dao层返回到service层(业务逻辑层),service层(业务逻辑层)返回到查询的servlet层,servlet层转发到userinfo_list.jsp这个显示用户信息的页面。至此伪删除操作全部完成,希望看到这个博客的明白这个执行的流程,思路明白,代码会写,这样就ok了。



 最后将演示的效果展示一下:

打开用户信息的页面:

点击删除之后查看第一行已经消失咯哦:

至此使用jsp+servlet完成用户信息的增删改查已经完结了,希望对大家有所帮助。后面会继续写图书的增删改查,但是图书的增删改查的代码和流程不再叙述,因为只是字段不一致而已,将介绍使用的小工具的具体用法,当写借书的时候再将用户借书的代码分享出来,那么整个合起来就完成了简易的图书管理系统。(每次代码的分享都是在原有基础上不断的增加,所以最后的代码分享肯定比开始的代码分享复杂合完整。)

时间: 2024-10-20 23:56:27

基于jsp+servlet图书管理系统之后台用户信息删除操作的相关文章

基于jsp+servlet图书管理系统之后台用户信息修改操作

上一篇的博客写的是查询操作,且附有源码和数据库,这篇博客写的时候修改操作,附有从头至尾写的代码(详细的注释)和数据库! 此次修改操作的源码和数据库:http://download.csdn.net/detail/biexiansheng/9732691 为了方便理解和说明,先写一下执行的流程和步奏,详细代码可以下载连接. 1:修改操作的执行流程: 1.1:修改操作需要先获取到用户信息的编号,然后才可以进行修改,脑子里一定有这个思路.故获取用户编号的操作即为查询操作.这里使用了一个小工具进行分页操

基于jsp+servlet图书管理系统之后台用户信息查询操作

上一篇的博客写的是查询操作,且附有源码和数据库,这篇博客写的时候查询操作,附有从头至尾写的代码(详细的注释)和数据库! 此次查询操作的源码和数据库:http://download.csdn.net/detail/biexiansheng/9732095 为了方便理解和说明,这里简单介绍一些执行的流程,方便理解.插入操作的执行流程和说明: 1:插入操作的执行流程如下 1.1:首先登录页面,设置默认的打开页面是login.jsp. <!-- 默认模仿的是登录界面login.jsp页面 -->  &

JSP + Servlet 图书管理系统

所用技术: JS+Servlet.bootstrap前端框架.JQuery Validate 验证框架.MySQL数据库: DAO 设计模式: 基于Servlet + JSP + JavaBean 的MVC设计模式. 小技术点:MD5加密操作,分页小脚本. 功能: 1.后台登录 超级管理员登录能看到超级管理员菜单(全局flag) 普通管理员登录 2.用户管理 用户录入 3.图书类别管理 添加分类 类别列表 4.图书管理 增加图书 图书列表 5.借书登记 借书信息录入 借书信息列表 数据库设计:

基于JSP+Servlet+JavaBean的人力资源管理系统开发课程

<基于JSP+Servlet+JavaBean的人力资源管理系统开发> 课程观看地址:http://www.xuetuwuyou.com/course/53 讲师:蒋子厚(http://www.xuetuwuyou.com/user/1984) 课程出自学途无忧网:http://www.xuetuwuyou.com 课程介绍 一.课程使用到的软件及对应的版本 1.jdk 1.7 2.tomcat 7.0 3.MySQL6.0+ 4.navicat 9 + 5.Macromedia Dreamw

基于JSP+Servlet+JavaBean的图片或文件上传

基于JSP+Servlet+JavaBean的图片或文件上传 一.概述 现在不管是博客论坛还是企业办公,都离不开资源的共享.通过文件上传的方式,与大家同分享,从而达到大众间广泛的沟通和交流,我们既可以从中获得更多的知识和经验,也能通过他人的反馈达到自我改进和提升的目的. 下面我就为大家介绍 web项目中的这一上传功能,那么文件是如何从本地发送到服务器的呢?大家可以在在线视频课程进修学习<基于JSP+Servlet+JavaBean的人力资源管理系统开发>中第22课-项目开发-其它功能完善-图片

基于JSP的餐饮管理系统纯jsp实现——计算机毕业设计

基于JSP的餐饮管理系统纯jsp实现基于jsp的web开发没涉及任何后台框架,适合刚学习J2EE的新手,代码思路清晰,注解详细,使用监听session 图表等等技术,餐饮管理系统,包括登录,查看订单,用户订餐,购物车,销量排行,菜品搜索,站内系统消息(互相交流),修改密码,业务记录,账户管理,菜单管理,个人信息等等操作.是一个非常不错的学习资料,作为课设毕设也是不错的选择.系统采用eclipse开发,mysql数据库存储数据,搭载在tomcat服务器上,是典型MVC架构,并且前后台分离,如果大家

基于SSM的图书管理系统(读者管理借阅管理)-java图书管理系统图书馆管理

基于SSM的图书管理系统(读者管理借阅管理)-java图书管理系统图书馆管理 1.包含源程序,数据库脚本.代码和数据库脚本都有详细注释.2.课题设计仅供参考学习使用,可以在此基础上进行扩展完善开发环境:Eclipse ,MYSQL,JDK1.7,Tomcat 7涉及技术点:MVC模式.SpringMvc.Mybatis.Spring.HTML.JavaScript.CSS.JQUERY.DWR.Ajax等系统采用Mybatis框架实现ORM对象关系映射,前台JSP实现,后台springMvc映射

图书商城(基于Jsp+Servlet)

这个项目主要是加深一下对于servlet和jsp知识相关的了解以及简单业务逻辑的处理. 用户更新的逻辑: 1.点击修改用户的那一行可以获取到用户的id 2.跳转到一个servlet,去查询该用户的基本信息 3.查询到后去到一个回显用户修改之前的基本信息的页面 4.用户点击修改完成,跳转一个servlet中去获取修改信息 5.信息修改格式是否正确去调用一个服务层的方法 6.正确到用户列表那一栏,错误到用户修改界面.  分页的实现: /** * 查询所有用户 * @return */ public

基于flask的图书管理系统-蓝图

基于flask的图书管理-- 蓝图方式 效果图, 只有基本的增删功能 目录 app 应用名 templates 存放模板, html之类的 book 用于区分html文件 index.html 主页展示 view 存放视图 __init__ 初始化蓝图 bookManage.py 视图函数 __init__ 这个是app的类 , 初始化文件 model.py 数据库模型 manage.py 启动 migrations 这个是flask-migrate生成的, 用于迁移数据库 requiremen