-----------------------------上傳頁面---------------------------------------------------------------
<%@page contentType="text/html; charset=gb2312" %>
<%@ taglib uri="/WEB-INF/struts-html" prefix="html"%>
<html>
<head>
<title>上傳圖片</title>
</head>
<body>
<h2>選擇圖片(JPEG格式, 大小小于1M)</h2>
<br>
<html:form action="/upload.do" enctype="multipart/form-data">
<html:errors/>
<table>
<tr>
<TD><html:file property="file" size="50"></html:file></TD>
</tr>
<TR height="20" valign="top" topmargin="0">
<TD>備注:</TD>
</tr>
<tr>
<TD><html:textarea rows="3" cols="40" property="memo"></html:textarea></TD>
</TR>
<tr>
<tr height="20">
</tr>
<tr>
<TD height="22" align="center">
<html:submit> 上 傳 </html: submit> <input type="button" value=" 取 消 " onclick="window.close()"/></TD>
</tr>
</table>
</html:form>
</body>
</html>
--------------------------------------action--UploadAction-----------------------------------------------------
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setCharacterEncoding("gb2312"); //如果不設置,彈出的提示框是亂碼
UploadForm uploadForm = (UploadForm) form;
FormFile file = uploadForm.getFile();
String memo = uploadForm.getMemo();
String fileName = file.getFileName();
int length = file.getFileSize();
InputStream imgStream = null;
ActionMessages msgs = new ActionMessages();
//向數據庫插入記錄
try {
imgStream = file.getInputStream();
UserImg newUserImg = new UserImg();
newUserImg.setImg(imgStream);
newUserImg.setImgName(fileName);
newUserImg.setMemo(memo);
newUserImg.setFileSize(length);
if(UploadImageDao.getInstance().insertImg(newUserImg))
{
response.getWriter().write(
CSScript.alertAndCloseScript(MessageKey.IMAGE_UPLOAD_SUCCESS));
return null;
}
else
{
msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
MessageKey.IMAGE_UPLOAD_FAILED));
saveErrors(request, msgs);
}
} catch (IOException e) {
msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
MessageKey.IMAGE_UPLOAD_FAILED));
saveErrors(request, msgs);
} finally {
try {
if (imgStream != null)
imgStream.close();
} catch (Exception e) {
//do nothing here
}
}
return mapping.getInputForward();
}
--------------------------------------彈出提示框的類----------------------------------------------------------
public final class CSScript {
private static final String S_OPEN = "<script>";
private static final String S_CLOSE = "</script>";
public static String alertAndCloseScript(String alert)
{
StringBuffer sb = new StringBuffer(S_OPEN);
sb.append("alert('").append(alert).append("!');");
sb.append("window.close();");
sb.append("window.opener.document.location.reload();");
sb.append(S_CLOSE);
return sb.toString();
}
public static String errorScript(String err)
{
StringBuffer sb = new StringBuffer(S_OPEN);
sb.append("alert('").append(err).append("!');");
sb.append(S_CLOSE);
return sb.toString();
}
public static String alertScript(String alert)
{
StringBuffer sb = new StringBuffer(S_OPEN);
sb.append("alert('").append(alert).append("!');");
sb.append(S_CLOSE);
return sb.toString();
}
}
---------------------------------------插入數據庫的方法-----------------------------------------------------
public boolean insertImg(UserImg userImg)
{
Session session = HibernateSessionFactory.getSession();
Transaction tran = session.beginTransaction();
try
{
Connection conn = session.connection();
PreparedStatement psta = conn.prepareStatement("insert into userImg values(?,?,?)");
psta.setString(1,userImg.getImgName());
psta.setBinaryStream(2, userImg.getImg(),userImg.getFileSize());
psta.setString(3, userImg.getMemo());
psta.execute();
tran.commit();
}
catch(Exception e)
{
e.printStackTrace();
tran.rollback();
return false;
}
finally
{
HibernateSessionFactory.closeSession();
}
return true;
}
注意,這里可以看到涌到了hibernate的session,但還是用的jdbc插入數據庫,是因為hibernate對image類型的字段支持不好。
-----------------------------------------讀取圖片的action-getImg.do-----------------------------------------------------------
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
int id = Integer.parseInt(request.getParameter("id"));
InputStream inStream = UploadImageDao.getInstance().getImg(id);
response.setContentType("image/pjpeg");
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = inStream.read(buffer, 0, 1024)) != -1) {
baos.write(buffer, 0, bytesRead);
}
OutputStream outs = response.getOutputStream();
outs.write(baos.toByteArray());
outs.flush();
inStream.close();
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
頁面中顯示圖片,這么寫
<img width="100" height="100" src="getImg.do?id=<bean:write name="list" property="id"/>" />
以拉攏客戶為榮、以投靠客戶為恥,
以崇尚技術為榮、以黑人電腦為恥,
以多寫代碼為榮、以拷貝粘貼為恥,
以團隊協作為榮、以偷干私活為恥,
以無私奉獻為榮、以跳槽走人為恥,
以辦事聽話為榮、以遲到早退為恥,
以收發伊妹為榮、以提筆耗紙為恥
2007年4月11日 星期三
上班的第二個星期,昨天,臨下班的時候終于能上網了呵呵,上一個星期里,真的是煎熬啊,還不如交給我一些事做,讓我忙活忙活 ,什么事都沒有,沒人理,電腦沒有網絡,剛重裝的系統,什么軟件沒有,哦天哪,想起以前石家莊的那個公司,雖然規模不大,但是很溫馨,給剛去的員工配一名 導師來幫助 新員工融入新集體,還帶著到各部分 認識同事,呵呵,這倒好,整個沒人理,哦天,這就是大公司?唉 ,也不算什么大公司,與石家莊的我的那家公司比吧,真的是比較失望,什么都不給講,莫名其妙的,什么時候上班什么時候下班都不給講,可能還沒正式開始? 唉,算了不說了,亂七八糟的。
說說今天吧,還是說昨天,呵呵,昨下午來了個人(據說是我們部門的老總)把我們郵箱要去了,然后能上網了就受到了封郵件,說是要培訓,先自己學習一下,今 天到了就打開電腦,開始看,真的很郁悶,和我同去的幾個人,都有人安排事做,就沒人理我,真的是納悶有郁悶,狗日的,到底是為啥?看我能力不行?
下午吃完中午飯回來,趴了會兒,剛清醒過來,來了個人,讓我們去聽課培訓,讓去就去吧,結果是講銷售方法的,我暈,聽吧,還是能聽到一些有意義的東西的, 我發現我們部門也沒多少人啊,狗日的,連我們部門頭兒是誰,都不知道,呵呵,是不是我有問題?我應該主動去問?是這樣么?
聽課下來聽的我頭疼,下班了 回家 呵呵。一天就這么過去了。真快。
創建時間:2007年4月4日, 10:58:38
年前買的Effective java到今天就看了三條,今天帶到公司看。寫這書的人有多豐富的經驗阿,太
有才啦,哈哈,各種情況面面俱到,太厲害了,邊看邊佩服人家,哈哈。書上的每一句話,都要得
仔細的琢磨,仔細的回味,真的回味無窮,受益匪淺,相信像我這樣的水平還沒有體會出更深層次
的內涵,先寫下自己的一點體會。
創建和銷毀對象
--避免創建重復對象
這里的說法都不是絕對的,對于比較龐大的對象創建成本是昂貴的,而這個對象是不變的,
所以我們可以重用它,以減少內存增加。
避免創建重復對象的方法,有幾種,這要看在什么場合,可以使用靜態工廠方法,可以使
用static代碼塊,可以使用延時加載(也就是只有在需要這個對象的時候才在第一次初始
化)
--消除過期的對象引用
這里面有個名詞,就是過期引用,過期引用就是那些已經沒有實際用處的引用,這些對象
引用不會被垃圾回收機制發現,所以必須由程序員手動告訴垃圾回收機制這個對象引用沒
用了,可以回收了,如何告訴它呢,把引用=null就可以了。
--避免使用終結函數
finalizer函數不能保證會被調用,這一點增加了不確定性,簡單的說finalizer這家伙是
不可信任的,交給它的事可能辦,也可能不辦,這是不確定的,所以我們不能放心的交給
它重要的任務。
如果想清理某個對象,可以考慮在try...catch...finally{中執行},它能保證即使產生異
常,也能保證清理會被執行。
上周五第一天上班,到今天,每天都在這死死的坐著,一個除了系統文件沒有其他任何東西的機器,
沒有網絡,沒有人理,真是無聊的人,怎么也得給介紹一下公司的情況,講講作息時間,各項制度、
規定之類的,幾點上班幾點下班都沒說過,大家都在忙什么?有事找誰都不知道,我暈。
一個上午又過去了,無聊,發發牢騷,呵呵。
java Studio Creator
java.lang.IllegalArgumentException:Cannot invoke ***Form.set*** - argument type mismatch
Form中是Date類型,把Date換成String;在Action中進行轉換;當然轉換要借助于SimpleDateFormate方法
上傳文件時在form中增加enctype="multipart/form-data"
org.hibernate.PropertyAccessException: exception setting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) setter of com.cs.data.project.ProjectImage.setShenbao1
查詢結果中包含null的項 對于一些數字項包含null,定義該項時必須使用wrapper類型,而不能是primitive類型,例如使用Integer等,而不能是int否則會拋出exception!
1.250定律
拉德認為:每一位顧客身后,大體有250名親朋好友。如果您贏得了一位顧客的好感,就意味著贏得了250個人的好感;反之,如果你得罪了一名顧客,也 就意味著得罪了250 名顧客。 在你的網站訪客中,一個訪客可能可以帶來一群訪客,任何網站都有起步和發展的過程,這個過程中此定律尤其重要。
2.達維多定律
達維多認為,一個企業要想在市場上總是占據主導地位,那么就要做到第一個開發出新產品,又第一個淘汰自己的老產品。 國內網站跟風太嚴重,比如前 段時間的格子網,乞討網,博客網,一個成功了,大家一擁而上。但實際效果是,第一個出名的往往最成功,所以在網站的定位上,要動自己的腦筋,不是去撿人家 剩下的客戶。同理,買人家出售的數據來建站效果是很糟糕的。
3.木桶定律
水桶定律是指,一只水桶能裝多少水,完全取決于它最短的那塊木板。這就是說任何一個組織都可能面臨的一個共同問題,即構成組織的各個部分往往決定了整 個組織的水平。 注意審視自己的網站,是速度最糟糕?美工最糟糕?宣傳最糟糕?你首先要做的,不是改進你最強的,而應該是你最薄弱的。
4.馬太效應
《新約》中有這樣一個故事,一個國王遠行前,交給三個仆人每人一錠銀子,吩咐他們:“你們去做生意,等我回來時,再來見我。”國王回來時,第一個仆人 說: “主人,你交給我們的一錠銀子,我已賺了10錠。”于是國王獎勵他10座城邑。第二個仆人報告說:“主人,你給我的一錠銀子,我已賺了5錠。” 于 是國王例獎勵了他5座城邑。第三個仆人報告說:“主人,你給我的一錠銀子,我一直包在手巾里存著,我怕丟失,一直沒有拿出來。”于是國王命令將第三個仆人 的一錠銀子也賞給第一個仆人,并且說:“凡是少的,就連他所有的也要奪過來。凡是多的,還要給他,叫他多多益善。”這就是馬太效應。 在同類網站中, 馬太效應是很明顯的。一個出名的社區,比一個新建的社區,更容易吸引到新客戶。啟示是,如果你無法把網站做大,那么你要做專。作專之后再做大就更容易。
5.手表定理
手表定理是指一個人有一只表時,可以知道現在是幾點鐘,而當他同時擁有兩只表時卻無法確定。
一個網站,你只需要關注你特定的用戶群需求。不要在意不相干人的看法。
6.不值得定律
不值得定律:不值得做的事情,就不值得做好 不要過度seo,如果你不是想只做垃圾站。不要把時間浪費在美化再美化頁面,優化再優化程序,在你網站能盈利后,這些事情可以交給技術人員完成。
7.彼得原理
勞倫斯.彼得認為:在各種組織中,由于習慣于對在某個等級上稱職的人員進行晉升提拔,因而雇員總是趨向于晉升到其不稱職的地位。
不要輕易改變自己網站的定位。如博客網想變門戶,盛大想做娛樂,大家拭目以待吧。
8.零和游戲原理
當你看到兩位對弈者時,你就可以說他們正在玩“零和游戲”。因為在大多數情況下, 總會有一個贏,一個輸,如果我們把獲勝計算為得1分,而輸棋為-1 分,那么,這兩人得分之和就是:1+(-1)=0 不要把目光一直盯在你的競爭網站上,不要花太多時間搶它的訪客。我們把這些時間用來尋找互補的合作 網站,挖掘新訪客。
9.華盛頓合作規律
華盛頓合作規律說的是: 一個人敷衍了事,兩個人互相推諉, 三個人則永無成事之日。 如果你看準一個方向,你自己干,缺人手就招。不要輕易找同伴一起搞網站,否則你會發現,日子似乎越過越快了,事情越做越慢了。
10.邦尼人力定律
一個人一分鐘可以挖一個洞,六十個人一秒種卻挖不了一個洞。合作是一個問題,如何合作也是一個問題。
你需要有計劃。
11.牛蛙效應
把一只牛蛙放在開水鍋里,牛蛙會很快跳出來;但當你把它放在冷水里,它不會跳出來,然后慢慢加熱,起初牛蛙出于懶惰,不會有什么動作,當水溫高到它無 法忍受的時候,想出來,但已經沒有了力氣。 如果你是soho,注意關注你的財務。不要等到沒錢了再想怎么掙,你會發現那時候掙錢更難。
12.蘑菇管理
蘑菇管理是許多組織對待初出茅廬者的一種管理方法,初學者被置于陰暗的角落(不受重視的部門,或打雜跑腿的工作),澆上一頭大糞(無端的批評、指責、代人受過),任其自生自滅(得不到必要的指導和提攜)。
做網站畢竟要遭遇這樣的階段,搜索引擎不理你,友情鏈接找不到,訪客不上門。這是磨練。
13.奧卡姆剃刀定律
如無必要,勿增實體。
把網站做得簡單,再簡單,簡單到非常實用,而不是花俏。google的首頁為什么比雅虎好?
14.巴萊多定律(Paredo 也叫二八定律)
你所完成的工作里80%的成果,來自于你20%的付出;而80%的付出,只換來20%的成果。
隨時衡量你所做的工作,哪些是最有效果的。
1.馬蠅效應
林肯少年時和他的兄弟在肯塔基老家的一個農場里犁玉米地,林肯吆馬,他兄弟扶犁,而那匹馬很懶,慢慢騰騰,走走停停。可是有一段時間馬走得飛快。 林 肯感到奇怪,到了地頭,他發現有一只很大的馬蠅叮在馬身上,他就把馬蠅打落了。看到馬蠅被打落了,他兄弟就抱怨說:”哎呀,你為什么要打掉它,正是那家伙 使馬跑起來的嘛!” 在你心滿意足的時候,去尋找你的馬蠅。沒有firefox,不會有ie7,firefox就是微軟的馬蠅之一。馬蠅不可怕,怕的 是會一口吃掉你的東西,像 ie當初對網景干的那樣。
2.最高氣溫效應
每天最熱總是下午2 時左右,我們總認為這個時候太陽最厲害,其實這時的太陽早已偏西,不再是供給最大熱量的時候了。此時氣溫之所以最高,不過是源于此前的熱量積累。
你今天的網站流量,是你一個星期或更長時間前所做的事帶來的。
3.超限效應(溢出效應)
刺激過多、過強和作用時間過久而引起心理極不耐煩或反抗的心理現象,稱之為“超限效應”。 別到別人論壇里發太多廣告。別在自己網站上放太多廣告。別在自己的論壇里太多地太明顯地誘導話題。
4.懶螞蟻效應
生物學家研究發現,成群的螞蟻中,大部分螞蟻很勤勞,尋找、搬運食物爭先恐后,少數螞蟻卻東張西望不干活。當食物來源斷絕或蟻窩被破壞時,那些勤快的 螞蟻一籌莫展。“懶螞蟻”則“挺身而出”,帶領眾伙伴向它早已偵察到的新的食物源轉移。 不要把注意力僅僅放在一個網站上,即使這個網站現在為你帶來 一切。你要給自己一些時間尋找新的可行的方向,以備萬一。
5.長尾理論
ChrisAnderson認為,只要存儲和流通的渠道足夠大,需求不旺或銷量不佳的產品共同占據的市場份額就可以和那些數量不多的熱賣品所占據的市 場份額相匹敵甚至更大。 對于搜索引擎,未必你需要一個熱門詞排在第一位,如果有一千個冷門詞排在第一位,效果不但一樣,還會更穩定更長遠。
6.破窗理論
棟建筑上的一塊玻璃,又沒有及時修好,別人就可能受到某些暗示性的縱容,去打碎更多的玻璃。 管理論壇時,如果你發現第一個垃圾貼,趕緊刪掉他吧。想想:落伍現在為什么那么多××貼?現在控制比最初控制難多了。
7.“羊群效應”,又稱復制原則(Copy Strategy)
一個羊群(集體)是一個很散亂的組織,平時大家在一起盲目地左沖右撞。如果一頭羊發現了一片肥沃的綠草地,并在那里吃到了新鮮的青草,后來的羊群就會一哄而上,爭搶那里的青草,全然不顧旁邊虎視眈眈的狼,或者看不到其它地方還有更好的青草。
不要輕易跟風,保持自己思考的能力。
8.墨菲定律
如果壞事情有可能發生,不管這種可能性多么小,它總會發生,并引起最大可能的損失。
除非垃圾站,否則不要作弊,對搜索引擎不要,對廣告也不要。
9.光環效應
人們對人的某種品質或特點有清晰的知覺,印象比較深刻、突出, 這種強烈的知覺, 就像月暈形式的光環一樣,向周圍彌漫、擴散,掩蓋了對這個人的其他品質或特點的認識。
不要輕易崇拜一個人或者公司、一個概念、一種做法。
10.蝴蝶效應
一只亞馬遜河流域熱帶雨林中的蝴蝶,偶爾扇動幾下翅膀,兩周后,可能在美國德克薩斯州引起一場龍卷風。
不管你做什么,網站或者其他,你都應該關注新聞。機遇或者災難可能就在那。
11.阿爾巴德定理
一個企業經營成功與否,全靠對顧客的要求了解到什么程度。 我贊同別人的點評:看到了別人的需要,你就成功了一半;滿足了別人的需求,你就成功了全部。
尤其是做網站。
12.史密斯原則
如果你不能戰勝他們,你就加入到他們之中去。
不要試圖做孤膽英雄。如果潮流擋不住,至少,你要去思考為什么。
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:72)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:307)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:109)
at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:105)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1561)
at org.hibernate.loader.Loader.doQuery(Loader.java:661)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:223)
at org.hibernate.loader.Loader.doList(Loader.java:2147)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2026)
at org.hibernate.loader.Loader.list(Loader.java:2021)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:369)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:298)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:137)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1014)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
Caused by: java.sql.SQLException: Network error IOException: Connection refused: connect
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:372)
at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:178)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:140)
at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:110)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:304)
... 40 more
這是我剛剛重做的系統,配了java的環境,在tomcat下啟動一個項目的錯誤提示,找了半天sql連接字符串中的密碼 sa之類的錯誤,無果,后來想到是不是sqlserver沒裝sp3的問題,立馬從網上下了sp3裝,再試,成了,哈哈,這種拒絕連接的錯誤,想來也不是密碼不對,記得以前見過密碼不對的情況,會提示sa密碼不正確,令我納悶的是我的另一個機子是2000系統好像也沒有裝過sp3,也能用啊。
復習一下java虛擬機配環境變量,設兩個,一個path=java目錄的bin文件夾,另一個classPath=java目錄的lib文件夾,這次在裝eclipse的時候打開報找不到虛擬機的錯,配了環境變量就好了。
哈哈,裝了一晚上的機,學了復習了不少東西。明天干活,哈哈,睡覺。
好久 沒上來寫了 ,課上完了 ,忙著找工作
這些日子 從年前到現在 一直在 忙那個郵票系統,學了不少東西,現在終于看到曙光了,呵呵,發現自己 整理業務邏輯思路的能力不夠,不會抓住重點,看來這還是講求一套方法的,那個有經驗的家伙很容易的就抓住了問題的重點,提的問題都是在點子上了,果然是高手,呵呵 。
寫代碼是很有意思的,很有技巧的,有的設計是很妙不可言的 ,哈哈 好像用詞不當,期間又很多知識 感覺寫下來的,可能是過于急于進度。
希望快點找個工作掙錢,呵呵快頂不住了
隨著Internet網絡的迅速發展,基于互聯網的企業應用要求軟 件平臺具有開放性、分布性和平臺無關性。于是就相繼出現了RPC/COM/CORBA等技術,但這些技術在實際應用中存在著許多不足和局限。它們的特定協 議難以通過防火墻,因而不適于Web上的應用開發。為了進一步開發基于Web的應用,出現了Sun公司的Sun ONE(Open Net Environment 開發網絡環境)和Microsoft公司的.net等Web 服務技術體系。
Sun ONE體系結構以Java語言為核心,包括J2SE/J2EE/J2ME和一系列的標準、技術及協議。它包括Sun獨有的iPlanet軟件系列,其中有 在市場上受歡迎的LDAP目錄服務器軟件,以及Forte for Java――便于在任何環境下書寫Java 語言的軟件工具。我們很容易就能從網上免費獲得和使用包括Java 集成開發環境、Java數據庫和中間件(Application Server)服務器等產品,以及它們的源代碼。Sun ONE更接近或能滿足互聯網在智能化Web服務方面對分布性、開發性和平臺無關性的要求。
隨 著Java技術的不斷發展,它根據市場進一步細分為:針對企業網應用的J2EE(Java 2 EntERPrise Edition)、針對普通PC應用的J2SE(Java 2 Standard Edition)和針對嵌入式設備及消費類電器的J2ME(Java 2 Micro Edition)三個版本。本文就Sun ONE的Java核心應用――J2SE/J2EE/J2ME作一些介紹。
J2EE技術應用
J2EE是Sun公司推出的一種全新概念的模型,比傳統的互聯網應用程序模型更有優勢。
J2EE模型
J2EE的應用編程模型(J2EE Blueprints)提供了一種用于實施基于J2EE多層應用的文檔和實例套件的體系模型,簡化了這項復雜的工作。它被開發人員用作設計和優化組件,以便開發人員從策略上對開發工作進行分工。
J2EE應用編程模型要求開發者將自己的工作分成兩類:商業邏輯和表示邏輯,其余則由系統資源自動處理,不必為中間層管道進行編碼。這樣,開發人員就能將更多的時間花在商業邏輯和表示邏輯上。對重視縮短項目周期的公司來說,這種轉變深受歡迎。
J2EE平臺
J2EE 平臺是運行J2EE應用的標準環境,由J2EE部署規范(一套所有J2EE平臺產品都必須支持的標準)、IETF標準集和CORBA標準組成。最新的 J2EE平臺還添加了JavaBean組件模型。開發人員可以利用JavaBean組件模型來自定義Java類實例,并可通過已定義的事件訪問Java 類。
J2EE支持EJB,因此開發人員可以執行多用戶交易功能。當在J2EE服務器上運行時,Enterprise JavaBeans將應用邏輯分成可再利用和可擴展的代碼段。Enterprise JavaBeans并不是新特征,但是通過定義標準客戶端和服務API,J2EE增強了它的能力和可移植性。
EJB在服務器的一個容器內運行,提供所有典型的中間層服務,如事務管理、安全、遠程客戶連接、生存周期管理和數據庫連接緩沖。為了讓事務系統在存在EJB容器的情況下運行,開發人員只需在部署描述文件中定義Beans的事務屬性即可。
J2EE通過定義一組標準的結構來實現它的優勢,例如:
1.J2EE Application Programming Model,是一種用于開發多層次、瘦型客戶用戶程序的標準設計模型;
2. J2EE Platform,是一個標準的平臺,用來整合J2EE的應用程序,并指定一系列的接口和方法;
3. J2EE Compatibility Test Suite,是一套兼容測試組件,用來檢測產品是否同J2EE平臺兼容;
4.J2EE Reference Implementation,用來示范J2EE的能力。
J2EE服務器
Sun 的J2EE服務器通過Java 命名和目錄接口(JNDI)、認證、HTTP及與Enterprise JavaBeans兼容的能力,提供命名和目錄服務。JNDI是Java平臺的一種標準擴展版,向企業內的命名和目錄服務提供具有Java功能的,帶有統 一接口的應用,包括LDAP。
J2EE服務器還利用了Java Servlet技術。Java Servlet可以看作是運行在服務器上的一個小程序,它向開發人員提供以組件為基礎創建基于Web應用的、獨立于平臺的方法。它不像利用CGI那樣具有 性能局限。Java Servlet是一種擴展Web服務器功能的簡單技巧。由于它是用Java編寫的,因而能夠訪問整個Java API庫,也包括用于訪問企業數據庫的JDBC API。
JSP是Java Servlet的一種擴展。Java Servlet提供開發和顯示來自服務器的交互式Web頁。如今JSP又有了進一步的改進,它使得創建和支持靜態模板和動態內容相結合的HTML和XML頁面更加容易。
安全性
J2EE 平臺定義了一種標準的公開存取控制規則,當程序在企業平臺上開發時就已被程序師定義和解釋了。J2EE也需要提供一個標準的注冊機制,以便應用程序不會將 這些注冊機制和邏輯相混合,從而使相同的工作執行于大量的不同環境中時并不需要改變源代碼。例如:J2EE應用程序開發人員可以指定幾個安全級別,當用戶 訪問數據時,他們可寫出代碼來檢查當前用戶權限的級別。在開發階段,開發人員賦予多組用戶適當的安全級,使應用程序在執行限制操作之前能夠容易的判斷限制 級。
J2EE 平臺是Java技術企業級應用的最佳平臺,它可以讓程序員迅速、快捷地開發和分布企業級應應用程序。以下便是它的相關技術:
1.Enterprise JavaBeans Architecture,企業級JavaBeans 定義了一個應用程序接口。它可以使程序員迅速開發、發布和管理跨平臺的、基于組件的企業級應用程序。
2.JavaServer Pages,JSP 技術提供了一種簡單、快速的方法來創建動態網頁。通過它,可以快速地開發基于Web的應用程序,并且這些應用程序都是與平臺無關的。因為JSP與ASP很相似,所以熟悉ASP的人學習它就很容易了。
3.Java Servlet,提供了應用程序接口。通過它可以簡單快速地開發并擴展服務器功能。就發展趨勢來看,它將來有可能取代CGI。
4.J2EE Connector,提供了一種標準結構來聯接不同的企業信息平臺。
5.Java Naming and Directory Interface(JNDI),在Java 平臺與商業信息之間,JNDI提供了統一、無縫的標準化連接。通過使用JNDI,程序員可以在企業多命名與目錄服務之間傳送Java 應用程序。
6.Java Interface Definition Language(JIDL),通過使用CORBA,可以提供協同工作的能力。JIDL包括一個IDL-to-Java 編譯器和支持IIOP(Internet Inter-Orb Protocol)的ORB。
7.JDBC,幾乎是為所有的數據庫提供了統一的接口,同時可以創建高級工具和接口。
8.Java Message Service(JMS),它幾乎規范了所有企業級消息服務,如可靠查詢、發布消息、訂閱雜志等各種各樣的PUSS/PULL技術的應用,并且為它們提供了一個標準接口。
9.Java Transaction API(JTA),為分布式系統中可處理的應用程序規定了一個高級的管理規范。
10.JavaMail,JavaMail應用程序接口提供了一整套模擬郵件系統的抽象類。通過JavaMail,可以創建郵件或消息應用程序。
11.RMI-IIOP,使用它就可以只用Java 技術和Java RMI接口開發客戶機與服務器的遠程接口。
J2EE 使用固定的文件格式捆綁某個模塊:用.ear文件捆綁J2EE應用程序;用.jar捆綁Enterprise Bean。例如,一個.ear文件包含一個.xml文件作為其分布描述,還包含一個或多個.jar和.war文件;一個.jar文件除了包含它的分布描述 外,還包含了作為Enterprise bean的.class文件。
J2EE應用程序的開發階段分為四步:1.Enterprise Bean創建;2.Web Component創建;3.J2EE應用程序裝配;4.J2EE應用程序分布。以下是J2EE兼容產品部分列表:
BEA WebLogic Server 6.0、Borland App Server、HP Bluestone Total-e-Server、IBM WebSphere Application Server、IONA iPortal Application Server、iPlanet Application Server、Macromedia JRun Server、Oracle 9i Application Server、SilverStrean Application Server、Sybase EAServer、TogetherSoft ControlCenter、Java 2 SDK Enterprise Edition。
J2ME技術的應用
J2ME (Java 2 Platform Micro Edition)是為無線電子市場所設計的,包括JVM規范和API規范。其API規范是基于J2SE(Java 2 Standard Editon)的。J2ME 定義了一套合適的類庫和虛擬機技術。這些技術可以使用戶、服務提供商和設備制造商通過物理(有線)連接或無線連接,按照需要隨時使用豐富的應用程序。
J2ME 又被稱為Java 2 微型版,被使用在各種各樣的消費電子產品上,例如智能卡、手機、PDA、電視機頂盒等方面。當然了,J2ME也提供了Java語言一貫的特性,那就是跨平 臺和安全網絡傳輸。它使用了一系列更小的包,而且Javax.microedition.io 為J2SE包的子集。J2ME可以升級到J2SE和J2EE。
在J2ME出現之前,我們更多接觸到的是Java卡(Java Card)、嵌入式Java(Embedded Java)和實時Java(Real Time Java)等。其中Java卡是針對SIM卡、智能卡等設備而定制的最小Java子集,比J2ME還要小,移植性也不強。嵌入式Java則針對特殊用戶自 行配置Java類庫和VM(Virtual Machine,虛擬機)。它對資源需求極小,可運行在無圖形用戶接口和網絡的設備上,可以添加用戶專用的API,但是它就無法移植。實時Java是由 IBM領導的實時定制Java專家組負責實施的,現在還在不斷完善中。不過,從嚴格意義上來說,它們都不是真正的J2ME。
像其它版本一樣,J2ME具有很多Java技術特性,主要有:
1.可以在各種支持Java的設備上運行;
2.代碼短小;
3.充分利用Java語言的優勢;
4.安全性好;
5.用J2ME實現的應用可以方便地升級到J2SE、J2EE。
J2ME的配置和框架
為了支持用戶和嵌入式市場提出的靈活性和可定制性要求,J2ME被設計得更加模塊化和可縮放化。J2ME在設備原有的操作系統上建造了3層軟件來實現這種要求:
1.JVM層,這層基于宿主操作系統,按照某一種J2ME的配置,實現了JVM。
2.配置層,這層對于用戶可見度要低一些,但對框架層非常重要。它針對“水平”市場的需求,定義了Java虛擬機的最小功能集和Java類庫的最小集合。在某種意義上,配置層定義了開發者在所有設備上都可以使用Java特性和類庫的“最小公分母”。
3. 框架層,這層對于用戶和應用程序提供者來說是最常見的。它針對“垂直”市場的需求,定義了Java虛擬機的最小功能集和Java類庫的最小集合。其框架是 基于特定的配置層實現的。只要設備支持相同的框架層,針對特定框架層開發的應用程序就可以移植到其它設備上。一個設備可以支持多個框架層。
在J2ME 設備中,JVM與配置層緊密相連,它們體現了每一類設備的基本功能。框架層針對不同的設備,在配置層的基礎上規定了附加的API。為了滿足不斷更新的應用 程序,框架層可以擴充新的Java庫類。在不遠的將來,隨著新設備的不斷出現,J2ME技術將提供范圍廣泛的框架層、配置層和VM。JCP(Java Community Process)可以為客戶和開發商提供規范。根據JCP的定義,J2ME目前的一種配置層是“面向連接的設備配置”層(Connected Device Configuration),它采用典型的Java虛擬機技術。這種全功能的VM包含了基于臺式機系統上的虛擬機的所有功能,適用于擁有至少幾兆字節內 存的設備。對于無線設備和其它內存不足的設備,J2ME采用“面向連接的受限設備配置”(CLDC)技術。
KVM是J2ME的核心特 征。它是一個可移植性非常高的JVM,專用于內存小、資源有限、能上網的設備,例如蜂窩電話、尋呼機和個人組織器等。這些器件一般都含有16或32位的處 理器,最低128KB內存。KVM能夠被靈活應用到各種行業、各種類型的設備上,并能夠適應這些設備的多樣化所帶來的問題,比如處理器的耗電量、內存的大 小、設備和應用程序的特殊功能等問題。
CLDC技術
CLDC定義了目標Java平臺,該平臺基于小型的、資源較少的、內存僅有160~512K的設備。CLDC是由KVM和用在蜂窩電話、數字產品、雙向尋呼機、個人組織器和家用電器等核心庫類及接口組成。使用CLDC技術有很多優點:
1.跨平臺,這點保留了Java一貫的特點,應用程序不會隨著平臺差異而產生變化。
2.動態性,這點也是很吸引人的,可以根據需要下載自己喜歡的應用程序和服務,并且可以和其它的CLDC設備通信。
3.安全性,Java 本身的特點造就了這一特性。
與 J2SE相比,CLDC缺少下列所說的特征:
1.AWT(抽象窗口開發包),Swing或其它圖形庫;
2.用戶定義類裝載器;
3.類實例的最終化;
4.弱的引用;
5.RMI;
6.Reflection(映射)。
CLDC 有四個包:java.lang、java.util、java.io和javax.microedition。除了javax.microedition 包以外,其它的幾個包都是J2SE包的核心子集。CLDC采用這些J2SE類庫,但是把其中一些在微型設備中用不到類、屬性和方法去掉了。
J2ME定義兩個配置:Connected Device Configuration(連接設備配置,CDC)和限制性更強的Connected Limited Device Configuration(有限連接設備配置,CLDC)。
J2SE技術的應用
Java 2標準版是一種開發和部署平臺,提供了編寫桌面、工作站應用程序所有必需的功能。J2SE軟件是快速開發、部署關鍵任務和企業應用程序的首選解決方案。 J2SE 1.4版本是基于Java跨平臺技術和強有力的安全模塊而開發的,其最新的特征和功能極大地提高了Java語言的伸縮性、靈活性、適用性,以及可靠性。
J2SE 1.4 特點:
1.良好的計算性能和縮放能力。
J2SE 1.4版是一個快速開發和配置跨平臺的企業級應用與服務的綜合性平臺。它提升了Java計算的性能與縮放能力,代表了Java技術的大跨步進展。有了 J2SE 1.4版,企業就可以通過更簡易的步驟、花費更少的時間,采用Java技術開發與配置要求更高的應用了。J2SE 1.4版在Java客戶機應用方面得到了重大性能提升。基于Swing的Java小程序和應用程序在圖形用戶界面(GUI)的響應速度上也大有提高。
2.跨平臺。
J2SE 1.4版是一個具有綜合性能的平臺,能使一個完整的、可縮放的高性能應用配置在任何種類的平臺上。
3.支持Web服務。
J2SE 1.4版與以前各J2SE版全面兼容。J2SE 1.4版對SSL、LDAP和CORBA等業界標準技術也給予支持,因此保證了在不同平臺、系統和環境間的互操作能力。J2SE 1.4版支持XML技術和一整套安全服務,因此為基于各類標準的可互操作應用與服務的創建奠定了重要基礎。有了J2SE 1.4版與Java Web Services Developer Pack的結合,開發商就能創建、測試和配置Web服務了。
4.完整性。J2SE 1.4版還是一個完整的開發環境。開發商可基于這一環境創建功能豐富的交互式應用。這些應用可以配置在任何平臺上。J2SE 1.4具有新的GUI控制功能、快速的Java 2DT圖形功能、支持國際化與本地化擴展和新的配置選項,并對Windows XP提供擴展支持。
總之,J2SE 1.4版是多種不同風格軟件的開發基礎,包括客戶端Java小程序和應用程序,以及獨立的服務器應用程序等。J2SE 1.4版還是J2ME的基礎,是J2EE執行程序的推動力。
Java 之所以能夠發展得很快,是因為互聯網的發展非常快。Java可以和瀏覽器結合在一起,因而很自然地在桌面系統得到廣泛應用。從計算的結構來看,Java主 要分三大類:第一是服務器端,這里就有了J2EE企業版;第二是桌面PC,這一類用的是J2SE標準版;第三就是掌上電腦、移動設備,用的都是J2ME。 但是,大部分非企業級軟件還是在J2SE上開發的比較多。首先,這是因為很多的應用軟件都是在J2SE上開發的;其次,J2SE是和J2EE兼容的,企業 版是在標準版上的擴充,在J2SE的版本上開發的軟件,拿到企業的平臺上是一樣可以運行的;再次,一般開發還是在J2SE的環境上,只是說J2ME提供微 型版的一個環境。在J2SE上虛擬出一個環境,開發出來的應用軟件是可以拿到微型版上運行的。
{
public void changeApple(Apple a)
{
Apple a2 = new Apple();
a2.color = "red";
a = a2;
}
public void changeApple2(Apple a)
{
a.color = "red";
}
public static void main(String[] args)
{
Apple a = new Apple();
a.color="blue";
new Test().changeApple(a);
System.out.println(a.color);
new Test().changeApple2(a);
System.out.println(a.color);
}
}
class Apple
{
public String color;
}
//輸出結果:blue
red
剛剛看了高中時就喜歡得一個電臺主持人--清音的博客上的類似年終總結的文字,我想,我也應該總結一下吧,索性打開豬窩,呵呵,發現沒有人看,瀏覽人數還是那些,哈哈。
今年三十兒,除夕,中國人來說最重要的節日,剛才去超市,那個人叫多阿,原以為三十兒了,應該大多數人年貨都該買個差不多了吧,只等在家守歲了,沒想到還是那么火爆,看來城市人還是和我們鄉下不一樣啊。
06年,我大學畢業了。畢業了,不再是學生了,不用再抄作業了,坐火車不再打折了,離開了那些同居四年的兄弟們,自此各自各處漂泊~~
06年,憑我自己的能力找了自己第一份工作。欣喜,激動,開始踏實工作,感謝部門經理對我的關照,讓我從另一個起跑線起跑。
06年,我也掙錢了,哈哈,花自己掙的錢的感覺,舒服~~,老爸說為什么你總在花你爸的錢總像隔一層,呵呵,長大了,想自食其力了。
06年,害得她死去活來,痛。
06年,刻下傷疤的一年,掙扎。
06年,掉進河里,想逆流而上,并開始行動。
07年,應該會有一次暴風驟雨,一定要戰勝。
找回自己
大年二十五了,呵呵,剛才和一朋友在QQ上聊,過年沒什么感覺了,和平時沒什么兩樣,倒是給自己找了個邋遢的冠冕堂皇的理由。
2006過去了,過去一段時間了,黑色的2006,再見。
幾個月的培訓日子基本上結束了,這些天一直在住的地方貓著,呵呵,就是,一天不下樓不出屋,用某人的話說我沒什么愛好,除了正事什么也不做,呵呵,這話我愛聽,我做的又有哪些是正事呢。培訓了幾個月,感覺,沒什么感覺,呵呵,對找工作還是有心虛,哈哈,也不能因為這樣培一輩子訓不是,哈哈,還得向前。還差得遠。這幾個月寫了這么多的日志,算是一個不小的收獲吧,
2007會是什么樣子,網上說2007夏天的溫度將破紀錄,呵呵,看來得有心理準備了。
中間還有一個過年,還有幾天,感覺像是一個門檻,得怎樣邁過去阿/。
網絡真是好東西,遇到什么問題,都可以問它哈哈,這不,剛剛解決了幾個小問題,使我的程序順利通過了,哈哈
我想這么寫
<html:hidden property="bookId" value="<bean:write name="bookForm" property="id">"></html:hidden>
這么寫就不行,報equal symbol expected的錯誤,用Google翻譯過來是“預期符號相同”
在網上查
可以這么寫
<html:hidden property="bookId" value="${bookForm.id}"></html:hidden>
但必須jsp2.0以上,servlet2.4以上
在web.xml中
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
還有個小問題就是在web.xml中如果配置<taglib></taglib>標簽,就會有個紅叉,說什么
cvc-complex-type.2.4.a: Invalid content was found starting with element 'taglib'. One of '{"http://java.sun.com/xml/ns/j2ee":description, "http://java.sun.com/xml/ns/j2ee":display-name, "http://java.sun.com/xml/ns/j2ee":icon, "http://java.sun.com/xml/ns/j2ee":distributable, "http://java.sun.com/xml/ns/j2ee":context-param, "http://java.sun.com/xml/ns/j2ee":filter, "http://java.sun.com/xml/ns/j2ee":filter-mapping, "http://java.sun.com/xml/ns/j2ee":listener, "http://java.sun.com/xml/ns/j2ee":servlet, "http://java.sun.com/xml/ns/j2ee":servlet-mapping, "http://java.sun.com/xml/ns/j2ee":session-config, "http://java.sun.com/xml/ns/j2ee":mime-mapping, "http://java.sun.com/xml/ns/j2ee":welcome-file-list, "http://java.sun.com/xml/ns/j2ee":error-page, "http://java.sun.com/xml/ns/j2ee":jsp-config, "http://java.sun.com/xml/ns/j2ee":security-constraint, "http://java.sun.com/xml/ns/j2ee":login-config, "http://java.sun.com/xml/ns/j2ee":security-role, "http://java.sun.com/xml/ns/j2ee":env-entry, "http://java.sun.com/xml/ns/j2ee":ejb-ref, "http://java.sun.com/xml/ns/j2ee":ejb-local-ref, "http://java.sun.com/xml/ns/j2ee":service-ref, "http://java.sun.com/xml/ns/j2ee":resource-ref, "http://java.sun.com/xml/ns/j2ee":resource-env-ref, "http://java.sun.com/xml/ns/j2ee":message-destination-ref, "http://java.sun.com/xml/ns/j2ee":message-destination, "http://java.sun.com/xml/ns/j2ee":locale-encoding-mapping-list}' is expected.
雖然對程序運行沒什么障礙,但對我這個完美主義總是心里不舒服,在網上查
http://blog.csdn.net/heroying/archive/2007/02/03/1501873.aspx
給出了解釋
把<taglib></taglib>放在<jsp-config></jsp-config>里面就行了,哈哈,不錯不錯。
用于為long, short或者int類型生成唯一標識。只有在沒有其他進程往同一張表中插入數據時才能使用。 在集群下不要使用。
identity
對DB2,mysql, MS SQL Server, sybase和HypersonicSQL的內置標識字段提供支持。返回的標識符是long, short 或者int類型的。
sequence (序列)
在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence),而在Interbase中使用生成器(generator)。返回的標識符是long, short或者 int類型的。
hilo (高低位)
使用一個高/低位算法來高效的生成long, short或者 int類型的標識符。給定一個表和字段(默認分別是是hibernate_unique_key 和next)作為高位值得來源。高/低位算法生成的標識符只在一個特定的數據庫中是唯一的。在使用JTA獲得的連接或者用戶自行提供的連接中,不要使用這種生成器。
seqhilo(使用序列的高低位)
使用一個高/低位算法來高效的生成long, short或者 int類型的標識符,給定一個數據庫序列(sequence)的名字。
uuid.hex
用一個128-bit的UUID算法生成字符串類型的標識符。在一個網絡中唯一(使用了IP地址)。UUID被編碼為一個32位16進制數字的字符串。
uuid.string
使用同樣的UUID算法。UUID被編碼為一個16個字符長的任意ASCII字符組成的字符串。不能使用在PostgreSQL數據庫中
native(本地)
根據底層數據庫的能力選擇identity, sequence 或者hilo中的一個。
assigned(程序設置)
讓應用程序在save()之前為對象分配一個標示符。
foreign(外部引用)
使用另外一個相關聯的對象的標識符。和<one-to-one>聯合一起使用。
同時,這幾天也沒寫代碼,光東奔西看房了,因為鞋有點不合腳,左腳腫了,今天來上課,遲到了一個小時,也沒做什么,我做的那個BookShop跟老師做的那個思路不能銜接,不能跟著他往下走,按安排,明天最后一天了,狗日的,要放一個月假,不負責任的做法嘛。
住的危機暫時解決了,該恢復正常學習了。