我們終于進入了這個社會。從此結束了被學校老師看管的生涯,結束了做父母乖寶
貝的日子,也結束從父母兄長那里拿錢的幸福時光。
我們從家里搬了出來,提著自己半新不舊的行囊找了間不能再廉價的破房子租了下
來,開始了闖蕩的生活。
我們的眼光充滿了好奇,我們的血液里流淌著激情,我們的錢夾卻空前的瘦小。
在面對第一個老板第一批同事第一份工作的時候,我們是那樣的慷慨激昂,我們認
為自己無所不能,我們幻想很快就可以打造一片屬于自己的天地,我們對未來充滿了信
心。并且希望從別人艷羨的目光中找到一點點驕傲的資本。
可是漸漸的我們才知道,其實現實和自己的理想有著天壤之別。我們發現了老板是
多么的陰險狠毒同事是多么的勢利小氣工作是多么的枯燥無趣,我們也發現了房租水電
氣費把人愁死了。發薪的日子總好像遙不可及,商店里的東西仿佛只是為別人擺設,我
們還發現了只有周末跑到母校瞎逛才感覺釋然,只有和老同學一起聊天玩耍才真正開心
只有在步行街上看美女才不無聊。
漸漸的我們也學會了泡吧,酒吧迪吧水吧網吧玩具吧都是我們打發無聊時間的場
所??墒俏覀冞€是泡不到妞,以前自以為是的那些愛情理論泡馬子技巧在金錢時代都是
狗屁,都出奇的蒼白無力。于是我們感嘆世界變得太快,快得讓我們這些窮小子根本就
無所適從。
漸漸的我們也變得深沉起來,不再為一個很幼稚的笑話就哈哈大笑,不再動不動就
亂發牢騷,也不再把內心深處的秘密輕易地跟別人訴說。我們也說不清楚這到底是成
還是消沉,對著鏡子看,卻發現里面那張臉陌生得可怕。
漸漸的我們似乎大徹大悟了,什么都看透了,一切都虛無縹緲了,然后我們什么都
很漠然,坐公交車也不讓座了,看到小偷偷東西也懶得理了,吃點小虧想想也就算了,
但是我們卻在每天下班之前發愁晚餐該吃什么了,在大家一起喝茶的時候盤算著自己
不要買單,在臨睡之前把這個月的開支算了又算。
漸漸的我們感覺自己其實什么都不是,沒有錢沒有名沒有地位,身高也太矮了皮膚
也太黑了長相也太難看了,什么都要看人家的臉色,走在哪里都似乎低人一等,有時真
恨不得割脈上吊服毒跳樓自行了斷。
漸漸的我們也不想看書了,也不想談理想了,也不想談前途了,也不想花太多精力
胡思亂想。我們也不想聽音樂了,也不想看電影了,不過倒時??葱┏扇说牡?,交流
些黃色的笑話。我們開始沉迷于酒液里,沉迷于方城中,沉迷于低級場所內。家的概念
越來越模糊了,親情的感覺越來越遙遠了,除了在夢中偶爾回到家鄉之外,我們挺多可
以借助一條冰冷的電話線和家人說說一些開始偏離生活的話,卻看不到老爹老媽又長出
了多少根白頭發又多了幾道皺紋。
看到有人在球場上酣戰,我們似乎也想上去來兩腳,其實很久沒有運動的身體已經
無法支撐我們再跑多遠了,而且幾乎荒廢的球技讓我們懷疑自己那些踢球的年歲是不是
上輩子的事。
望著滿街穿著前衛的少男少女,我們開始表現出厭惡的表情,卻忘了自己前些年其
實有過之而無不及。遇到在大庭廣眾之下舉止親熱的學生情侶,我們的目光也變成了不
屑,并惡狠狠地罵他們傷風敗俗。
經過彩票銷售點的時候,我們忍不住也掏出一點本該買書的錢來買幾注,然后天
天
做夢中了五百萬之后多少萬買房子多少萬買車多少萬胡亂揮霍,可是每一次開獎雖然屢
屢有人中頭獎卻始終與自己無緣,于是在短暫的失望之后,我們依然鍥而不舍地做著美
夢。
漸漸的我們的人生觀、價值觀、愛情觀也有所改變。我們已經不認為為了往上爬而
不擇手段有什么不妥,我們對努力就有回報的說法嗤之以鼻,我們嘲笑所謂的貞節
觀,
所謂的責任感,希望甚至去找尋一夜情。
我們開始關注街上跑的車是寶馬還是奧拓,關注哪個酒廊的吧臺小姐酒量如何,關
注哪款手機用起來更加叉人眼,關注哪個牌子的西服穿起來更有派頭。但也就只是關注
而已,因為我們清楚無論是寶馬還是奧拓,我們都買不起,吧臺小姐酒量再不行,我
們
也不能把人家怎么樣,至于手機和西服,還是用自己買了很久的老款式。
不知從什么時候開始,我們為自己的遭遇感到憤憤不平了,我們越來越看不慣老板
猙獰的面目,越來越無法忍受同事的卑鄙齷齪,越來越不堪就這樣生活下去。于是我
在感嘆運氣不好的同時迫切地想改變自己的命運,我們左顧右盼,尋找機會,卻始終看
不到出路。
終于有一天,我們像火山爆發一樣,一沖動之下把老板炒了。收拾東西昂然地走
出
辦公室的那一刻我們有英雄離去那種豪邁與無悔,只從同事愕然與嘲諷夾雜的眼神中
隱看到一絲無奈,卻不知道等待自己的,將是無盡的痛苦與折磨。
我們很快發現了雖然自己擁有并不低的學歷和一定的工作經驗,并像跑場子一樣
從
這家公司跑到那家公司,一次接一次地應聘,可是根本就無法找到適合的工作。
時間一天一天過去,工作依然遙遠得不知子丑寅卯,錢包越來越癟了,交房租的日
子也越來越近了,我們心如火焚,有著世界末日即將來臨的惶恐。我們也開始有點后悔
自己太輕率就辭職了,也開始萌生鋌而走險的念頭,但又不敢真的去搶銀行綁架什么
的,心情低沉到了極點,我們的脾氣也大了,唉嘆聲也響了。
所幸這樣的日子終于結束了。我們又到了新的工作單位。這時候我們雖然或多或少
有點激動,但更多的是謹慎與慘淡。我們不會再對老板抱什么幻想,不會認為他會給我
們多好的待遇,我們也不會和同事談什么知心話,因為我們已經知道,不可能與有利益
沖突的人成為朋友,當然我們也不再愚蠢地把這個工作當事業一樣拼命,只把這里當
成
自己的一個跳板,一旦有機會就立馬走人。
接下來的生活無趣又無味,但我們漸漸的也就無所謂了。我們也不想泡吧了,不想
什么活著的意義了,老同學在一起也開始有點話不投機了,以前很少聯系的朋友,現在
更不想去聯系了,就算有時候接到他們打來的電話,也只是隨便吭吭唷唷的應付幾
句。
雖然酒還是經常喝,但很多時候都一個人獨飲獨醉了。這時候我們的寂寞更是深入骨
髓,我們的苦痛更加真切而細膩。我們空前地懷念在學校的那些歲月,我們會捧著畢業
合照發半天呆,我們卻不想再到母校去閑逛了,如果是偶然經過,看到曾經熟悉無比的
景物,心里還真的翻涌起一股酸
楚,但是我們不會流眼淚。畢業時曾經很賤的男兒淚如今又變得珍貴起來。
當然我們也還是經常上網,不過很多時候都是為了打發時間。我們很可能迷上了傳
奇之類的游戲,卻很少再光顧同學錄網頁,更不想在上面留言了。
我們無師自通的學會了自欺欺人,雖然我們在夜深夢回時也會憎恨自己的虛偽與
無
為,更討厭這種豬狗不如的生活方式,但是我們就象被囚禁的鳥,根本就無能為力。有
時候我們會自嘲似的給找很多借口來解釋自己的某種行為,盡管我們也知道這樣做其
實
毫無意思,也毫無必要。
我們開始不斷地聽到老同學們結婚的消息、升職的消息。然后我們不經意地就想到
某某在學校時的樣子,然后我們不由得感嘆時間流逝之無情,然后我們就想在塵封已
久
的日記本上寫點什么,然后我們不知不覺地眼角竟然也有點濕潤了。
我們夜里躺在床上睜大眼睛,卻無法在漆黑中排遣郁悶
我們夜里躺在床上睜大眼睛,卻無法在漆黑中排遣郁悶時,就會格外的想有個人陪在身
邊。很多往事會像潮水一樣向我們撲來。我們曾經暗戀過的人、曾經追求過但失敗了的
人、
曾經相愛過的人,都一一地閃過腦海,于是,心里會有種傷感,很純粹的傷感。因為我
們知
道,愛情其實真的已經與我們離得很遠。
我們試著通過各種途徑來結交朋友,但是每每交往了幾次,我們就不想再與他們來往。
說不清楚是因為他們太過于現實還是我們太封閉。我們于是感慨萬千,在這個很多人都
戴面
具生活的社會,原來交一個真正的朋友竟然那么難。我們也試著去約會,可是愛情并非
喝水
吃飯那么簡單,到最后都還是以失敗告終。高不成低不就的我們繼續高舉單身的旗幟游
走于
大街小巷。
我們非常懷念學生時代那種單純的戀情,非常羨慕那些還能坐在教室中的年輕人,非常
希望自己可以再讀一次大學,但是我們也知道,潑出去的水怎么能夠收回,遠逝的時光
如何
可能重來?
我們的酒量越來越大,一打啤酒喝下去一只手指在眼前豎著也無法看成兩只手指。我們
的腰越來越粗背越來越寬肚皮越來越大,日漸增多的脂肪很是晃眼。我們爬上樓梯的動
作越
來越笨拙,也越來越吃力,才到三樓就已經氣喘吁吁。
我們向往著能到外面去走一走,看一看,卻又害怕淪落天涯,苦不堪言。我們越來越覺
得錢鐘書老人的圍城理論精辟有理。我們越來越體會到人在江湖身不由己的無奈。我們
越來
越感到心力交瘁,壓抑茫然。
……
……
可是,以后的路還很長,無論如何,我們得活下去。不管是痛苦還是快樂,我們都要面
對。畢竟想逃避也逃避不了的。所以,我們還是希望,明天是一個陽光燦爛的大好日
子。而
且,我們骨子里仍然相信自己會走出陰霾,出人頭地。
再回首,燈火闌珊處沒有伊人,只有自己的夢想在風中輕輕地搖曳……
posted @
2005-10-27 13:12 rkind 閱讀(163) |
評論 (0) |
編輯 收藏
有位心理學家曾寫道,一個成熟稱得上真愛的戀情
必須經過四個階段,那就是:
共存(codependent)
反依賴(counterdependent)
獨立(independent)
共生(interdependent)
階段之間轉換所需的時間不一定,因人而易。
第一個階段:共存。
這是熱戀時期,情人不論何時何地總希望能膩在一起。
第二個階段:反依賴。
等到情感穩定后,
至少會有一方想要有多一點自己的時間作自己想做的事,這時另一方就會感到被
冷落。
第三個階段:獨立。
這是第二個階段的延續,要求更多獨立自主的時間。
第四個階段:共生。
這時新的相處之道已經成形,
你(妳)的他(她)已經成為你(妳)最親的人。
你們在一起相互扶持、一起開創屬于你們自己的人生。
你們在一起不會互相牽絆,而會互相成長。
但是,大部分的人都通不過第二或第三階段,
而選擇分手一途,這是非??上У?。
很多事只要好好溝通都會沒事的,不要耍個性,
不要想太多要互相信任,這樣第二、三階段的時間就會縮短。
和所愛的人相遇相戀是非常不容易的,不要輕言放棄。
兩人相聚是因為有緣,相知是因為有心,真的得好好珍惜這福份莫說分手不是
無由,
希望看到上述的四個階段,
真能給大家一些啟示與領悟并惜緣
我們會逐漸變成我們所愛的人。
妳和他本來沒有相同之處,外表不相像,性格也是南轅北轍,一旦愛上了,年深
日久,
妳會驚訝妳的眼睛有點像他的眼睛,他的微笑也有點像妳的微笑。
你們走路的步伐也有點相似,說話的語氣也愈來愈相像。他的脖子上有一顆痣,
一天,妳發現自己脖子上也多了一顆痣,原來我們會變成我們所愛的人。
妳本來喜歡腳踏實地的人,而他一向比較輕佻,但你們愛上了,
他竟會不知不覺變成一個老實人,這個改變,連他自己也不曾察覺。
他本來喜歡活潑的女孩子,卻愛上了拘謹的妳,這些日子,妳竟愈來愈活潑,
妳差點認不出自己。我們會逐漸變成對方理想中的人,這種改變,
絕對不是刻意的。兩個人愈愛得長久,氣質也愈來愈相近,
妳曾經以為他不是妳夢寐以求的那種類型,然而,有一天,妳驚訝地發現,
他已經變成妳喜歡的那種類型,妳不必再到處尋覓,他就是妳要找的人。
深深愛著一個人的時候,妳原來真的會一點一點的失去自己,
為甚么妳還會覺得快樂呢?
大概是因為妳在失去的當兒,也是賺了,妳把他的氣質和他的微笑都賺回來..
幸福很單純...
所以要很單純的人才容易獲得.....
與我親愛的朋友們分享之
posted @
2005-10-27 13:11 rkind 閱讀(154) |
評論 (0) |
編輯 收藏
Struts和JSF/Tapestry都屬于表現層框架,這兩種分屬不同性質的框架,后者是一種事件驅動型的組件模型,而Struts只是單純的MVC模式框架,老外總是急吼吼說事件驅動型就比MVC模式框架好,何以見得,我們下面進行詳細分析比較一下到底是怎么回事?
首先事件是指從客戶端頁面(瀏覽器)由用戶操作觸發的事件,Struts使用Action來接受瀏覽器表單提交的事件,這里使用了Command模式,每個繼承Action的子類都必須實現一個方法execute。
在Struts中,實際是一個表單Form對應一個Action類(或DispatchAction),換一句話說:在Struts中實際是一個表單只能對應一個事件,Struts這種事件方式稱為application event,application event和Component event相比是一種粗粒度的事件。
Struts重要的表單對象ActionForm是一種對象,它代表了一種應用,這個對象中至少包含幾個字段,這些字段是Jsp頁面表單中的input字段,因為一個表單對應一個事件,所以,當我們需要將事件粒度細化到表單中這些字段時,也就是說,一個字段對應一個事件時,單純使用Struts就不太可能,當然通過結合JavaScript也是可以轉彎實現的。
而這種情況使用JSF就可以方便實現
<h:inputText id="userId" value="#{login.userId}">
<f:valueChangeListener type="logindemo.UserLoginChanged" />
</h:inputText> |
#{login.userId}表示從名為login的JavaBean的getUserId獲得的結果,這個功能使用struts也可以實現,name="login" property="userId"
關鍵是第二行,這里表示如果userId的值改變并且確定提交后,將觸發調用類UserLoginChanged的processValueChanged(...)方法。
JSF可以為組件提供兩種事件:Value Changed和 Action. 前者我們已經在上節見識過用處,后者就相當于struts中表單提交Action機制,它的JSF寫法如下:
<h:commandButton id="login" commandName="login">
<f:actionListener type=”logindemo.LoginActionListener” />
</h:commandButton> |
從代碼可以看出,這兩種事件是通過Listerner這樣觀察者模式貼在具體組件字段上的,而Struts此類事件是原始的一種表單提交Submit觸發機制。如果說前者比較語言化(編程語言習慣做法類似Swing編程);后者是屬于WEB化,因為它是來自Html表單,如果你起步是從Perl/PHP開始,反而容易接受Struts這種風格。
基本配置
Struts和JSF都是一種框架,JSF必須需要兩種包JSF核心包、JSTL包(標簽庫),此外,JSF還將使用到Apache項目的一些commons包,這些Apache包只要部署在你的服務器中既可。
JSF包下載地址:http://java.sun.com/j2ee/javaserverfaces/download.html選擇其中Reference Implementation。
JSTL包下載在http://jakarta.apache.org/site/downloads /downloads_taglibs-standard.cgi
所以,從JSF的驅動包組成看,其開源基因也占據很大的比重,JSF是一個SUN伙伴們工業標準和開源之間的一個混血兒。
上述兩個地址下載的jar合并在一起就是JSF所需要的全部驅動包了。與Struts的驅動包一樣,這些驅動包必須位于Web項目的WEB-INF/lib,和Struts一樣的是也必須在web.xml中有如下配置:
<web-app>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
</web-app> |
這里和Struts的web.xml配置何其相似,簡直一模一樣。
正如Struts的struts-config.xml一樣,JSF也有類似的faces-config.xml配置文件:
<faces-config>
<navigation-rule>
<from-view-id>/index.jsp</from-view-id>
<navigation-case>
<from-outcome>login</from-outcome>
<to-view-id>/welcome.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<managed-bean>
<managed-bean-name>user</managed-bean-name>
<managed-bean-class>com.corejsf.UserBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config> |
在Struts-config.xml中有ActionForm Action以及Jsp之間的流程關系,在faces-config.xml中,也有這樣的流程,我們具體解釋一下Navigation:
在index.jsp中有一個事件:
<h:commandButton label="Login" action="login" /> |
Action的值必須匹配form-outcome值,上述Navigation配置表示:如果在index.jsp中有一個login事件,那么事件觸發后下一個頁面將是welcome.jsp
JSF有一個獨立的事件發生和頁面導航的流程安排,這個思路比struts要非常清晰。
managed-bean類似Struts的ActionForm,正如可以在struts-config.xml中定義ActionForm的scope一樣,這里也定義了managed-bean的scope為session。
但是如果你只以為JSF的managed-bean就這點功能就錯了,JSF融入了新的Ioc模式/依賴性注射等技術。
Ioc模式
對于Userbean這樣一個managed-bean,其代碼如下:
public class UserBean {
private String name;
private String password;
// PROPERTY: name
public String getName() { return name; }
public void setName(String newValue) { name = newValue; }
// PROPERTY: password
public String getPassword() { return password; }
public void setPassword(String newValue) { password = newValue; }
}
<managed-bean>
<managed-bean-name>user</managed-bean-name>
<managed-bean-class>com.corejsf.UserBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>name</property-name>
<value>me</value>
</managed-property>
<managed-property>
<property-name>password</property-name>
<value>secret</value>
</managed-property>
</managed-bean> |
faces-config.xml這段配置其實是將"me"賦值給name,將secret賦值給password,這是采取Ioc模式中的Setter注射方式。
Backing Beans
對于一個web form,我們可以使用一個bean包含其涉及的所有組件,這個bean就稱為Backing Bean, Backing Bean的優點是:一個單個類可以封裝相關一系列功能的數據和邏輯。
說白了,就是一個Javabean里包含其他Javabean,互相調用,屬于Facade模式或Adapter模式。
對于一個Backing Beans來說,其中包含了幾個managed-bean,managed-bean一定是有scope的,那么這其中的幾個managed-beans如何配置它們的scope呢?
<managed-bean>
...
<managed-property>
<property-name>visit</property-name>
<value>#{sessionScope.visit}</value>
</managed-property> |
這里配置了一個Backing Beans中有一個setVisit方法,將這個visit賦值為session中的visit,這樣以后在程序中我們只管訪問visit對象,從中獲取我們希望的數據(如用戶登陸注冊信息),而visit是保存在session還是application或request只需要配置既可。
UI界面
JSF和Struts一樣,除了JavaBeans類之外,還有頁面表現元素,都是是使用標簽完成的,Struts也提供了struts-faces.tld標簽庫向JSF過渡。
使用Struts標簽庫編程復雜頁面時,一個最大問題是會大量使用logic標簽,這個logic如同if語句,一旦寫起來,搞的JSP頁面象俄羅斯方塊一樣,但是使用JSF標簽就簡潔優美:
<jia:navigatorItem name="inbox" label="InBox"
icon="/images/inbox.gif"
action="inbox"
disabled="#{!authenticationBean.inboxAuthorized}"/> |
如果authenticationBean中inboxAuthorized返回是假,那么這一行標簽就不用顯示,多干凈利索!
先寫到這里,我會繼續對JSF深入比較下去,如果研究過Jdon框架的人,可能會發現,Jdon框架的jdonframework.xml中service配置和managed-bean一樣都使用了依賴注射,看來對Javabean的依賴注射已經迅速地成為一種新技術象征,如果你還不了解Ioc模式,趕緊補課。
posted @
2005-10-27 13:07 rkind 閱讀(142) |
評論 (0) |
編輯 收藏
Struts常見錯誤匯總 |
以下所說的struts-config.xml和ApplicationResources.properties等文件名是缺省時使用的,如果你使用了多模塊,或指定了不同的資源文件名稱,這些名字要做相應的修改。
1、“No bean found under attribute key XXX” 在struts-config.xml里定義了一個ActionForm,但type屬性指定的類不存在,type屬性的值應該是Form類的全名?;蛘呤?,在Action的定義中,name或attribute屬性指定的ActionForm不存在。
2、“Cannot find bean XXX in any scope” 在Action里一般會request.setAttribute()一些對象,然后在轉向的jsp文件里(用tag或request.getAttribute()方法)得到這些對象并顯示出來。這個異常是說jsp要得到一個對象,但前面的Action里并沒有將對象設置到request(也可以是session、servletContext)里。 可能是名字錯了,請檢查jsp里的tag的一般是name屬性,或getAttribute()方法的參數值;或者是Action邏輯有問題沒有執行setAttribute()方法就先轉向了。 還有另外一個可能,純粹是jsp文件的問題,例如<logic:iterate>會指定一個id值,然后在循環里<bean:write>使用這個值作為name的值,如果這兩個值不同,也會出現此異常。(都是一個道理,request里沒有對應的對象。)
3、“Missing message for key "XXX"” 缺少所需的資源,檢查ApplicationResources.properties文件里是否有jsp文件里需要的資源,例如: <bean:message key="msg.name.prompt"/> 這行代碼會找msg.name.prompt資源,如果AppliationResources.properties里沒有這個資源就會出現本異常。在使用多模塊時,要注意在模塊的struts-config-xxx.xml里指定要使用的資源文件名稱,否則當然什么資源也找不到,這也是一個很容易犯的錯誤。
4、“No getter method for property XXX of bean teacher” 這條異常信息說得很明白,jsp里要取一個bean的屬性出來,但這個bean并沒有這個屬性。你應該檢查jsp中某個標簽的property屬性的值。例如下面代碼中的cade應該改為code才對: <bean:write name="teacher" property="cade" filter="true"/>
5、“Cannot find ActionMappings or ActionFormBeans collection” 待解決。
6、“Cannot retrieve mapping for action XXX” 在.jsp的<form>標簽里指定action='/XXX',但這個Action并未在struts-config.xml里設置過。
7、HTTP Status 404 - /xxx/xxx.jsp Forward的path屬性指向的jsp頁面不存在,請檢查路徑和模塊,對于同一模塊中的Action轉向,path中不應包含模塊名;模塊間轉向,記住使用contextRelative="true"。
8、沒有任何異常信息,顯示空白頁面 可能是Action里使用的forward與struts-config.xml里定義的forward名稱不匹配。
9、“The element type "XXX" must be terminated by the matching end-tag "XXX".” 這個是struts-config.xml文件的格式錯誤,仔細檢查它是否是良構的xml文件,關于xml文件的格式這里就不贅述了。
10、“Servlet.init() for servlet action threw exception” 一般出現這種異常在后面會顯示一個關于ActionServlet的異常堆棧信息,其中指出了異常具體出現在代碼的哪一行。我曾經遇到的一次提示如下:
java.lang.NullPointerException at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:1003) at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:955)
為解決問題,先下載struts的源碼包,然后在ActionServlet.java的第1003行插入斷點,并對各變量進行監視。很丟人,我竟然把struts-config.xml文件弄丟了,因此出現了上面的異常,應該是和CVS同步時不小心刪除的。
11、“Resources not defined for Validator” 這個是利用Validator插件做驗證時可能出現的異常,這時你要檢查validation.xml文件,看里面使用的資源是否確實有定義,form的名稱是否正確,等等。 |
posted @
2005-10-27 13:06 rkind 閱讀(194) |
評論 (0) |
編輯 收藏
Jbuilder2006自帶了1.5的JDK,但如果你還想繼續用JDK1.42,如果只是在Jbuilder2006的tool->configure->JDKs中添加一個JDK1.42或更低版本,那么即使你只寫一個最簡單的HelloWorld程序,Jbuilder2006都會給你報出長長一串錯誤,編寫的代碼在Jbuilder2005中也無法運行。我在剛使用Jbuilder2006時,被這個問題困惑了好久,在網上查了好久也沒有找到解決的方法。
今天花了兩個小時,終于在Jbuilder2006的幫助中查到了問題的原因。Jbuilder2006在運行編譯工程時,會針對特定版本的VM進行編譯,默認的是Java 2 SDK, v 5.0 And Late,因此,如果工程用的是1.5以下的JDK,碰到都是java.lang.UnsupportedClassVersionError這個錯誤。
解決的辦法其實很簡單,只要更改這個選項就行了。具體步驟如下:
----------------------------------------------------------
1、右鍵點擊工程文件,選擇屬性(properties),
2、在屬性窗口中選擇 Build-->Java,在右邊的選項中有四個下拉框,就可以看到編譯選項了,
3、其中Compiler和Debug Option可以不用管,只在Languege features和Target VM中選擇相應的JDK版本就可以了,然后確定,一切OK。
附件中是配置的圖片。
-----------------------------------------------------------
如果在Target VM中選擇了All Java SDKs,那么你的class文件在使用JDK1.1的VM上都可以運行(Jbuilder2006幫助中是這么說的,估計沒幾個人的機子上還在用JDK1.1吧 :-)
posted @
2005-10-27 13:06 rkind 閱讀(266) |
評論 (0) |
編輯 收藏
打算要做一個工作總結平臺,考慮到要實現周工作總結的功能就得先把一年先按某周某周區分開來,查了查Api
采用了calendar類,并把最后分的結果傳到數據庫,
year week content
2005 1 1月3日~1月9日
... ... ....................
源碼如下(其中DB類是我用來實現數據庫連接用的)
import java.util.*;
import java.util.Date;
import java.sql.*;
import rkind.db;
public class shijian {
public static void main(String args[]){
int day,mon,year,week,dayofweek;
db base=new db();
String content="";
Calendar nova = Calendar.getInstance();
Date d1=new Date();
nova.setTime(d1);
nova.set(2005,Calendar.JANUARY,1);
//nova.add(Calendar.DATE,6);
//day=nova.get(Calendar.WEEK_OF_YEAR );
dayofweek=nova.get(Calendar.DAY_OF_WEEK );
while(dayofweek!=2){
nova.add(Calendar.DATE,1);
dayofweek=nova.get(Calendar.DAY_OF_WEEK );
}
year=nova.get(Calendar.YEAR);
//String sql=new String("insert into shijian(year,week,content) values('"+year+"','"+week+"','"+content+"')");
//System.out.println("day+++:"+day);
while(year==2005){
week=nova.get(Calendar.WEEK_OF_YEAR );
mon=nova.get(Calendar.MONTH)+1;
day=nova.get(Calendar.DATE);
content=mon+"月"+day+"日"+"~~ ";
System.out.print("第"+week+"周"+": "+mon+"月"+day+"日");
nova.add(Calendar.DATE,6);
week=nova.get(Calendar.WEEK_OF_YEAR );
mon=nova.get(Calendar.MONTH)+1;
day=nova.get(Calendar.DATE);
content+=mon+"月"+day+"日";
try{
String sql=new String("insert into shijian(year,week,content) values('"+year+"','"+week+"','"+content+"')");
base.executeUpdate(sql);
}catch(Exception e){System.out.println(e);}
System.out.println("~~~~"+mon+"月"+day+"日");
nova.add(Calendar.DATE,1);
week=nova.get(Calendar.WEEK_OF_YEAR );
mon=nova.get(Calendar.MONTH)+1;
day=nova.get(Calendar.DATE);
year=nova.get(Calendar.YEAR);
}
}
}
雖然功能上實現了,但是還有大量的重復代碼,和費語句,這就是沒有好好重視J2se的結果,沒辦法,
邊學J2EE邊看Se吧,:)
posted @
2005-10-27 13:05 rkind 閱讀(183) |
評論 (0) |
編輯 收藏
今天在Mysql中建立了一個名叫Option的表,結果無論如何都不能訪問,后來換了個名字就OK了,應而想到了是Mysql的保留字,搜了一下,發現以下字段都是它的保留字
action add aggregate all
alter after and as
asc avg avg_row_length auto_increment
between bigint bit binary
blob bool both by
cascade case char character
change check checksum column
columns comment constraint create
cross current_date current_time current_timestamp
data database databases date
datetime day day_hour day_minute
day_second dayofmonth dayofweek dayofyear
dec decimal default delayed
delay_key_write delete desc describe
distinct distinctrow double drop
end else escape escaped
enclosed enum explain exists
fields file first float
float4 float8 flush foreign
from for full function
global grant grants group
having heap high_priority hour
hour_minute hour_second hosts identified
ignore in index infile
inner insert insert_id int
integer interval int1 int2
int3 int4 int8 into
if is isam join
key keys kill last_insert_id
leading left length like
lines limit load local
lock logs long longblob
longtext low_priority max max_rows
match mediumblob mediumtext mediumint
middleint min_rows minute minute_second
modify month monthname myisam
natural numeric no not
null on optimize option
optionally or order outer
outfile pack_keys partial password
precision primary procedure process
processlist privileges read real
references reload regexp rename
replace restrict returns revoke
rlike row rows second
select set show shutdown
smallint soname sql_big_tables sql_big_selects
sql_low_priority_updates sql_log_off sql_log_update sql_select_limit
sql_small_result sql_big_result sql_warnings straight_join
starting status string table
tables temporary terminated text
then time timestamp tinyblob
tinytext tinyint trailing to
type use using unique
unlock unsigned update usage
values varchar variables varying
varbinary with write when
where year year_month zerofill
posted @
2005-10-27 13:05 rkind 閱讀(233) |
評論 (0) |
編輯 收藏
最近用JSP做新聞發布時發現,用rs.getString()獲得的字符串里面空格和換行都表現不出來,
先分析原因,我用的是Mysql數據庫,新聞內容采用的是Text類型,查看數據庫中上傳的新聞發現里面換行和空格都能表現出來,這就說明,肯定是用Rs.getstring時顯示的問題,先查看了Java.sql.*的Api想用別的Get方法,試了幾個結果都不行,
網上也有這樣類似的問題,但大多是在Servlet里面或者Bean里面專門的做一個函數解決的,我覺得這樣做很復雜
最后終于找到了的解決方法,在調用Rs.getstring的頁面里面的表格中加入style="word-break:break-all"
并用<pre>rs.getString()<>標簽來顯示就解決了換行的問題。其中<pre></pre>這句話一定不能少
然而加入這些以后,當一行內容過長時,表格依然會被撐開,需要在表格胡Style屬性修改成style="table-layout: fixed; word-wrap: break-word" 這樣才能真正解決中文撐開表格的問題。
posted @
2005-10-27 13:04 rkind 閱讀(288) |
評論 (0) |
編輯 收藏
安全域是Tomcat服務器中用來保護Web應用資源的一種機制,在安全域中可以配置安全驗證信息,即用戶以及用戶和角色的映射關系,每個用戶可以擁有一或多個角色,每個角色限定了可以用來訪問的WEb資源
它包括以下四種類型
1 內存域 MemoryRealm 從XML中讀取安全驗證信息,并把它們以一組對象的形式存放在內存中
2 Jdbc域 JDBCREALM 通過JDBC驅動訪問存放在數據庫中的安全驗證信息,
3 數據源域 DataSouceRealm 通過JNDI數據源訪問存在數據庫中安全信息
4Jndi 域 JNDIRealm 通過JNDI provider訪問基于LDAP的目錄服務器中安全驗證信息
配置過程有以下2部
1為WEB資源設置安全約束
(1)在web.xml中加入<sercurity-constraint>元素,對要過濾的文件類型限制
(2)在WEB中加入<logiin-config> Tomcat中支持三種驗證方法,1基本驗證,2摘要驗證3基于表單驗證
摘要驗證其實就是對第一種方法進行過密碼加密的方法,而表單驗證是通過自己的做的longin的頁面實現
(3)在web.xml中加入<security-role>元素指明手所有角色的名字
2在CONF/SERVER.XML中配置REALM,這個元素中指定安全域的類名以及相關屬性。
需要注意的是內存域是把用戶和角色數據存放在Tomcat-users.xml中
后2種都是存放在數據庫中,尤其是配置數據源域的時候,一定要把DATASOURCE存放在《GlobalNamingResouces》標簽下,否則雖然能正常使用但做驗證時會訪問不到數據庫,不能驗證成功
posted @
2005-10-27 13:04 rkind 閱讀(195) |
評論 (0) |
編輯 收藏
前兩天得到了一個成績的數據庫,可是是DBF的,因為想在Mysql環境中做一個成績分析,可是沒辦法導入
,于是先導入SQlsever2000中,想生成SQL腳本,然后再在Mysql Front中改入。SQL文件,可是發現導出來的腳本只有創建表的SQL腳本,沒有數據的腳本,無奈,
后來又想找個軟件試一下,下了一個什么DBF To Mysql 在未破解的情況下,只可以導入6行數據(!汗)
用了破解補丁以后導入的時候出錯,軟件上說庫限制的是8M,可是我的庫只有6M多一點,試了幾次也不行
然后只好繼續用Sql2000試,選導出的時候發現可以選擇導出文本和CSV文件,而在我的MYsqlfront里面支持導
入CSV文件,于是先用SQl2000導出文本文件,把后綴名改為CSv,再從Mysql中一導入OK,
后來在使用中才發現,用這種方法導入以后,有的是Char類型的字段在Mysql front中被認為是Int類型的,
可是在Phpmyadmin中字段顯示正常。
posted @
2005-10-27 13:03 rkind 閱讀(801) |
評論 (0) |
編輯 收藏