zoukankan      html  css  js  c++  java
  • 基于jsp+servlet图书管理系统之后台用户信息修改操作

    简易图书管理系统(主要是jsp+servlet的练习):https://blog.csdn.net/Biexiansheng/article/details/70240413

    免费提供源码,有偿提供服务,支持项目定制。


     为了方便理解和说明,先写一下执行的流程和步奏,详细代码可以下载连接。

      1:修改操作的执行流程:

        1.1:修改操作需要先获取到用户信息的编号,然后才可以进行修改,脑子里一定有这个思路。故获取用户编号的操作即为查询操作。这里使用了一个小工具进行分页操作,感兴趣的可以下载源码查看,当作练手使用也是灰常不错的选择。

          <d:column href="system/userinfoupdate" value="修改" title="修改"

                paramId="userId"  paramProperty="userId">      

          </d:column>
                     <!-- 这里提交到的是相对应的servlet的doSet方法里面 -->
              1.2:点击修改提交到system/userinfoupdate这个路径的servlet层。然后到了后台调用service业务逻辑层的getUser方法

          UserInfoService service=new UserInfoServiceImpl();
               //调用service业务逻辑层的getUser方法
               UserInfo userInfo=service.getUser(user);     

        1.3:然后业务逻辑层调用dao层(数据处理=层),return dao.getUser(user.getUserId());

        1.4:dao层(数据处理层)执行和数据库的连接等等操作之后执行 return user;//返回用户的信息

        1.5:service层执行return dao.getUser(user.getUserId());返回到servlet层 

        1.6:servlet层转发到 userinfo_update.jsp更新操作的jsp页面

          request.getRequestDispatcher("/view/system/userinfo/userinfo_update.jsp").forward(request, response);
          1.7:在更新页面没修改好之后就可以提交到system/userinfoupdate这个执行更新操作的servlet层的doPost方法。需要注意的是隐藏文本框是为了获取用户编号,一定要写,不然获取不到用户的编号,无法进行修改。

          <form action="system/userinfoupdate" class="form-horizontal" method="post">
                <input type="hidden" name="userId" value="${user.userId }"/>
          </form>  
       1.8:执行到这个修改的servlet层之后调用业务逻辑层的修改方法。

          UserInfoService service=new UserInfoServiceImpl();
                boolean mark=service.updateUser(user);

       1.9:service业务逻辑层(修改,插入,伪删除都是使用提出来的工具类的方法),所以调用工具类里面的方法。

          //添加和修改(伪删除)都可以调用工具类里面公共的方法。
                    int count=DbUtils.addAndUpdate(sql, list.toArray());
             2.0:工具类里面的方法执行之后返回执行的结果。return ps.executeUpdate();         

       2.1:又返回到了service层,将执行的true或者false结果返回到servlet层。

          //添加和修改(伪删除)都可以调用工具类里面公共的方法。
                    int count=DbUtils.addAndUpdate(sql, list.toArray());
                    if(count>0){
                        return true;
                    }else{
                        return false;
                    } 

        2.2:最后返回到了修改的servlet层

          boolean mark=service.updateUser(user);
                //判断最后返回值是否为true,如果为true,提示修改成功,否则提示修改失败
                if(mark){
                    request.setAttribute("info", "用户信息修改成功");
                }else{
                    request.setAttribute("info", "用户信息修改失败");
                }
                request.getRequestDispatcher("/view/system/userinfo/user_info.jsp").forward(request, response);
          2.3:判断上面的true或者false之后转发到user_info.jsp这个页面,这个页面用来提示信息

        2.4:提示信息之后又由js的window跳转到system/userinfoselect这个路径的servlet层。

          window.location="system/userinfoselect"; 

       2.5:  跳转到这个servlet层之后转发到userinfo_list.jsp这个页面。显示出修改之后的结果。完成修改操作 

          request.getRequestDispatcher("/view/system/userinfo/userinfo_list.jsp").forward(request, response);
         至此修改操作基本完成;


    下面将执行流程的重要代码写一下,希望对学习基于java开发的web方法的小伙伴有所帮助,也方便以后自行脑补。详细的代码可以去链接地址下载。 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                 
    60             </d:table>
    61         </div>
    62     </form>
    63 </body>
    64 </html>

       2:点击修改之后就到了修改的servlet层的doSet方法

     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/userinfoupdate")
    17 public class UserInfoUpdateServlety extends HttpServlet{
    18 
    19     private static final long serialVersionUID = 1L;
    20 
    21     @Override
    22     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    23         //将从表单中获取的数据封装到javabean的用户信息实体类中
    24         UserInfo user=RequestBeanUtils.requestToSimpleBean(request, UserInfo.class);
    25         UserInfoService service=new UserInfoServiceImpl();
    26         //调用service业务逻辑层的getUser方法
    27         UserInfo userInfo=service.getUser(user);
    28         //将返回的用户信息设置域中
    29         request.setAttribute("user", userInfo);
    30         //转发到更新用户信息的页面
    31         request.getRequestDispatcher("/view/system/userinfo/userinfo_update.jsp").forward(request, response);
    32     }
    33 
    34     @Override
    35     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    36         //将表单提交的数据封装到javabean中的实体类中
    37         UserInfo user=RequestBeanUtils.requestToSimpleBean(request, UserInfo.class);
    38         //调用业务逻辑层的更新的方法
    39         UserInfoService service=new UserInfoServiceImpl();
    40         boolean mark=service.updateUser(user);
    41         //判断最后返回值是否为true,如果为true,提示修改成功,否则提示修改失败
    42         if(mark){
    43             request.setAttribute("info", "用户信息修改成功");
    44         }else{
    45             request.setAttribute("info", "用户信息修改失败");
    46         }
    47         request.getRequestDispatcher("/view/system/userinfo/user_info.jsp").forward(request, response);
    48     }
    49     
    50     
    51 }

      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 1=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     
    135 }

       4:由于是查询操作,所以还需要写dao层(数据处理层),所以又执行到了dao层

      1 package com.bie.system.dao.impl;
      2 
      3 import java.sql.Connection;
      4 import java.sql.PreparedStatement;
      5 import java.sql.ResultSet;
      6 import java.util.ArrayList;
      7 import java.util.List;
      8 
      9 import com.bie.po.UserInfo;
     10 import com.bie.system.dao.UserInfoDao;
     11 import com.bie.utils.DbUtils;
     12 
     13 /***
     14  * 2.2:实现查询的接口
     15  * @author biehongli
     16  *
     17  */
     18 public class UserInfoDaoImpl implements UserInfoDao{
     19 
     20     @Override
     21     public List<UserInfo> selectUser(String sql, Object[] arr) {
     22         Connection con=null;
     23         PreparedStatement ps=null;
     24         ResultSet rs=null;
     25         List<UserInfo> list=null;
     26         try{
     27             con=DbUtils.getCon();//连接数据库
     28             ps=con.prepareStatement(sql);//预编译
     29             //为查询条件设置值,如为第一个设置为什么,为第二个设置为什么
     30             if(arr!=null && arr.length>0){
     31                 for(int i=0;i<arr.length;i++){
     32                     ps.setObject(i+1, arr[i]);
     33                 }
     34             }
     35             //执行sql语句
     36             rs=ps.executeQuery();
     37             list=new ArrayList<UserInfo>();
     38             //根据查询条件,从数据库匹配适合的条件,然后设置这个条件的全部信息
     39             while(rs.next()){
     40                 UserInfo user=new UserInfo();
     41                 user.setUserId(rs.getInt("user_id"));
     42                 user.setUserAccount(rs.getString("user_account"));
     43                 user.setUserPw(rs.getString("user_pw"));
     44                 user.setUserNumber(rs.getString("user_number"));
     45                 user.setUserName(rs.getString("user_name"));
     46                 user.setUserAge(rs.getInt("user_age"));
     47                 user.setUserSex(rs.getString("user_sex"));
     48                 //user.setUserMark(rs.getString("user_mark"));
     49                 //根据判断看是否是管理员或者普通会员
     50                 if("0".equals(rs.getString("user_mark"))){
     51                     user.setUserMark("普通会员");
     52                 }
     53                 if("1".equals(rs.getString("user_mark"))){
     54                     user.setUserMark("管理员");
     55                 }
     56                 //将user对象封装到集合中
     57                 list.add(user);
     58             }
     59             //将封装到集合中的查询条件返回
     60             return list;
     61         }catch(Exception e){
     62             e.printStackTrace();
     63         }finally{
     64             //关闭资源,避免出现问题
     65             DbUtils.getClose(con, ps, rs);
     66         }
     67         return null;
     68     }
     69 
     70     @Override
     71     public UserInfo getUser(Integer userId) {
     72         Connection con=null;
     73         PreparedStatement ps=null;
     74         ResultSet rs=null;
     75         try{
     76             String sql="select * from user_info where user_id=?";
     77             con=DbUtils.getCon();//连接数据库
     78             ps=con.prepareStatement(sql);//预编译
     79             ps.setInt(1, userId);//给参数设置值
     80             rs=ps.executeQuery();//执行sql语句
     81             while(rs.next()){
     82                 UserInfo user=new UserInfo();
     83                 user.setUserId(rs.getInt("user_id"));
     84                 user.setUserAccount(rs.getString("user_account"));
     85                 user.setUserPw(rs.getString("user_pw"));
     86                 user.setUserNumber(rs.getString("user_number"));
     87                 user.setUserName(rs.getString("user_name"));
     88                 user.setUserAge(rs.getInt("user_age"));
     89                 user.setUserSex(rs.getString("user_sex"));
     90                 if("0".equals(rs.getString("user_mark"))){
     91                     user.setUserMark("普通会员");
     92                 }
     93                 if("1".equals(rs.getString("user_mark"))){
     94                     user.setUserMark("管理员");
     95                 }
     96                 return user;//返回用户的信息
     97             }
     98         }catch(Exception e){
     99             e.printStackTrace();
    100         }finally{
    101             //关闭资源,避免出现异常
    102             DbUtils.getClose(con, ps, rs);
    103         }
    104         return null;
    105     }
    106 
    107     
    108 }

       5:执行到了dao层之后返回到service层(业务逻辑层),返回到service层之后servlet层,返回到servlet层之后又返回到userinfo_update.jsp页面。返回到这个页面开始修改,修改之后又提交到修改的servlet的doPost的这个方法。提交到servlet的方法之后又调用service层的修改的方法,修改的方法有调用工具类,由于代码都贴过了,这里介绍了一下执行流程,大家有个思路,这种小项目下去练练手就行了。

    最后到了user_info.jsp提示信息的页面,又由js的window转到了userinfo_list.jsp页面。最后修改完成。

      由于代码过多,这里强调的是执行流程,详细的代码设计可以下载源码和数据库自行脑补。


    下面简单看看执行的效果。(想想一个修改,执行起来。还TMD搞真复杂,哎,码农不容易啊!)

     用户管理界面的信息:

    点击修改之后的页面:需要注意的是账号设置为可读不可写,即不可修改。

    保存用户之后对比显示用户信息已经修改完成了。

    至此修改演示基本完毕,感兴趣的的可以下载源码看看。

  • 相关阅读:
    string与bytes相互转化
    python3之requests
    BeyondCompare3提示许可密钥过期完美解决方法
    windows环境下 curl 安装和使用
    Linux:PS命令详解与使用
    wireshark怎么抓包、wireshark抓包详细图文教程
    七层协议和四层协议
    linux中快速清空文件内容的几种方法
    python_02列表,字典,IO处理
    python_01
  • 原文地址:https://www.cnblogs.com/biehongli/p/6265476.html
Copyright © 2011-2022 走看看