jsp+servlet+Tomcat+mysql實現用戶注冊、登錄、查看、修改實例之——信息修改


學習javaWeb,首先要學習基礎的jsp,servlet,弄通了機制然后就得心應手了。我們來實現一個簡單的實例來學習。


我們的任務有:1.數據庫及表創建

       2.實現用戶注冊

       3.實現用戶登錄

       4.實現用戶列表顯示

       5.實現用戶刪除

       6.實現用戶信息查看

       7.實現用戶信息修改


上節完成了用戶信息的查看,本節來繼續實現信息修改,這節相對復雜些。

七、用戶信息修改

  用戶信息修改是實現,當用戶點擊修改按鈕,會跳轉到用戶信息修改頁面中,並且初始顯示着數據庫中的信息,而且能夠提供用戶修改和保存的功能。

  其中最難得當屬,將數據庫中的信息初始到修改頁面。

  需要實現的任務有:

        1.寫跳轉servlet

        2.寫修改頁面

        3.寫修改方法

1.跳轉Servlet

  當用戶點擊修改按鈕,超鏈接會將詞條數據提交給servlet處理

1 <td><a href="servlet/ServletToUserUpdate?userId=<%=user.getUserId() %>">修改</a></td>

  (注:頁面詳細代碼,請參見:用戶列表顯示頁面代碼

  用超鏈接的方式提交給ServletToUserUpdate.java 中的doGet(),並且傳遞過去userId

  調用UserDaoselectOneUserInfo()方法,將查詢結果返回給userupdate.jspServletToUserUpdate.javadoGet()方法如下:

 1 public void doGet(HttpServletRequest request, HttpServletResponse response)
 2             throws ServletException, IOException {
 3 
 4         int userId = Integer.parseInt(request.getParameter("userId"));
 5         UserDao userDao = new UserDao();
 6         UserVo user = userDao.selectOneUserInfo(userId);
 7         
 8         request.setAttribute("user", user);
 9         request.getRequestDispatcher("/userupdate.jsp").forward(request, response);
10     }

2.信息修改頁面

  用戶修改頁面中初始要顯示數據庫中的數據,對於不同的表單項有不同的初始化操作,效果圖如下:

 

userupdate.jsp頁面代碼如下:

 1 <form name="myform" action ="servlet/ServletToUserUpdate" method="post">
 2     <table border = "1" align = "center" style="border-collapse:collapse;">
 3         <tr>             <!-- 黃色部分代碼是為了數據修改的時候使用 ->
 4             <td colspan="2">用戶修改<input type="hidden" name="userId" value='<%=user.getUserId() %>'/></td>           
 5         </tr>
 6         <tr>
 7             <td>用戶名</td>
 8             <td class="tdstyle2"><input type="text" name="userName" value='<%=user.getUserName() %>'/></td>    
 9         </tr>
10         <tr>
11             <td>密 碼</td>
12             <td><input type="text" name="userPassword" value='<%=user.getUserPassword() %>'/></td>            
13         </tr>
14         <tr>
15             <td>地 址</td>
16             <td>
17                 <select name="userProvince" id="userProvince" onchange="addCity()"></select>18                 <select name="userCity" id="userCity"></select>19             </td>
20         </tr>
21         <tr>
22             <td>性 別</td>
23             <td>
24                 <input type="radio" id = "man" name="userSex" value="男" checked="checked" />25                 <input type="radio" id = "woman"name="userSex" value="女" />26             </td>        
27         </tr>
28         <tr>
29             <td>愛 好</td>
30             <td>
31                 <input type="checkbox" name="userHobby" value="籃球" />籃球
32                 <input type="checkbox" name="userHobby" value="足球" />足球
33                 <input type="checkbox" name="userHobby" value="羽毛球" />羽毛球
34                 <input type="checkbox" name="userHobby" value="跑步" />跑步
35             </td>         
36         </tr>
37         <tr>
38             <td style="height:100px;"><br/><br/><br/></td>
39             <td>
40                 <textarea cols="10" rows="3" name="userDescribe"><%=user.getUserDescribe() %></textarea>
41             </td>    
42         </tr>
43         <tr>
44             <td colspan="2"><input type = "submit" value = "修改" /></td>          
45         </tr>
46     </table>
47     </form>

上面的代碼中已經對:userNameuserPassworduserDescribe進行了數據同步操作,

下面來對省份性別愛好進行數據初始化

省份同步數據的時候可以在循環生成option的時候進行判斷,選擇相同的省份和城市,操作如下:

 1 var proArry = [ "河南", "河北", "山東" ];
 2 var cityArray = [ [ "鄭州", "南陽", "洛陽" ], [ "石家庄", "邯鄲", "邢台" ],[ "濟南", "青島", "煙台" ] ];
 3 //定義城市,省份數組
 4 function addProvince() {
 5 //增減省份數據
 6         var proObj = document.getElementById("userProvince");
 7     //得到省份對象
 8 
 9     for ( var i = 0; i < proArry.length; i++) {
10 
11         var newOption = new Option();
12         newOption.value = proArry[i];
13         newOption.innerHTML = proArry[i];
14         proObj.options.add(newOption);
15         if('<%=user.getUserProvince() %>'==proArry[i]){ 16             proObj.options[i].selected=true; 17         }
18     }
19         addCity();
20 }
21 function addCity() {
22 
23     var proObjSelected = document.getElementById("userProvince").selectedIndex;
24     var cityObj = document.getElementById("userCity");
25     cityObj.length = 0;
26   for ( var i = 0; i < cityArray.length; i++) {
27 
28       var newOption = new Option();
29       newOption.value = cityArray[proObjSelected][i];
30       newOption.innerHTML = cityArray[proObjSelected][i];
31       cityObj.options.add(newOption);
32       if('<%=user.getUserCity() %>'==cityArray[proObjSelected][i]){ 33           cityObj.options[i].selected=true; 34       }
35     }
36 }        

 性別同步是拿數據庫中的值與前台相比,如果相同,選中。

1 function setValue(){
2          if('<%= user.getUserSex() %>'=="男"){
3              document.getElementById("man").checked="checked";
4          }else{
5              document.getElementById("woman").checked="checked";
6          }
7         
8     }

其中比較繞的是愛好的選中,因為數據庫中的愛好是一個字符串,前台頁面是幾個checkbox框,如何選中呢?

我們可以將字符串截取為包含幾個元素的集合,然后循環遍歷,與checkbox集合比較,相同則選中。

 1 function setHob(){
 2         
 3         var objHobby = document.getElementsByName("userHobby");
 4         
 5         var hobbyStr = '<%=user.getUserHobby()%>';
 6         var hob = hobbyStr.split(",")  ;
 7     
 8         for(var i =0;i<objHobby.length ;i++ ){
 9             
10             for(var j = 0; j<hob.length ; j++ ){
11                 
12                 if(hob[j] == objHobby[i].value){
13                     objHobby[i].checked = "checked";    
14                 }
15             }
16             
17         }
18     }

當用戶修改完信息,點擊修改按鈕之后,數據會被提交到ServletToUserUpdate.java 的doPost()中,servlet得到前台頁面信息之后,轉存VO對象中,這部分代碼如同注冊

省略不寫(詳見:.注冊servlet),然后調用UserDao中的方法。

1      UserDao userDao = new UserDao();
2         userDao.updateUser(user);
3         
4         ArrayList<UserVo> list=userDao.selectNotDeleteList();
5         request.setAttribute("list", list);
6         request.getRequestDispatcher("/userlist.jsp").forward(request, response);

3.修改方法updateUser(UserVo user)

 1 public void updateUser(UserVo user) {
 2         Dbmanage dbmanage = new Dbmanage();
 3         Connection conn = null;
 4         Statement sta = null;
 5 
 6         try {
 7             conn = dbmanage.initDB();
 8             sta = conn.createStatement();
 9             String sql = "UPDATE  userTable SET user_name= '"
10                     + user.getUserName() + "', user_password= '"
11                     + user.getUserPassword() + "', user_province= '"
12                     + user.getUserProvince() + "', user_city= '"
13                     + user.getUserCity() + "', user_sex= '" + user.getUserSex()
14                     + "', user_hobby= '" + user.getUserHobby()
15                     + "', user_describe= '" + user.getUserDescribe()
16                     + "' WHERE user_id= " + user.getUserId();
17             System.out.println(sql);
18             sta.executeUpdate(sql);
19             System.out.println("update success");
20         } catch (SQLException e) {
21 
22             e.printStackTrace();
23         } finally {
24             // 執行完關閉數據庫
25             dbmanage.closeDB(sta, conn);
26         }
27 
28     }


到這里,這個簡單的工程實例就算是做完了,但是其中還仍有許多的不足,由於是入門級實例,先這樣吧,慢慢提高吧~!


鏈接導航   1.數據庫及表創建

       2.實現用戶注冊

       3.實現用戶登錄

       4.實現用戶列表顯示

       5.實現用戶刪除

       6.實現用戶信息查看

       7.實現用戶信息修改


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM