#
早起先把昨天修改的程序發了過去,運行檢查,沒啥問題。小強說他們的電腦有病毒,總是有問題,也沒說啥問題,問我是否要重新裝系統,最好不要吧,那樣的話,
SQL Server
和
.NET Framework
都要重新裝,估計他們裝不好,豈不是我又要到長春一趟,我的天,命苦呀。他說找人給看看,最好還是殺毒吧。我還是那句老話,“有病治病,用不著打死,重生吧!”此時聽到敲門聲,說是電話局的,說什么推出新政策,可以省話費什么的,存屬扯蛋,這種騙人的把戲電視上都演過多少次了,還有人使用。當我白癡呀。我沒理,那人便敲鄰居的門,誰也不搭理他,未果,就離開了。現在這世道,可不能隨便開門,壞人太多啦!也經常接到這樣的電話,說你中
50
萬,先匯點手續費什么的。奶奶個熊的,就是騙呀。我媽最逗,也不廢話,直接回應:“中了,我不要了,都給你了。”電話一撂,拉到。只要不貪心,永遠不會上當的。
昨天去三好街了,所以正常的周二下午游泳,推遲到了今天。天氣涼了,泳池人少多了。我喜歡,這樣可以圍著整個泳池游,比較爽。今天狀態不錯,
2
小節,沒節
6
圈,總長
1200
米只多不少,而且還游了好幾個來回的
22
米往返。估計今天的總長度會在
2000
米上下。每周兩次的游泳,對身體幫助很大,而且放松緊張的身體和心靈。我比較相信水里有種能量是可以被人體吸收的,所以每次過后倍感舒爽。回來的路上看到有家福利彩票的投注站,進去瞄了幾眼,打算玩玩,可是不懂規則,上網查查。打算自己做個統計的程序來投注,也就是隨機數字啦。就當熟練一下隨機數方法了。話不多說,現在就開始動手。
好友小楠要買塊硬盤,叫我幫忙看看,我也是了解不多呀。到了電子市場,就開始狂暈了,先是太長時間不來,哪里都不認識,問了幾家的價格,心也沒底怕被蒙,所以還是打電話找朋友幫忙吧。那可真是笑話百出了。先是問要什么牌子的,小楠說西捷酷魚的,要
200GB
的,我一緊張,說成了
20GB
,哥們頓時語塞,又問一遍,你要多大的?才回過神,哈
200GB
。問我要啥口的。說是串口還是并口。我汗,我就知道有
IDE
和
SCSI
之分,每聽說還有啥口的。沒整明白,然后問啥主板的,小楠更逗,她自己也不知道,朋友說,你干脆拿來我給你看看,連著直接買個安上就得了。我和小楠都笑了,是苦笑。因為小楠周末就要回澳大利亞,她那電腦在澳大利亞呢,咋拿來呀。又問,那
CPU
是多少呀。得支持硬盤容量呀!對哦。我咋把這個忘了。小楠繼續語出驚人,還是不知道,得沒轍了。你啥時候買的。
2000
年,這個倒是知道,那年代
40G
硬盤有沒有我都不知道,還要買
200G
的安上,那不是扯呢嗎。朋友說,實在不行買個
80G
的吧,然后刷一下
BIOS
也可以支持,她就更蒙了,連自己電腦啥配置的人都不知道,你居然要讓她自己刷
BIOS
,這可能嗎?最后,她說出了一句:我想買個硬盤的拖盒來用,這樣不就可以匹配了。我馬上問:你是要做移動硬盤呀。。。她說不是,就是把硬盤放到機箱外面用,用
USB
連接不是可以。我心想,那你電腦也得有自己的硬盤呀。她居然認為。電腦本身可以不用,用外接
USB
硬盤也可以。我的天,這都咋想的。我都解釋不清了。最后達成一致,啥也買了,回澳洲再買個二手的用著吧。她原來那個就剩顯示器和機箱(沒有硬盤)。我看留著意義也不大,我說賣廢品算了,她說
,
那里根本就沒有收的。我說那就賣廢鐵,她說,只有汽車才算是賣廢鐵。我的媽呀。那就改成燒烤用的爐子算了。回家路上,我還郁悶中,我一學計算機專業的,這硬件我是太不了解了。不過還行,至少比小楠同志了解的多呀。
下午回到家中,本來想看看
Struts
中幾個標簽的功能。結果。電話來了。我給一家公司做的程序,他們運行說有問題,叫我給看看。上網把數據發了過來,我一看,數據錄入的有夠亂的。好半天屢出頭緒。晚飯前搞定,明天給發過去。我一想,他們輸入的亂,說明我設計的還是不夠人性化,所以,又改動了一些地方。哎。畢竟是受人家錢的。工作就要負責嘛!
Hibernate
英文的直意是冬眠的意思。
Hibernate
是一個面向
Java
環境的對象
/
關系數據映射工具,注意,這是一種技術工具。
ORM
(
object relational mapping
)
這個術語表示一種技術,用來把對象模型表示的對象映射到基于
SQL
的關系模型數據結構中去。
以上的這些概念性的東西,然我感覺和
.NET Framework 2.0
中的強類型數據集的作用差不多,但聽研究過的人說,要比
Microsoft
的那個好得多,
Microsoft
的強類型數據集我用過,感覺爽,既然有說
Hibernate
更好,那已經更是過癮,我心里癢癢的呀。繼續。。。
書中有這樣一句“對于以數據為中心的程序來說,他們往往只在數據庫中使用存儲過程來實現商業邏輯,
Hibernate
可能不是最好的解決方案。”這個是一定啦,
Hibernate
是橋梁,又不是萬金油,當然是在數據庫中直接用存儲過程處理商業邏輯是最好的啦。我做過,直接在存儲過程中搞定一切東西,傳一個參數過去,然后所有的運算都在
SQL Server 2000
的存儲過程中完成,那叫一個爽,比把數據讀到程序里,然后用
Java
處理,再把數據傳回去要快得多,但是在
SQL Server 2000
里直接用存儲過程來完成這樣的工作,難度還是不小的,調試就是最大的難點,反正我是沒整明白有啥辦法可以調試的,我就用最原始、最保靠,據說是也是有效的調試方法
print
來完成。哈哈。夠暈的吧!繼續看。。。
現在看到了一個“持久化實體類”這個類是符合
JavaBean
的編寫要求。并且要給它一個唯一的標識符,這是為了我們使用
Hibernate
提供的所有特性。大多數程序,特別是
web
程序,都需要通過標識符來區分對象。但,通常我們不會直接操作對象的標識符,所以他的
setter
方法的訪問級別是
private
。
Hibernate
需要知道怎樣去加載(
load
)和存儲(
store
)持久化類的對象,映射文件,它就是告訴
Hibernate
,應該訪問數據庫里面的哪個表,已經應該使用表里面哪些字段。
Hibernate
不會從
web
加載
DTD
文件,但它會首先在應用程序的
classpath
中查找。
DTD
文件包含在
hibernate3.jar
里,同時在
Hibernate
發布包的
src/
目錄下。
映射文件的長相:
Event.hbm.xml
<hibernate-mapping>
???? <classname="events.Event" table="Events">
??????????? <idname="id" column="eventID">
?????????????????? <generatorclass="native"/>
??????????? </id>
??????????? <propertyname="date" type="timestamp" column="eventDate"/>
??????????? <propertyname="title" column="eventTitle"/>
???? </class>
</hibernate-mapping>
?
說明:
class
表示持久化類;
id
表示唯一標識;
property
表示類的屬性字段;
name
是持久化類名;
table
是數據表名;
column
是數據字段名;
generator
是唯一標識的生成方式;
type
是映射的數據類型。
?
Hibernate
配置文件的長相:
hibernate.cfg.xml
<!-- by MyEclipse Hibernate tool integration. -->
<hibernate-configuration>
??? <session-factory>
??????? <!-- properties -->
??????? <propertyname="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
??????? <propertyname="connection.url">jdbc:oracle:thin:@localhost:1521:test</property>
??????? <propertyname="connection.username">system</property>
???????????
?<propertyname="connection.password">manager</property>
????????????????????????????????????????????????????????????????????
??????? <propertyname="dialect">net.sf.hibernate.dialect.OracleDialect</property>
???????
????????????????????????????????????????????
?????????????????
??????? <!-- mapping files -->
??????? <mappingresource="events/Event.hbm.xml"/>
??
?</session-factory>
</hibernate-configuration>
?
說明:
Session-factory
:特定數據庫全局工廠
connection.driver_class
:驅動類
connection.url
:連接路徑
connection.username
:用戶名
connection.password
:用戶密碼
mapping resource
:持久化類加入映射文件
?
用
ant
創建
build.xml
我理解他就是管理文件位置的,就是拷貝,為編譯運行做準備。
?
SessionFactory
是一個線程安全的全局對象,只需要被實例化一次,一個
Session
代表一個單線程的單元操作。
?
這時又來了一個輔助類
HibernateUtil
,負責啟動
Hibernate
和更好的操作
SessionFactory
。
最后配置一個日志系統,
Log4j
或
JDK 1.4
都可以選擇。
?
看到了一種編程模型:線程綁定(
thread-bound
)
Session
在第一次被使用,或第一次調用
getCurrentSession()
的時候,其生命周期就開始了,然后它被
Hibernate
綁定到當前線程。當事務運行結束的時候,不管是提交、回滾,
Hibernate
都會把
Session
從當前線程剝離,并且關閉它。
提交頁面:
<
html:link
href
=
"/StrutsTagDemo/parameter_2.jsp?coolID=1127"
>
???
不使用表單提交數據
</
html:link
>
?
接收頁面:
<
bean:parameter
id
=
"coolID"
name
=
"coolID"
/>
我接受到的
coolID
:
<
bean:write
name
=
"coolID"
/>
<
bean:header
id
=
"host"
name
=
"Host"
/>
主機地址
/
端口
:
<
bean:write
name
=
"host"
/>
<
br
>
<
bean:header
id
=
"language"
name
=
"Accept-Language"
/>
支持語言
:
<
bean:write
name
=
"language"
/>
<
br
>
<
bean:header
id
=
"agent"
name
=
"User-Agent"
/>
用戶的瀏覽器類型
:
<
bean:write
name
=
"agent"
/>
<
br
>
<
bean:header
id
=
"accept"
name
=
"Accept"
/>
支持打開類型
:
<
bean:write
name
=
"accept"
/>
<
br
>
<
bean:header
id
=
"encoding"
name
=
"Accept-Encoding"
/>
支持編碼格式
:
<
bean:write
name
=
"encoding"
/>
<
br
>
//
在
Session
中存放計數器,體現刷新效果。
int
count = 0;
Object obj = request.getSession().getAttribute(
"count"
);
if
(obj ==
null
) {
??? count = 1;
}
try
{
??? count = 1 + Integer.parseInt(obj.toString());
}
catch
(Exception e) {}
request.getSession().setAttribute(
"count"
, count);
?
//
設置自動刷新,一秒鐘一次。
//response.setHeader("Refresh", "1");
?
//
設置自動跳轉,一秒鐘一次。我寫的
url
是自己,所以和刷新一樣。
response.setHeader(
"Refresh"
,
"1,URL=refresh.do"
);
讀取
Cookie
集合,遍歷集合找到所需的
Cookie
,如果找到保存進
Session
,否則跳轉到登錄頁面;
所需資源:
ReadCookieAction.java-
讀取
Cookie
集合,如果找到對應
Cookie
,寫入
Session
;
Login.jsp-
登錄用頁面;
LoginSubmit.java-
記錄登錄信息,并寫入
Session
;
LoginOk.jsp-
讀取
Session
,并顯示。
讀
Cookie
的方法
:
Cookie[] cookies = request.getCookies();
if
(cookies !=
null
) {
???
for
(
int
i=0; i<cookies.
length
; i++) {
?????? Cookie cookie = cookies[i];
??????
if
(cookie.getName().equals(
"userInfo"
)) {
?????????? String value = cookie.getValue();
?????????? String[] info = value.split(
"_"
);
?????????? UserForm userForm =
new
UserForm();
?????????? userForm.setUserName(info[0]);
?????????? userForm.setUserPassword(info[1]);
?????????? request.getSession().setAttribute(
"userForm"
, userForm);
??????????
return
mapping.findForward(
"ok"
);
?????? }
??? }
}
寫
Cookie
的方法:
Cookie c =
new
Cookie(
"userInfo"
,userForm.getUserName()+
"_"
+userForm.getUserPassword());
c.setComment(
"A test cookie"
);
c.setMaxAge(120);
response.addCookie(c);
多選方框,選定值后提交,然后接收到一個數組,這是小菜,看書都知道。
可是,我想給這些多選方框動態顯示的時候給個選中或未選中的狀態值,我是看了好幾個文字材料,寫得都夠暈的,看是那么回事,實際操作,根本就不靈。還好我夠靈光,憑直覺,終于解決。
Action
中:
??????
//
定義一組備選愛好
[
也可以從數據庫中讀取
]
??????
ArrayList hobbyList =
new
ArrayList();
?????? hobbyList.add(
"
游泳
"
);
?????? hobbyList.add(
"
潛水
"
);
?????? hobbyList.add(
"
登山
"
);
?????? hobbyList.add(
"
跳傘
"
);
?????? hobbyList.add(
"
徒步旅行
"
);
??????
??????
//
定義一組選定的愛好
[
也可以從數據庫中讀取
]
??????
ArrayList hobbySelectList =
new
ArrayList();
?????? hobbySelectList.add(
"
游泳
"
);
?????? hobbySelectList.add(
"
登山
"
);
?????? hobbySelectList.add(
"
徒步旅行
"
);
??????
??????
//
定義字符串數組,如果你的那個類的屬性是數組類型。
?????? String[] hobby =
new
String[hobbySelectList.size()];
??????
//
把
ArrayList
轉換為
String[]
?????? hobbySelectList.toArray(hobby);
??????
??????
//
定義你的那個
ActionForm
?????? PersonForm personForm =
new
PersonForm();
??????
//
設置那個數組類型的屬性
?????? personForm.setHobby(hobby);
??????
??????
//
注意,你給
JSP
傳遞的東西哦!
??????
//
一個是:備選數組
ArrayList
??????
//
另一個是:
JSP
可承載的
ActionForm
,注意這個
ActionForm
要有被選定的數組屬性值哦!
?????? request.setAttribute(
"hobbyList"
, hobbyList);
?????? request.setAttribute(
"personForm"
, personForm);?
??????
??????
return
mapping.findForward(
"ready"
);
JSP
中:
<
logic:iterate
id
=
"hobbyName"
name
=
"hobbyList"
>
?????
???
???
<
html:multibox
property
=
"hobby"
>
???
???????
<
bean:write
name
=
"hobbyName"
/>
???
???
</
html:multibox
>
???
???
<
bean:write
name
=
"hobbyName"
/>
???
</
logic:iterate
>
解釋一下
jsp
中的參數。
hobbyList
就是那個一組備選愛好數組;
hobbyName
就是隨意定義的一個變量名,來接收
hobbyList
中的項;
hobby
就是
ActionForm
的那個數組屬性名稱;
?
看了這些,我自己都暈。。。這東西看來要自己領悟了!!!
我估計那個
html:radio
也是這么用,下次再研究。
有些存儲在數據庫或者某些文件的信息,可能會包含一些
html
標記的限定。例如把某句話加粗等。但是簡單的使用
<bean:write name=”” />
會把那些
html
標記給安全的轉換,但這不是我想要的。怎么解決,發現了
filter
這個屬性。應用如下:
在
Action
中我寫入這樣對象:
String html_1 = "<b>Hello</b>";
String html_2 = "<b>Hello</b>";
在
Jsp
中我這樣使用:
<bean:write name="html_1" filter="true"/>
<bean:write name="html_2" filter="false"/>
運行的效果:
<b>Hello</b>
Hello
作了一個PPT,還有代碼的講解。給我們的同學講過啦。在這里提供一下下載吧!
下載請點擊這里哦!