基於jsp+servlet圖書管理系統以後臺用戶信息修改操做

簡易圖書管理系統(主要是jsp+servlet的練習):https://blog.csdn.net/Biexiansheng/article/details/70240413javascript

免費提供源碼,有償提供服務,支持項目定製。css


 爲了方便理解和說明,先寫一下執行的流程和步奏,詳細代碼能夠下載鏈接。html

  1:修改操做的執行流程:java

    1.1:修改操做須要先獲取到用戶信息的編號,而後才能夠進行修改,腦子裏必定有這個思路。故獲取用戶編號的操做即爲查詢操做。這裏使用了一個小工具進行分頁操做,感興趣的能夠下載源碼查看,看成練手使用也是灰常不錯的選擇。jquery

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

            paramId="userId"  paramProperty="userId">      sql

      </d:column>
                 <!-- 這裏提交到的是相對應的servlet的doSet方法裏面 -->
          1.2:點擊修改提交到system/userinfoupdate這個路徑的servlet層。而後到了後臺調用service業務邏輯層的getUser方法
數據庫

      UserInfoService service=new UserInfoServiceImpl();
           //調用service業務邏輯層的getUser方法
           UserInfo userInfo=service.getUser(user);     
bootstrap

    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搞真複雜,哎,碼農不容易啊!)

 用戶管理界面的信息:

點擊修改以後的頁面:須要注意的是帳號設置爲可讀不可寫,即不可修改。

保存用戶以後對比顯示用戶信息已經修改完成了。

至此修改演示基本完畢,感興趣的的能夠下載源碼看看。

相關文章
相關標籤/搜索