最近在做一個JavaWeb程序
用MyEclipse開發
用Struts(*
do)做開發框架
Hibernate做數據庫代理類
負責對數據庫的操作
維持數據持久和數據訪問
Spring用來整和注入
哎
還用了Ajax
在Java中實現真他媽的讓人煩
什麼Ajax
根本就是寫JS腳本嘛(不過本來也是
就是最原始的那種拉)
自己手寫了JS腳本
好久沒寫過這麼多了
也當練習一下XMLHTTPRequest拉
要是中那就方便多了
直接就拖AjaxControlToolkit控件
個AJAX Extensions核心組件
還有幾十個ajax Toolkit控件
有兩邊對聯做廣告的
有做像Google智能提示的(說到這個
我做每回有一個問題
就是在指定了返回記錄的Item每一行Css樣式之後
當用鍵盤上下的方向鍵移動所選條的時候
它就出現了腳本錯誤
也不能用方向鍵移動所選條了
我試過了
只要不設置class他就沒一點問題
能正常移動選擇和智能提示
但是不設置樣式那哪看得?他默認都是黑字白背景
不過不曉得是不是DIV層做的
我以前用返回<span style=
color:red
>Jonllen</span>做測試
他卻沒能返回Jonllen
然後我對他進行Html編碼和反編碼都試過了
也不行
在頁面裡面要是能得到顯示Html的效果(說到這裡我呀有要叉開話題了
等後面講考試在說了)
要是這樣能行的話那也能設置它的Css style了
但是就是不行
不知道大家有沒有碰到我這種情況過
還請知道的大蝦指點)還有做瑣定凍結頁面做實現的
還有談出的等等
要什麼有什麼
看你要實現什麼功能了
但我覺得就是MS這些Ajax控件調用WebServer的太多了
就有時要新寫個WebMethod不習慣感覺麻煩了
不過這倒是順了Ajax的本質咯
就是要回調WebServer的Xml
不過我覺得以前做的Ajax還可以
他沒有做成控件
只是要引用dll
回調的是一個Ajax方法
我以前在VS
裡用AjaxPro
dll
感覺還可以
雖然此方法有很多局限性
但用起來感覺挺方便的
MS真是夠人性化
Sun也要學著點就好了
不過當前Sun還是做好它的J
EE規范在說吧
剛開始還可以
就是JS不好怎麼調試
就只能做死了alert看執行到了那一步
不一會兒JS搞定了
我在JS裡面調用的open url是一個servlet類
然後在這裡調用Hibernate對數據庫操作
以達到Ajax的異步處理
因為我這個項目以前是連SQL Server
的
不過現在我要用MYSQL數據庫了
呵呵
免費的那種
我就把以前工程裡面的Hibernate要連SQL Server
的三個驅動包給刪了
接著選擇DB Browser(數據庫浏覽器)重新設置了Hibernate的數據連接
Edit更改端口
輸入數據庫口令
哦
還要添加一個MQSQL數據庫連接驅動連接包(jar文件)
找啊找
在E盤
選擇
配置OK
Next
Finish完成
Open Connection
一長串進度條到結尾後
OK連接成功了
一帆風順
點開一看幾個database下面幾個table都對數
我刪掉了以前的工程底下hibr包下的一些數據映射對象和相應的DAO數據訪問
然後Hibernate Reverse Engineering重新添加刪除的那些Hibernate數據庫映射對象
用assigned(有主鍵)的用assigned
用native(自動增長主鍵)用native
OK
Hibernate代理類搞定
現在只要看servlet裡面
DAO dao = new
DAO()…對數據庫操作完成!現在就看Ajax的了
它是如何的偉大
在不刷新的情況下異步的CallBack服務器
配置一下WebLogic
Redeploy重新部署
Run運行
打開Brower鍵如URL看效果咯
滿懷期待
想著:onclick提交
addshow()調用JS一個函數
回發到服務器
結果···返回的是一個alert(
你所請求的頁面有異常
)
呵呵~哎
為什麼類?我關閉一下調試
在重新啟動一下
還是提示有異常
為什麼
為什麼
為什麼呢?我認真的檢查了我一下JS代碼
認真的過了一遍JS裡面的function
一個個檢查
定義XMLHttpRequest對象
sendRequest(url)發送函數請求
processResponse()處理返回信息的函數
等等
sendRequest(url)發送函數請求
對URL
應該是這個問題
我的url是
servlet/FindServlet?sn=
+ss;FindServlet是我工程ss包下面的FindServlet
java的servlet類
ss是在JS裡面var的一個變量
在細想了一下
servlet/FindServlet?sn=
+ss
不是ss/FindServlet?sn=
+ss嗎?不是
後來也用ss也測試了一下
確實不是
那是什麼問題呢?難道問題不是出在URL上面
url沒錯
想了一陣了
靈機一動
測試一下不就知道了嗎!我連忙打開FindServlet這個類
一時間還很狠啪著自己的後老勺:你真笨啊!進入FindServlet
在doGet方法裡邊String shen = request
getParameter(
sn
);System
out
println(shen);獲取sn查詢字符串(呵呵
Net學多了)
然後再在控制台輸出
保存運行
哎
真的輸出了
控制台裡面輸出了
湖南
我sn查詢字符串的值
那這麼來說
URL確實沒有問題
它已經把請求發送到我的這個FindServlet類裡面來了
這裡我已經能接受到了
接著在FindServlet類往下看
在一些關鍵性的代碼後加上System
out
println(
變量值
);我習慣性調試Java的方法
調試運行
果然還沒有執行完就報異常了
控制台在輸出了DAO前面的變量值後後面的就都沒有輸出了
一定就是DAO的問題了!我把目光轉到DAO
第一行AddrtableDAO dao = new AddrtableDAO();就實例化絕對沒問題List list = dao
findAll(shen);應該問題System
out
print(list
size());此行在控制台沒有輸出結果
List list = dao
findAll(shen)
findAll(shen)是按指定條件shen對數據庫執行查詢返回List集合的方法
就是這句對數據庫查詢有問題了(一時間感覺自己真的了不起
我這個人比容易較驕傲自滿
我自己都受不了自己了)
馬上寫了一個static void main()方法測試
果然是Hibernate代理數據庫操作類出現了問提
提示Can not Connection不能連接
為什麼類?連不上
我明明在DB Browser裡配置好了連MySQl的設置
在那裡連上了啊
還可以看到數據庫和表啊
怎麼建的Hibernate數據庫代理類就連不上了類
我馬上轉到了hibernate
cfg
xml Hibernate配置文件
一看
暈了
怎麼在配置文件裡面用的還是以前的那個的配置設置
我不是改成MySql了嗎
我知道了
你在DB Browser選擇好數據庫連接對象
並未更改Hibernate數據庫連接配置
暈了
這MyEclipse怎麼這麼蠢啊
不知道自動更改Hibernate配置文件
唉癡哦
手動更改後調試運行
心想這次應該能OK了吧
但結果總是出現意外
老和所想的背道而馳的
有出西西了
一長串異常:什麼Error Creating SessionFactory等一大片英文
搞得我頭都大了
點異常進去看
就是到了那些Hibernate那些砸七砸八的那些包的原類型裡了
一個個類N多代碼
看得真叫人煩拉
想起就郁悶
這MyEclipse調試可真JB麻煩
又全英文版的(想起
Net中調試
哎```個人覺得Java中就是jar包太繁多了
而一些重要的設置都保存在Xml的配置文件裡面
感覺喜歡拿xml配置文件出氣!如頁面導航等
但內容多了就顯得繁雜了
就只能手動修改Source了)
心裡直罵Java垃圾
不禁雙手抱著後老勺往後仰
看這天花板郁悶ING
回下頭來看到了這MyEclipse工具
蔑視了工程一下
回到電腦面前
看啊看
順眼看了這些砸七砸八的包
哎
似乎少了什麼東西
憑直覺我又過了那些jar包文件一便
細想了一翻
又仔細看了那些包一遍
我的MySql數據庫驅動jar包文件類!怎麼沒有呢?我再Refresh一下還是沒有看到啊!拐了
我雖然刪除了以前連Sql Server
的
個包
但是怎麼MySql的包怎麼沒有導進來呢?第一時間問為什麼?難道又是DB Browser的問題
你在那裡選擇Add JARS選擇是驅動包文件是用的磁盤物理路徑
也就是說他沒有自動把你所選擇的包自動加在到你的工程裡面進來了
該死的DB Browser
害得我Hibernate老是連不上
這個問題好象只在你以前用一個數據源現在又換掉一個新的數據庫連接時才有
我打工程文件所在目錄
進入WebRoot\WEB
INF\lib目錄
手動將我E盤底下個那個MySQL數據庫連接驅動Jar包Copy到這個目錄下
再在工程裡面Refresh一下
MySql包就出來了
運行WebLogic打開浏覽器
onclick
啊````終於出來了
通過JS查詢到數據庫服務器裡面的數據了
我在Java中實現Ajax就這樣成功了!你們看了我寫了這麼多覺得好不好笑啊
是不是感覺我是垃圾啊
菜鳥一個
我的確也是菜鳥
本來就是
要是高手的話可能一看就知道錯誤出在那裡了
就不會想我這樣折騰了吧!是不是我說了一些Java很低級的常識類?而我自己卻不清白類!希望大家莫見笑我了
第一次寫這些Hibernate知識
我犯的一些錯誤
應該大家有些Java的朋友在些Hibernate的時候沒出現過我這樣的問題吧
其實我對Java是比較感興趣的
但是由於我所學的Java的知識太少
對有一點難的就不知道做了
那是因為我個人學的Java太膚淺的原因
我知道其實中實現在在Java裡基本上可以實現的
只不過可能比中實現難一點而已吧
在網上看到有很多朋友有拿過JAVA的Hibernate和
NET中的ADO
NET進行比較
也有很多人說兩著不能進行相比
就像SQL語句不能和存儲過程進行相比一樣
只要能在恰當的時候用就是好的
我都很認同的他們的觀點和看法
而我個人認為呢
只要有自己的對事物認識的觀點就是好的
我是一個比較愛說的人
我覺得你只要能認真的去思考分析一件事物
不管你得到的結論是怎麼樣的
旨在在這個過程你從中是否學到了一些東西
我不喜歡那些平時不愛說話的
因為那時候我們不知道他對這個事物的看法是怎樣的
也難以猜測他心裡到底在想什麼
既然上面有說到Hibernate和ADO
Net
所以我又加上了這一段羅嗦起來了
呵呵
就我這皮毛也當回顧我以前一些知識
談不上總結也算小記一翻
希望高手們別笑話我們這些新手了
下面就我所了解的Hibernate和ADO
NET比較如下:在Hibernate中
首先我們需要在JAVA工程裡面添加Hibernate標簽庫(我用的是Hibernate
Core Libraries)的引用
在
Net中我覺得就是using
import名稱空間SqlClient
OleDb添加程序集的過程
然後我們需要打開DB Brower建立數據庫連接字符串
就是打服務器名用戶名密碼等
然後Hibernate會這些數據庫連接信息保存在hibernate
cfg
xml(默認缺省)這一個xml文件中
在連接數據庫的時候值得一提的是需要數據庫連接驅動包
不同的數據庫有不同的驅動包
個人覺得不同的驅動包作用在與
由於不同數據庫用的可能的是不同連接操作方式
如Oracle是表空間的形式存在數據庫等
而其他的可能略有不同
正確配置好連接成功後
我們就能在DB Brower裡看到數據庫和數據庫對應的表了
在你連接數據庫前添加Hibernate時它會叫你選擇包
添加後包下面就會多
個類了
IBaseHibernateDAO
BaseHibernateDAO
HibernateSessionfactory從名字就可以看出來就是一個接口
一個接口實現類(implements)
一個工廠
具體裡面是如何實現的以及其原理機制我此小輩能講清楚的
我還是有自知知明的
等下甭被我的這點Java皮毛知識給歪曲了那就不好了
不過我看裡面的代碼也很少簡單
要理解起來也不難
反正就創建了這
個類
然後我就需要在DB Brower裡面選擇相應的表Hibernate Reverse Engineering添加對應DAO和Model
Model就是數據庫表對象映射實例
數據庫表的每一列充當Model類的屬性字段
並添加有get
set規則的屬性訪問器
而DAO類裡面則封裝的是對該表的一些常見的數據訪問操作(insert
delete
update
select)
它有自己的HibernateSQL語句(不是一般的sql語句)
這一塊我手動寫得很少
不過和一般的sql語句語法還是很相似
如有按屬性名查詢返回Model強類型化List集合等
除此之外
每添加一個表還會自動添加表名
hbm
xml文件
這個xml文件保存數據庫映射到Hibernate表字段的具體信息
如主鍵信息
列長度相應的Java類型等
要注意的是在添加的時候它會叫你選擇ID Generator表的信息
這裡常見的是assigned(有表主鍵)和native(自動增長主鍵)
因為在呆後創建的時候它會根據你所選擇的信息創建不同的DAO和Model
如在構造函數和一些數據訪問的方法裡面就可能有需要ID主鍵的
而對於自動增長的則無須輸入ID主鍵即可
你可以對多個可能用的到表執行上述Hibernate Reverse Engineering映射操作
你可以在不寫一局代碼的情況下完成對數據庫的大多數的一般操作在其他地方很方便的調用
我覺得這就是Hibernate的最大的好處優點;而在
Net中類
相對Hibernate來說我想是一步一個腳印
什麼DAO方法等代碼一行行寫
不過我覺得這樣也沒什麼不好的
我們一般在項目中就用一個SqlHelper類
裡面寫上對數據庫的一些增刪改查方法等
根據傳來的SQL語句和參數組或存儲過程等動態的返回數據集合(List)或記錄數等
用起來也挺好的
頂多還對不同的實例添加對應的DAL
這些基本上能滿足我們對數據庫的基本操作了
不過我覺得在Java中這樣實現也可以啊
我以前就在Java裡面寫了一個SqlHelper類代替了Hibernate
用的是JdbcOdbc數據庫連接
感覺也很實用
簡單明了
但是Hibernate在一些性能等方面的優勢我們上不容忽視的
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28323.html