軟體工程概論 第一課:課後作業1

我命傾塵發表於2017-11-23
一、網站系統開發需要掌握的技術;
1、介面和使用者體驗:

  ①要了解Web在各大瀏覽器的執行情況,必須保證站點在主要瀏覽器上都能正常執行。至少要測試Gecko、Webkit、IE和Opera等引擎。不同的作業系統,可能也會影響瀏覽器如何呈現網站。除了瀏覽器,網站還有其他使用方式:手機、搜尋引擎等等。應該充分了解這些情況下,網站的執行狀況。

  ②知道怎麼能在基本不影響使用者使用的情況下升級網站。通常來說,必須有版本控制系統和資料備份機制。

  ③保密性,不要直接顯示使用者的Email地址和各項資訊,至少不要用純文字顯示。

  ④作為一個友好的網站,不要讓使用者看到那些不友好的出錯提示。

  ⑤為你的網站設定一些合理的使用限制,一旦超過門檻值,就自動停止服務,這與網站安全相關。

  ⑥知道如何實現網頁的漸進式增強。

  ⑦使用者發出POST請求後,總是將其重導向至另外一個網頁。

  ⑧不要忘記網站的可訪問性,比如要考慮殘疾人如何使用網站。

2、安全性:

  ①閱讀《OWASP開發指南》,它提供了全面的網站安全指導。

  ②永遠不要信任使用者提交的資料

  ③瞭解SQL隱碼攻擊及其預防方法,做好安全措施,防止資訊洩露。

  ④不要明文儲存使用者的密碼,要hash處理後再儲存。

  ⑤不要對你的使用者認證系統太自信,它可能很容易就被攻破,並不是那麼安全,總會有人去找出一些漏洞,要提早意識到這個問題。

  ⑥在登入頁面及其他處理敏感資訊的頁面,使用SSL、HTTPS。

  ⑦瞭解如何處理信用卡。

  ⑧要了解如何對付session劫持。

  ⑨避免“跨站點執行”。

  ⑩避免“跨域偽造請求”。

  除此之外,還有一些要注意的地方:

  及時打上補丁,讓系統始終跟上最新版本。確認資料庫連線資訊的安全性。跟蹤攻擊技術的最新發展,以及使用的平臺的最新安全漏洞。閱讀Google的《瀏覽器安全手冊》。閱讀《網路軟體的黑客手冊》。

3、效能:

  ①只要有可能,就使用快取。要正確理解和使用Http caching與HTML5離線儲存。

  ②優化圖片。不要把一個圖片檔案,作為重複出現的網頁背景圖案。

  ③學習如何用gzip和deflate內容。

  ④將多個樣式表檔案或指令碼檔案,合為一個檔案,這樣可以減少瀏覽器的http請求數,以及減小gzip壓縮後的檔案總體積。

  ⑤如果你的網頁用到大量的小體積圖片(比如工具欄),就應該使用Css image script,目的是減少http請求數。

  ⑥大流量的網站應該考慮將網頁物件分佈在多個域名。

  ⑦靜態內容都應該放在一個不需要使用cookie的獨立域名之上。因為域名之下如果有,那麼客戶端向該域名發出的每次http請求,都會附上cookie內容。這裡的一個好方法就是使用"內容分發網路"。

  ⑧將瀏覽器完成網頁渲染所需要的http請求數最小化。

  ⑨使用Google的Closure Complier壓縮JavaScript檔案,YUI Compresser亦可。

  ⑩確保網站根目錄下有favicon.ico檔案,因為即使網頁中根本不包括這個檔案,瀏覽器也會自動發出對它的請求。如果這個檔案不存在,就會產生大量的404錯誤,消耗光伺服器的頻寬。

4、搜尋引擎優化:

  ①使用"搜尋引擎友好"的URL形式,比如example.com/pages/45-article-title,而不是example.com/index.php?page=45。

  ②不要使用"點選這裡"之類的超級連結,因為這樣等於浪費了一個SEO機會,而且降低了"螢幕朗讀器"的使用效果。

  ③建立一個XML sitemap檔案,它的預設位置一般是/sitemap.xml(即放在網站根目錄下)。

  ④當你有多個URL指向同一個內容時,在網頁程式碼中使用<link rel ="canonical ".../>。

  ⑤使用Google的 Webmaster  Tools和Yahoo的 Site Explorer。

  ⑥從一開始就使用Google Analyties。

  ⑦知道robots.txt的作用,以及搜尋引擎蜘蛛的工作原理。

  ⑧將www.example.com的訪問請求導向example.com,或者採用相反的做法,目的是防止Google把它們當做兩個網站,分開計算排名。

  ⑨知道存在著惡意或行為不正當的網路蜘蛛。

  ⑩如果網站有非文字的內容(比如視訊、音訊等等),你應該參考Google的sitemap擴充套件協議。

5、技術:

  ①理解HTTP協議,諸如GET、POST、sessions、cookies之類的概念,包括"無狀態"是什麼意思。

  ②確保XHTML和HTML和CSS符合W3C標準,使得它們能夠通過檢驗。這可以使網頁避免觸發瀏覽器的古怪行為,而且使它在"螢幕朗讀器"和手機上也能正常工作。

  ③理解瀏覽器如何處理JavaScript指令碼。

  ④理解網頁上的JavaScript檔案、樣式表檔案和其他資源是如何裝載及執行的,考慮它們對頁面效能有何影響。在某些情況下,可能應該將指令碼檔案放置在網頁的尾部。

  ⑤理解JavaScript沙箱的工作原理,尤其是如果打算使用iframe。

  ⑥瞭解301重定向和302重定向之間的區別(這也是一個SEO相關問題)。

  ⑦知道JavaScript可能無法使用或被禁用,以及Ajax並不是一定會執行。"不允許指令碼執行"正在某些使用者中變得流行,手機瀏覽器對指令碼的支援千差萬別,而Google索引網頁時不執行大部分的指令碼檔案。

  ⑧儘可能多得了解部署平臺。

  ⑨考慮使用樣式表重置。

  ⑩考慮使用JavaScript框架,使用它們可以不用考慮瀏覽器之間的差異。

6、解決bug:

  ①建立一個有效的錯誤報告機制。

  ②程式設計師20%的時間用於編碼,80%的時間用於維護,根據這一點相應合理的安排時間。

  ③建立某些途徑或系統,讓使用者可以與後臺接觸,提出建議和批評。

  ④為將來的維護和客服人員撰寫文件,解釋清楚系統是怎麼執行的。

  ⑤除了備份機制,你還必須有一個恢復機制。

  ⑥使用某種版本控制系統儲存你的檔案,比如Subversion或Git。

  ⑦不要忘記做單元測試,Selenium之類的框架會有用。

二、本次課堂測試的源程式程式碼:

IUserDao.java:

 1 package com.user.gb.dao;
 2 import java.util.List;
 3 import com.user.gb.model.User;
 4 public interface IUserDao 
 5 {
 6     public void add(User user);
 7     public void delete(String username);
 8     public void update(User user);
 9     public User load(int id);
10     public User load(String username);
11     public List<User> load();
12 }        

UserDaoImpl.java:

  1 package com.user.gb.dao;
  2 import java.sql.Connection;
  3 import java.sql.PreparedStatement;
  4 import java.sql.ResultSet;
  5 import java.sql.SQLException;
  6 import java.util.ArrayList;
  7 import java.util.List;
  8 import com.user.gb.Util.GBUtil;
  9 import com.user.gb.model.User;
 10 import com.user.gb.model.UserException;
 11 public class UserDaoImpl implements IUserDao
 12 {
 13     public void add(User user) 
 14     {
 15         Connection connection=GBUtil.getConnection();
 16         String sql="select count(*) from xinxi where username=?";
 17         PreparedStatement preparedStatement=null;
 18         ResultSet resultSet=null;
 19         try 
 20         {
 21             preparedStatement=connection.prepareStatement(sql);
 22             preparedStatement.setString(1, user.getUsername());
 23             resultSet=preparedStatement.executeQuery();
 24             while(resultSet.next())
 25             {
 26                 if(resultSet.getInt(1)>0)
 27                 {
 28                     throw new UserException("使用者名稱已存在!");
 29                 }
 30             }
 31         } 
 32         catch (SQLException e)
 33         {
 34             // TODO Auto-generated catch block
 35             e.printStackTrace();
 36         }
 37         sql="insert into xinxi(username,password) value(?,?)";
 38         try
 39         {
 40             preparedStatement=connection.prepareStatement(sql);
 41             preparedStatement.setString(1, user.getUsername());
 42             preparedStatement.setString(2, user.getPassword());
 43             preparedStatement.executeUpdate();
 44         } 
 45         catch (SQLException e) 
 46         {
 47             // TODO Auto-generated catch block
 48             e.printStackTrace();
 49         }
 50         finally
 51         {
 52             GBUtil.close(connection);
 53             GBUtil.close(preparedStatement);
 54             GBUtil.close(resultSet);
 55         }
 56     }
 57     @Override
 58     public void delete(String username) 
 59     {
 60         Connection connection=GBUtil.getConnection();
 61         String sql="delete from xinxi where username = ?";
 62         PreparedStatement preparedStatement=null;
 63         try 
 64         {
 65             preparedStatement=connection.prepareStatement(sql);
 66             preparedStatement.setString(1, username);
 67             preparedStatement.executeUpdate();
 68         } 
 69         catch (SQLException e) 
 70         {
 71             e.printStackTrace();
 72         }
 73         finally
 74         {
 75             GBUtil.close(connection);
 76             GBUtil.close(preparedStatement);
 77         }
 78     }
 79     public void update(User user) 
 80     {
 81         Connection connection=GBUtil.getConnection();
 82         String sql="update xinxi set password = ? where username = ?";
 83         PreparedStatement preparedStatement=null;
 84         try
 85         {
 86             preparedStatement=connection.prepareStatement(sql);
 87             preparedStatement.setString(1, user.getPassword());
 88             preparedStatement.setString(2, user.getUsername());
 89             preparedStatement.executeUpdate();
 90         } 
 91         catch (SQLException e) 
 92         {
 93             e.printStackTrace();
 94         }
 95         finally
 96         {
 97             GBUtil.close(connection);
 98             GBUtil.close(preparedStatement);
 99         }
100     }
101     public User load(int id) 
102     {
103         Connection connection=GBUtil.getConnection();
104         String sql="select * from xinxi where id=?";
105         User user=null;
106         PreparedStatement preparedStatement=null;
107         ResultSet resultSet=null;
108         try 
109         {
110             preparedStatement=connection.prepareStatement(sql);
111             preparedStatement.setInt(1, id);
112             resultSet=preparedStatement.executeQuery();
113             while(resultSet.next())
114             {
115                 user=new User();
116                 user.setId(id);
117                 user.setUsername(resultSet.getString("username"));
118                 user.setPassword(resultSet.getString("password"));
119             }
120         } 
121         catch (SQLException e) 
122         {
123             e.printStackTrace();
124         }
125         finally
126         {
127             GBUtil.close(connection);
128             GBUtil.close(preparedStatement);
129             GBUtil.close(resultSet);
130         }
131         return user;
132     }
133     public User load(String username) 
134     {
135         Connection connection=GBUtil.getConnection();
136         String sql="select * from xinxi where username=?";
137         User user=null;
138         PreparedStatement preparedStatement=null;
139         ResultSet resultSet=null;
140         try 
141         {
142             preparedStatement=connection.prepareStatement(sql);
143             preparedStatement.setString(1, username);
144             resultSet=preparedStatement.executeQuery();
145             while(resultSet.next())
146             {
147                 user=new User();
148                 user.setId(resultSet.getInt("id"));
149                 user.setUsername(username);
150                 user.setPassword(resultSet.getString("password"));
151             }
152         } 
153         catch (SQLException e) 
154         {
155             e.printStackTrace();
156         }
157         finally
158         {
159             GBUtil.close(connection);
160             GBUtil.close(preparedStatement);
161             GBUtil.close(resultSet);
162         }
163         return user;
164     }
165     public List<User> load() 
166     {
167         Connection connection=GBUtil.getConnection();
168         String sql="select * from xinxi ";
169         PreparedStatement preparedStatement=null;
170         ResultSet resultSet=null;
171         List<User> users=new ArrayList<User>();
172         User user=null;
173         try
174         {
175             preparedStatement=connection.prepareStatement(sql);
176             resultSet=preparedStatement.executeQuery();
177             while(resultSet.next())
178             {
179                 user=new User();
180                 user.setId(resultSet.getInt("id"));
181                 user.setUsername(resultSet.getString("username"));
182                 user.setPassword(resultSet.getString("password"));
183                 users.add(user);
184             }
185         }
186         catch (SQLException e) 
187         {
188             e.printStackTrace();
189         }
190         finally
191         {
192             GBUtil.close(connection);
193             GBUtil.close(preparedStatement);
194             GBUtil.close(resultSet);
195         }
196     return users;
197     }
198 }                                                    

User.java:

 1 package com.user.gb.model;
 2 public class User 
 3 {
 4     private int id;
 5     private String username;
 6     private String password;
 7     public int getId() 
 8     {
 9         return id;
10     }
11     public void setId(int id) 
12     {
13         this.id = id;
14     }
15     public String getUsername()
16     {
17         return username;
18     }
19     public void setUsername(String username) 
20     {
21         this.username = username;
22     }
23     public String getPassword() 
24     {
25         return password;
26     }
27     public void setPassword(String password) 
28     {
29         this.password = password;
30     }
31 }    

UserException.java:

 1 package com.user.gb.model;
 2 public class UserException extends RuntimeException
 3 {
 4     public UserException() 
 5     {
 6         super();
 7     }
 8     public UserException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) 
 9     {
10         super(message, cause, enableSuppression,         writableStackTrace);
11     }
12     public UserException(String message, Throwable cause) 
13     {
14         super(message, cause);
15     }
16     public UserException(String message) 
17     {
18         super(message);
19     }
20     public UserException(Throwable cause) 
21     {
22         super(cause);
23     }
24 }    

GBUtil.java:

 1 package com.user.gb.Util;
 2 import java.sql.Connection;
 3 import java.sql.DriverManager;
 4 import java.sql.PreparedStatement;
 5 import java.sql.ResultSet;
 6 import java.sql.SQLException;
 7 public class GBUtil 
 8 {
 9     public static Connection getConnection()
10     {
11         try
12         {
13             Class.forName("com.mysql.jdbc.Driver");
14         }
15         catch(ClassNotFoundException e)
16         {
17             e.printStackTrace();
18         }
19         String url="jdbc:mysql://localhost:3306/denglu?useSSL=false";
20         Connection connection=null;
21         try 
22         {
23             connection=DriverManager.getConnection(url, "root", "242772");
24         } 
25         catch (SQLException e) 
26         {
27             // TODO Auto-generated catch block
28             e.printStackTrace();
29             System.out.println("資料庫連線失敗");
30         }
31         return connection;
32     }
33     public static void close(Connection connection)
34     {
35         try
36         {
37             if(connection!=null)
38             {
39                 connection.close();
40             }
41         }
42         catch(SQLException e)
43         {
44             e.printStackTrace();
45         }
46     }
47     public static void close(PreparedStatement preparedStatement)
48     {
49         try
50         {
51             if(preparedStatement!=null)
52             {
53                 preparedStatement.close();
54             }
55         }
56         catch(SQLException e)
57         {
58             e.printStackTrace();
59         }
60     }
61     public static void close(ResultSet resultSet)
62     {
63         try
64         {
65             if(resultSet!=null)
66             {
67                 resultSet.close();
68             }
69         }
70         catch(SQLException e)
71         {
72             e.printStackTrace();
73         }
74     }
75 }            

add.jsp:

 1 <%@page import="com.user.gb.dao.UserDaoImpl"%>
 2 <%@page import="com.user.gb.model.User"%>
 3 <%@page import="com.user.gb.model.UserException"%>
 4 <%@page import="com.user.gb.Util.GBUtil"%>
 5 <%@ page language="java" contentType="text/html; charset=UTF-8"
 6 pageEncoding="UTF-8"%>
 7 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 8 <html>
 9 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
10 <%
11     String username=request.getParameter("username");
12     String password=request.getParameter("password");
13     String repassword=request.getParameter("repassword");
14     if(username==null||"".equals(username.trim()))
15     {
16         request.setAttribute("error","使用者名稱不能為空!");
17 %>
18     <jsp:forward page="addInput.jsp"></jsp:forward>
19 <%
20     }
21     if(password==null||"".equals(password.trim()))
22     {
23     request.setAttribute("error","密碼不能為空!");
24 %>
25     <jsp:forward page="addInput.jsp"></jsp:forward>
26 <%
27     }
28     if(repassword==null||"".equals(repassword.trim()))
29     {
30 request.setAttribute("error","再次輸入密碼以示確認!");
31 %>
32     <jsp:forward page="addInput.jsp"></jsp:forward>
33 <%
34     }
35     if(!password.trim().equals(repassword.trim()))
36     {
37         request.setAttribute("error","兩次輸入的密碼不一致。請確認後再進行操作!");
38 %>
39     <jsp:forward page="addInput.jsp"></jsp:forward>
40 <%
41     }
42     User user=new User();
43     user.setUsername(username);
44     user.setPassword(password);
45     UserDaoImpl userDao=new UserDaoImpl();
46     try
47     {
48         userDao.add(user);
49 %>
50     <h2 style="color:blue">使用者儲存成功!</h2>
51 <%
52     }
53     catch(UserException e)
54     {
55 %>
56     <h2 style="color:red">error:<%=e.getMessage() %></h2>
57 <%
58     }
59 %> 
60 </html>

addInput.jsp:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2 pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>使用者註冊</title>
 8 </head>
 9 <body>
10     <form action="add.jsp" method="get">
11         <table align="center" border="2" width="500">
12             <tr>
13                 <td>使用者名稱:</td>
14                 <td>
15                     <input type="text" name="username" />
16                 </td>
17             </tr>
18             <tr>
19                 <td>密碼:</td>
20                 <td>
21                     <input type="password" name="password" />
22                 </td>
23             </tr>
24             <tr>
25                 <td>確認密碼:</td>
26                 <td>
27                     <input type="password" name="repassword" />
28                 </td>
29             </tr>
30             <tr align="center">
31                 <td colspan="2">
32                     <input type="submit" value="提交" />
33                     <input type="reset" value="重置" />
34                 </td>
35             </tr>
36         </table>
37     </form>
38 <br>
39 <%
40     if(request.getAttribute("error")!=null)
41     {
42 %>
43     <h2 align="center" style="color:red">        <%=request.getAttribute("error") %></h2>
44 <%
45     }
46 %>
47 </body>
48 </html>        

delete.jsp:

 1 <%@page import="com.user.gb.dao.UserDaoImpl"%>
 2 <%@page import="com.user.gb.model.User"%>
 3 <%@page import="com.user.gb.model.UserException"%>
 4 <%@page import="com.user.gb.Util.GBUtil"%>
 5 <%@ page language="java" contentType="text/html; charset=UTF-8"
 6 pageEncoding="UTF-8"%>
 7 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 8 <html>
 9 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
10 <%
11     String username=request.getParameter("username");
12     String password=request.getParameter("password");
13     UserDaoImpl userDao=new UserDaoImpl();
14     User user=null;
15     user=userDao.load(username); 
16     if(user==null)
17     {
18         request.setAttribute("error", "您要刪除的使用者不存在");
19 %>
20     <jsp:forward page="deleteInput.jsp"></jsp:forward>
21 <%
22     }
23     if(!user.getPassword().equals(password))
24     {
25         request.setAttribute("error", "您輸入的密碼不正確,無權刪除該使用者!");
26 %>
27     <jsp:forward page="deleteInput.jsp"></jsp:forward>
28 <%
29     }
30     userDao.delete(username);
31 %>
32     <h2 align="center" style="color:blue">學號為<%=user.getUsername() %>的使用者已經被刪除!</h2><br>
33 </html>

deleteInput.jsp:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2 pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>使用者刪除</title>
 8 </head>
 9 <body>
10     <form action="delete.jsp" method="get">
11         <table align="center" border="2" width="500">
12             <tr>
13                 <td>請輸入要刪除的使用者名稱:</td>
14                 <td>
15                     <input type="text" name="username" />
16                 </td>
17             </tr>
18             <tr>
19                 <td>該使用者的密碼為:</td>
20                 <td>
21                     <input type="password" name="password" />
22                 </td>
23             </tr>
24             <tr align="center">
25                 <td colspan="2">
26                     <input type="submit" value="刪除" />
27                 </td>
28             </tr>
29         </table>
30     </form>
31 <br>
32 <%
33     if(request.getAttribute("error")!=null)
34     {
35 %>
36     <h2 align="center" style="color:red">    <%=request.getAttribute("error") %></h2>
37 <%
38     }
39 %>
40 </body>
41 </html>

select.jsp:

 1 <%@page import="com.user.gb.dao.UserDaoImpl"%>
 2 <%@page import="com.user.gb.model.User"%>
 3 <%@page import="com.user.gb.model.UserException"%>
 4 <%@page import="com.user.gb.Util.GBUtil"%>
 5 <%@ page language="java" contentType="text/html; charset=UTF-8"
 6 pageEncoding="UTF-8"%>
 7 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 8 <html>
 9 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
10 <title>搜尋</title>
11 </head>
12 <%
13     String username=request.getParameter("username");
14     if(username==null||"".equals(username.trim()))
15     {
16         request.setAttribute("error", "查詢內容不能為空!");
17 %>
18     <jsp:forward page="selectInput.jsp"></jsp:forward>
19 <%
20     }
21     User user=null;
22     UserDaoImpl userDao=new UserDaoImpl();
23     user=userDao.load(username);
24     if(user==null)
25     {
26         request.setAttribute("error", "您查詢的使用者不存在!");
27 %>
28     <jsp:forward page="selectInput.jsp"></jsp:forward>
29 <%
30     }
31 else
32     {
33 %>
34     <h2 align="center" style="color:blue">查詢結果為:編號:    <%=user.getId() %>學號:<%=user.getUsername() %>密碼:    <%=user.getPassword() %></h2>
35 <%
36     }
37 %>
38 </html>

selectInput.jsp:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2 pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>使用者搜尋</title>
 8 </head>
 9     <form action="select.jsp" method="get">
10         <table align="center" border="2" width="500">
11             <tr>
12                 <td>請輸入您要搜尋的使用者名稱:</td>
13                 <td>
14                     <input type="text" name="username" />
15                 </td> 
16             </tr>
17             <tr align="center">
18                 <td colspan="2">
19                     <input type="submit" value="查詢" />
20                 </td>
21             </tr> 
22         </table>
23     </form>
24 <%
25     if(request.getAttribute("error")!=null)
26     {
27 %>
28     <h2 align="center" style="color:red"><%=request.getAttribute("error") %></h2>
29 <%
30     }
31 %>
32 </html>

update.jsp:

 1 <%@page import="com.user.gb.dao.UserDaoImpl"%>
 2 <%@page import="com.user.gb.model.User"%>
 3 <%@page import="com.user.gb.model.UserException"%>
 4 <%@page import="com.user.gb.Util.GBUtil"%>
 5 <%@ page language="java" contentType="text/html; charset=UTF-8"
 6 pageEncoding="UTF-8"%>
 7 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 8 <html>
 9 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
10 <%
11     String username=request.getParameter("username");
12     String password=request.getParameter("password");
13     String newpassword=request.getParameter("newpassword");
14     String newrepassword=request.getParameter("newrepassword");
15     if(username==null||"".equals(username.trim()))
16     {
17         request.setAttribute("error","請輸入要修改的使用者名稱!");
18 %>
19     <jsp:forward page="updateInput.jsp"></jsp:forward>
20 <%
21     }
22     if(password==null||"".equals(password.trim()))
23     {
24         request.setAttribute("error","原密碼不能為空!!");
25 %>
26     <jsp:forward page="updateInput.jsp"></jsp:forward>
27 <%
28     }
29     if(newpassword==null||"".equals(newpassword.trim()))
30     {
31         request.setAttribute("error","新密碼不能為空!");
32 %>
33     <jsp:forward page="updateInput.jsp"></jsp:forward>
34 <%
35     }
36     if(newrepassword==null||"".equals(newrepassword.trim()))
37     {
38         request.setAttribute("error","必須再次輸入新密碼,以免出現錯誤!");
39 %>
40     <jsp:forward page="updateInput.jsp"></jsp:forward>
41 <%
42     }
43     User user=new User();
44     UserDaoImpl userDao=new UserDaoImpl();
45     user=userDao.load(username);
46     if(user==null)
47     {
48         request.setAttribute("error","該使用者不存在,請重新輸入。");
49 %>
50     <jsp:forward page="updateInput.jsp"></jsp:forward>
51 <%
52     }
53     if(!user.getPassword().equals(password))
54     {
55         request.setAttribute("error", "原密碼不正確,無法修改!");
56 %>
57     <jsp:forward page="updateInput.jsp"></jsp:forward>
58 <%
59     }
60     if(!newpassword.equals(newrepassword))
61     {
62         request.setAttribute("error", "兩次輸入的新密碼不一致,請確認後再操作,修改失敗!");
63 %>
64     <jsp:forward page="updateInput.jsp"></jsp:forward>
65 <%
66     }
67     user.setUsername(username);
68     user.setPassword(newpassword);
69     userDao.update(user);
70 %>
71     <h2 style="color:blue">使用者修改成功!</h2> 
72 </html>

updateInput.jsp:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2 pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>使用者修改</title>
 8 </head>
 9 <body>
10     <form action="update.jsp" method="get">
11         <table align="center" border="2" width="500">
12             <tr>
13                 <td>要進行修改的使用者名稱:</td>
14                 <td>
15                     <input type="text" name="username" />
16                 </td>
17             </tr>
18             <tr>
19                 <td>原密碼:</td>
20                 <td>
21                     <input type="password" name="password" />
22                 </td>
23             </tr>
24             <tr>
25                 <td>新密碼:</td>
26                 <td>
27                     <input type="password" name="newpassword" />
28                 </td>
29             </tr>
30             <tr>
31                 <td>請再次輸入密碼:</td>
32                 <td>
33                     <input type="password" name="newrepassword" />
34                 </td>
35             </tr>
36             <tr align="center">
37                 <td colspan="2">
38                     <input type="submit" value="提交" />
39                     <input type="reset" value="重置" />
40                 </td>
41             </tr>
42         </table>
43     </form>
44 <%
45     if(request.getAttribute("error")!=null)
46     {
47 %>
48     <h2 align="center" style="color:red"><%=request.getAttribute("error") %></h2>
49 <%
50     }
51 %>
52 </body>
53 </html>

denglu.jsp:

 1 <%@page import="com.user.gb.dao.UserDaoImpl"%>
 2 <%@page import="com.user.gb.model.User"%>
 3 <%@page import="com.user.gb.model.UserException"%>
 4 <%@page import="com.user.gb.Util.GBUtil"%>
 5 <%@ page language="java" contentType="text/html; charset=UTF-8"
 6 pageEncoding="UTF-8"%>
 7 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 8 <html>
 9 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
10 <% 
11     String username=request.getParameter("username");
12     String password=request.getParameter("password");
13     if(username==null||"".equals(username.trim()))
14     {
15         request.setAttribute("error","使用者名稱不能為空!");
16 %>
17     <jsp:forward page="dengluInput.jsp"></jsp:forward>
18 <%
19     }
20     if(password==null||"".equals(password.trim()))
21     {
22         request.setAttribute("error","密碼不能為空!");
23 %>
24     <jsp:forward page="dengluInput.jsp"></jsp:forward>
25 <%
26     }
27     User user=null;
28     UserDaoImpl userDao=new UserDaoImpl();
29     user=userDao.load(username);
30     if(user==null)
31     {
32         request.setAttribute("error","該使用者名稱不存在!");
33 %>
34     <jsp:forward page="dengluInput.jsp"></jsp:forward>
35 <%
36     }
37     if(!password.equals(user.getPassword()))
38     {
39         request.setAttribute("error","密碼錯誤!");
40 %>
41     <jsp:forward page="dengluInput.jsp"></jsp:forward>
42 <%
43     }
44     else
45     {
46 %>
47     <h2 align="center" style="color:blue">登入成功!</h2>
48     <a href="addInput.jsp">使用者註冊</a>
49     <a href="deleteInput.jsp">刪除使用者</a>
50     <a href="updateInput.jsp">修改密碼</a>
51     <a href="selectInput.jsp">查詢使用者</a>
52 <%
53     }
54 %>
55 </html>

dengluInput.jsp:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2 pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>登入</title>
 8 </head>
 9 <body>
10     <form action="denglu.jsp" method="get">
11         <table align="center" border="2" width="500">
12             <tr>
13                 <td>使用者名稱:</td>
14                 <td>
15                     <input type="text" name="username" />
16                 </td>
17             </tr>
18             <tr>
19                 <td>密碼:</td>
20                 <td>
21                     <input type="password" name="password" />
22                 </td>
23                 <td>
24                     <a href="updateInput.jsp">修改密碼</a>
25                 </td>
26             </tr>
27             <tr align="center">
28                 <td colspan="4">
29                     <input type="submit" value="登入" />
30                 </td>
31             </tr>
32         </table>
33     </form>
34 <br>
35 <%
36     if(request.getAttribute("error")!=null)
37     {
38 %>
39     <h2 align="center" style="color:red"><%=request.getAttribute("error") %></h2>
40 <%
41     }
42 %>
43 </body>
44 </html>

三、執行結果截圖:

初始介面:

   

 

不輸入任何東西直接登入:

   

 

密碼錯誤時:

   

登入成功:

   

 

由四個選項分別將使用者匯入到不同的介面,對應增刪改查:

增加(初始):

   

 

 

當使用者名稱已存在:

   

使用者儲存成功:

   

刪除(初始):

   

刪除成功:                                            

   

修改(初始):      

   

修改使用者不存在時:

    

修改使用者時密碼不正確:

   

修改成功:

    

查詢:

   

成功查詢:

   

使用者不存在時:

   

四、列出你對這門課的希望和自己的目標,並具體列出你計劃每週花多少時間在這門課上。

       這幾周的時間,我希望寫出一個可用的,有實際使用者的軟體。 能夠完整體驗軟體生命週期,對於各個階段有實際的瞭解,對於軟體設計有實際的掌握,對敏捷軟體開發的具體技術有實踐能力。在個人作業和團隊作業中, 瞭解團隊的各個角色,和各個角色的互動。對於其中一個角色有實際的深入體驗。 學習如何與不同的角色打交道,培養團隊精神,學會解決衝突的幾種方法。

  每天可以花費三四個小時用來程式設計,每週下來三十個小時左右,程式設計重要的還是練習,把寫程式當做日常。

相關文章