時間過的快么?人的感覺而已,時間還是那樣地流過,但人們卻有不同的感受,收獲的越多,感覺時間過的越慢,認知的越少,時間也就過的越快。有三個月沒寫點什么東西了,為了讓時間記住這三個月都發生了什么,趁現在還沒有忘記還是記錄下來罷,今天心情不好所以廢話也就多點。
??????
按時間順序一個一個來吧。
一:關于《
J2EE
設計模式》
??????
新手入門,不敢班門弄大刀,在開始之前得首先感謝幾個月前到學校擺地攤的書商,當時還啥都不懂,在書攤上亂翻結果看到
O’reilly
的《
J2EE
設計模式》和《
SQL
技術手冊》一看價錢一共
80
多兩銀子,仗這
O’reilly
的旗號二話不說就跟老板砍價結果
50
成交,當時買回去看也看不懂就讓它放在那里,當是還在學習
JAVA
基礎,學校數據庫的課才剛上沒幾天,還勉強曉得
SQL
是個什么東西,就這樣昏頭昏腦的放到今天結果還發揮了大作用呢
~~
呵呵。真是慧眼識真金啊。
??????
費話又多了(今天心情不太好
~~
見諒)。還是說說這本書,這樣說吧,是本菜鳥看的懂老鳥看得進的書(俗),該書的作者的確大家風范,把“高深”
(
對菜鳥而言
)
的理論講的淺顯易懂,并配合經典的事例代碼,真正讓你理論聯系實際,并且覺沒有掉書袋的壞習慣,國類很多作者寫的書或者文章,喜歡到處使用各種各樣的所謂的術語或簡寫(在
J2EE
紛繁復雜的技術中,這樣的簡寫簡直就是噩夢)以顯示其學術造詣的高深莫測。嘆
~~~~
。
??????
看完這本書的前三章,其實只用了不到
10
小時的時間,但其中的一個簡單的設計模式卻已經指導了我完成了一個信息發布系統很多模塊的設計和實現。可見其含金量是非常之高的,做為一個
WEB
應用“開發”
(
注:之所以打引號,是由于某些高手認為像我這樣的學生如果說開發的話簡直是對這兩個字的玷污和對他們這些真正的開發人員的不尊重
)
新手確實感到一股信心和鼓勵。
??????
現在就談談著個簡單但是非常可愛的設計模式吧:
MVC
至于
MVC
是誰最先提出來,我并不知道,
MVC
是什么最開始我也不知道,但是我很久以前就使用過它了,記得以前做數據結構的練習,寫了一個棋類小游戲的程序,我將這個游戲的棋子,棋盤,游戲規則,下棋的人的用戶接口,簡單的分成了三個部分來實現,現在看來這不就是
MVC
么?!,棋子和棋盤是
model ,
游戲規則是
controller ,
用戶接口是
view?
所以在我看來
MVC
模式是但凡寫過程序的人都在潛意識里存在的東西,是誰最先將它說出來也不是那么重要,也不必要認為是什么高深莫測的東西。不過現在的
MVC
在每一個層次上更為細分更有很多優秀的設計模式,這是我們應該學習的。
使用jsp , servlet ,javaBean 實現MVC.這確實是一個非常好的方案,做為MVC的練習,應該多寫寫這樣的例子好好理解它的實現過程,體會它的優點,還有不足,以及有待改進的地方。在不斷的改進中學習各種各樣的設計模式,我覺得這是一個很好的方法。
實現過程:jsp頁面作為視圖,其中的不包含任何業務邏輯處理和數據庫訪問操作,僅包含頁面邏輯。Servlet作為控制器,負責業務邏輯和頁面轉發,javaBean負責數據封裝以提供給JSP頁面訪問。還有一類bean負責管理對數據庫的訪問操作和其他一些業務方法的實現。我以一個簡單的用戶登陸功能代碼以解釋實現的過程:
JSP視圖:負責收集用戶提交的數據。并將數據發送給指定的servlet,比如:


登陸頁面
<html>
????<head>
????????<meta?http-equiv="Content-Type"?content="text/html;?charset=gb2312">
????????<title>登錄</title>
????</head>
????<body>
????????<form?action="./LoginController"?method="post">
????????????<table?align="center"?border="1">
????????????????<tr>?<td>帳號</td>?<td><input?type="text"?size="10"?name=id>?</td>?<td><a?href="./user/regist/regist.jsp"><input?type="button"?value="注冊"></a></td></tr>?
????????????????<tr>?<td>密碼</td>?<td><input?type="password"?size="10"?name=pswd>?</td><td><input?type="reset"?value="重填"></td></tr>
????????????????<tr>?<td>我是管理員</td><td><input?type="checkbox"?name="admin"?value="1"></td><td><input?type="submit"?value="登錄"></td></tr>
????????????</table>
????????</form>
????</body>
</html>
javaBean
模型:用戶模型。

用戶模型

public?class?UserModel?
{?
????private?String?id;
????private?String?password;
????private?String?admin;
????

????public?UserModel()?
{}
????

????public?void?setId(String?id)
{
????????this.id=id;
????}

????public?void?setPassword(String?password)
{
????????this.password=password;
????}??

????public?String?getId()
{
????????return?this.id;
????}

????public?String?getPassword()
{
????????return?this.password;
????}

????public?void?setAdmin(String?admin)
{
????????this.admin=admin;
????}

????public?String?getAdmin()
{
????????return?this.admin;
????}
}

Servlet
控制器;
LoginController
負責業務邏輯,頁面轉發。

控制器
public?class?LoginController?extends?javax.servlet.http.HttpServlet?implements

????????javax.servlet.Servlet?
{
????private?static?final?long?serialVersionUID?=?1L;
????private?static?final?String?indexPage="/login.jsp";//登錄的頁面
????private?static?final?String?userPage="/user/user_main.jsp";//用戶首頁
????private?static?final?String?adminPage="/admin/admin_main.jsp";//管理員首頁
????
????//?登錄驗證
????protected?void?processRequest(HttpServletRequest?request,

????????????HttpServletResponse?response)?throws?ServletException,?IOException?
{
????????response.setContentType("text/html;charset=utf-8");
????????String?id?=?request.getParameter("id");
????????String?pswd?=?request.getParameter("pswd");
????????//判斷是否選擇了登錄管理員
????????String?isadmin?="0";

????????if(request.getParameter("admin")!=null)
{
????????????isadmin?=?request.getParameter("admin");
????????}
????????//獲得一個新用戶對象
????????UserModel?user?=?new?UserModel();
????????user.setId(id);
????????user.setPassword(pswd);
????????user.setAdmin(isadmin);
????????//?獲得一個數據庫連接并檢測是否存在這樣一個對象
????????DataBaseModel?db?=?new?DataBaseModel();
????????String?nextPage;
????????//?判斷用戶名是否正確,并確定頁面跳轉;
????????//判斷是否是管理員登錄

????????if?(user.getAdmin().equals("1"))
{

????????????if(db.checkUser(user)?==?true)
{
????????????????nextPage?=?adminPage;
????????????????request.setAttribute("user_atrr",?user);

????????????}else
{nextPage=indexPage;}
????????}
????????//普通用戶登錄

????????else
{

????????????if(db.checkUser(user)?==?true)?
{
????????????????nextPage?=?userPage;
????????????????request.setAttribute("user_atrr",?user);

????????????}else?
{
????????????????nextPage?=?indexPage;
????????????}
????????}
????????//?轉發請求
????????RequestDispatcher?dispacher?=?getServletContext().getRequestDispatcher(
????????????????nextPage);
????????dispacher.forward(request,?response);
????}

連接數據庫的
bean :
功能bean
public
?
class
?DataBaseModel
{
????
private
?Connection?con
=
null
;
????
//
注冊驅動?
????
public
?DataBaseModel()?
{

????????
try
?
{
????????????Class.forName(
"
com.mysql.jdbc.Driver
"
);

????????}
?
catch
?(ClassNotFoundException?ex)?
{
????????????System.out.println(
"
注冊數據庫失敗
"
);
????????????ex.printStackTrace();
????????}
????}
//
返回一個連接????
????
public
?Connection?getConnection()
{
????????

????????
try
?
{
con
=
DriverManager.getConnection(
"
jdbc:mysql://localhost:3306/universe
"
,
"
corsair
"
,
"
110
"
);

????????}
?
catch
?(SQLException?ex)?
{
????????????System.out.println(
"
連接失敗
"
);
????????????ex.printStackTrace();
????????}
????????
return
?con;
????}
//
斷開一個連接????
????
public
?
void
?releaseConnection()
{???

????????
if
(con
!=
null
)
{

????????????
try
?
{
????????????????con.close();

????????????}
?
catch
?(SQLException?ex)?
{
????????????????System.out.println(
"
斷開數據庫連接失敗
"
);
????????????????ex.printStackTrace();
????????????}
????????}
????}
//
返回Statement對象
????
public
?Statement?getStatement()
{
????????Statement?statement
=
null
;

????????
if
(con
==
null
)
{
????????????con
=
getConnection();
????????}
????????
try
?
{
????????????statement
=
con.createStatement();

????????}
?
catch
?(SQLException?ex)?
{
????????????System.out.println(
"
返回Statement對象失敗
"
);
????????????ex.printStackTrace();
????????}
????????
return
?statement;
????}
????
public
?Statement?getScrollStatement()
{
????????Statement?statement
=
null
;

????????
if
(con
==
null
)
{
????????????con
=
getConnection();
????????}
????????
try
?
{
????????????statement
=
con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

????????}
?
catch
?(SQLException?ex)?
{
????????????System.out.println(
"
返回ScrollStatement對象失敗
"
);
????????????ex.printStackTrace();
????????}
????????
return
?statement;
????}
//
執行用戶相關操作================================
????
//
用戶驗證
????
public
?
boolean
?checkUser(UserModel?user)
{
????????String?id,password,admin;
????????id
=
user.getId();
????????password
=
user.getPassword();
????????admin
=
user.getAdmin();
????????
????????
boolean
?result
=
false
;
????????ResultSet?rs
=
null
;
????????Statement?stmt
=
getStatement();
????????String?sql
=
""
;
????????

????????
if
(admin.equals(
"
1
"
))
{
????????sql
=
"
select?*?from?user?where?admin='1'?and?id='
"
+
id
+
"
'and?pswd='
"
+
password
+
"
'
"
;

????????}
else
?
if
(admin.equals(
"
0
"
))
{
????????sql
=
"
select?*?from?user?where?id='
"
+
id
+
"
'and?pswd='
"
+
password
+
"
'
"
;
????????}
????????
try
?
{
????????????rs
=
stmt.executeQuery(sql);

????????????
if
(rs.next())
{result
=
true
;}
//
驗證成功
????????????
else
{result
=
false
;}
//
驗證失敗
????????????stmt.close();

????????}
?
catch
?(SQLException?ex)?
{
????????????System.out.println(
"
sql執行驗證失敗
"
);
????????????ex.printStackTrace();
????????}
????????
return
?result;
}
}