雅典之夏的小站
知人者智 自知者明 Fighting!!
我们终于进入了这个社会。从此结束了被学校老师看管的生涯,结束了做父母乖宝
贝的日子,也结束从父母兄长那里拿钱的幸福时光。

  我们从家里搬了出来,提着自己半新不旧的行囊找了间不能再廉价的破房子租了下

来,开始了闯荡的生活。

  我们的眼光充满了好奇,我们的血液里流淌着激情,我们的钱夹却空前的瘦小。
  在面对第一个老板第一批同事第一份工作的时候,我们是那样的慷慨激昂,我们认

为自己无所不能,我们幻想很快就可以打造一片属于自己的天地,我们对未来充满了信

心。并且希望从别人艳羡的目光中找到一点点骄傲的资本。

  可是渐渐的我们才知道,其实现实和自己的理想有着天壤之别。我们发现了老板是

多么的阴险狠毒同事是多么的势利小气工作是多么的枯燥无趣,我们也发现了房租水电

气费把人愁死了。发薪的日子总好像遥不可及,商店里的东西仿佛只是为别人摆设,我
们还发现了只有周末跑到母校瞎逛才感觉释然,只有和老同学一起聊天玩耍才真正开心
只有在步行街上看美女才不无聊。

  渐渐的我们也学会了泡吧,酒吧迪吧水吧网吧玩具吧都是我们打发无聊时间的场
所。可是我们还是泡不到妞,以前自以为是的那些爱情理论泡马子技巧在金钱时代都是

狗屁,都出奇的苍白无力。于是我们感叹世界变得太快,快得让我们这些穷小子根本就

无所适从。

  渐渐的我们也变得深沉起来,不再为一个很幼稚的笑话就哈哈大笑,不再动不动就

乱发牢骚,也不再把内心深处的秘密轻易地跟别人诉说。我们也说不清楚这到底是成
还是消沉,对着镜子看,却发现里面那张脸陌生得可怕。

  渐渐的我们似乎大彻大悟了,什么都看透了,一切都虚无缥缈了,然后我们什么都

很漠然,坐公交车也不让座了,看到小偷偷东西也懒得理了,吃点小亏想想也就算了,

但是我们却在每天下班之前发愁晚餐该吃什么了,在大家一起喝茶的时候盘算着自己
不要买单,在临睡之前把这个月的开支算了又算。

  渐渐的我们感觉自己其实什么都不是,没有钱没有名没有地位,身高也太矮了皮肤

也太黑了长相也太难看了,什么都要看人家的脸色,走在哪里都似乎低人一等,有时真

恨不得割脉上吊服毒跳楼自行了断。

  渐渐的我们也不想看书了,也不想谈理想了,也不想谈前途了,也不想花太多精力

胡思乱想。我们也不想听音乐了,也不想看电影了,不过倒时常看些成人的碟子,交流

些黄色的笑话。我们开始沉迷于酒液里,沉迷于方城中,沉迷于低级场所内。家的概念

越来越模糊了,亲情的感觉越来越遥远了,除了在梦中偶尔回到家乡之外,我们挺多可

以借助一条冰冷的电话线和家人说说一些开始偏离生活的话,却看不到老爹老妈又长出

了多少根白头发又多了几道皱纹。

  看到有人在球场上酣战,我们似乎也想上去来两脚,其实很久没有运动的身体已经

无法支撑我们再跑多远了,而且几乎荒废的球技让我们怀疑自己那些踢球的年岁是不是

上辈子的事。

  望着满街穿着前卫的少男少女,我们开始表现出厌恶的表情,却忘了自己前些年其

实有过之而无不及。遇到在大庭广众之下举止亲热的学生情侣,我们的目光也变成了不

屑,并恶狠狠地骂他们伤风败俗。

  经过彩票销售点的时候,我们忍不住也掏出一点本该买书的钱来买几注,然后天

做梦中了五百万之后多少万买房子多少万买车多少万胡乱挥霍,可是每一次开奖虽然屡

屡有人中头奖却始终与自己无缘,于是在短暂的失望之后,我们依然锲而不舍地做着美

梦。

  渐渐的我们的人生观、价值观、爱情观也有所改变。我们已经不认为为了往上爬而

不择手段有什么不妥,我们对努力就有回报的说法嗤之以鼻,我们嘲笑所谓的贞节
观,
所谓的责任感,希望甚至去找寻一夜情。

  我们开始关注街上跑的车是宝马还是奥拓,关注哪个酒廊的吧台小姐酒量如何,关

注哪款手机用起来更加叉人眼,关注哪个牌子的西服穿起来更有派头。但也就只是关注

而已,因为我们清楚无论是宝马还是奥拓,我们都买不起,吧台小姐酒量再不行,我

也不能把人家怎么样,至于手机和西服,还是用自己买了很久的老款式。

  不知从什么时候开始,我们为自己的遭遇感到愤愤不平了,我们越来越看不惯老板

狰狞的面目,越来越无法忍受同事的卑鄙龌龊,越来越不堪就这样生活下去。于是我
在感叹运气不好的同时迫切地想改变自己的命运,我们左顾右盼,寻找机会,却始终看

不到出路。

  终于有一天,我们像火山爆发一样,一冲动之下把老板炒了。收拾东西昂然地走

办公室的那一刻我们有英雄离去那种豪迈与无悔,只从同事愕然与嘲讽夹杂的眼神中
隐看到一丝无奈,却不知道等待自己的,将是无尽的痛苦与折磨。

  我们很快发现了虽然自己拥有并不低的学历和一定的工作经验,并像跑场子一样

这家公司跑到那家公司,一次接一次地应聘,可是根本就无法找到适合的工作。

  时间一天一天过去,工作依然遥远得不知子丑寅卯,钱包越来越瘪了,交房租的日

子也越来越近了,我们心如火焚,有着世界末日即将来临的惶恐。我们也开始有点后悔

自己太轻率就辞职了,也开始萌生铤而走险的念头,但又不敢真的去抢银行绑架什么
的,心情低沉到了极点,我们的脾气也大了,唉叹声也响了。

  所幸这样的日子终于结束了。我们又到了新的工作单位。这时候我们虽然或多或少

有点激动,但更多的是谨慎与惨淡。我们不会再对老板抱什么幻想,不会认为他会给我

们多好的待遇,我们也不会和同事谈什么知心话,因为我们已经知道,不可能与有利益

冲突的人成为朋友,当然我们也不再愚蠢地把这个工作当事业一样拼命,只把这里当

自己的一个跳板,一旦有机会就立马走人。

  接下来的生活无趣又无味,但我们渐渐的也就无所谓了。我们也不想泡吧了,不想

什么活着的意义了,老同学在一起也开始有点话不投机了,以前很少联系的朋友,现在

更不想去联系了,就算有时候接到他们打来的电话,也只是随便吭吭唷唷的应付几
句。
虽然酒还是经常喝,但很多时候都一个人独饮独醉了。这时候我们的寂寞更是深入骨
髓,我们的苦痛更加真切而细腻。我们空前地怀念在学校的那些岁月,我们会捧着毕业

合照发半天呆,我们却不想再到母校去闲逛了,如果是偶然经过,看到曾经熟悉无比的

景物,心里还真的翻涌起一股酸
  楚,但是我们不会流眼泪。毕业时曾经很贱的男儿泪如今又变得珍贵起来。

  当然我们也还是经常上网,不过很多时候都是为了打发时间。我们很可能迷上了传

奇之类的游戏,却很少再光顾同学录网页,更不想在上面留言了。

  我们无师自通的学会了自欺欺人,虽然我们在夜深梦回时也会憎恨自己的虚伪与

为,更讨厌这种猪狗不如的生活方式,但是我们就象被囚禁的鸟,根本就无能为力。有

时候我们会自嘲似的给找很多借口来解释自己的某种行为,尽管我们也知道这样做其

毫无意思,也毫无必要。

  我们开始不断地听到老同学们结婚的消息、升职的消息。然后我们不经意地就想到

某某在学校时的样子,然后我们不由得感叹时间流逝之无情,然后我们就想在尘封已

的日记本上写点什么,然后我们不知不觉地眼角竟然也有点湿润了。

我们夜里躺在床上睁大眼睛,却无法在漆黑中排遣郁闷




我们夜里躺在床上睁大眼睛,却无法在漆黑中排遣郁闷时,就会格外的想有个人陪在身

边。很多往事会像潮水一样向我们扑来。我们曾经暗恋过的人、曾经追求过但失败了的
人、
曾经相爱过的人,都一一地闪过脑海,于是,心里会有种伤感,很纯粹的伤感。因为我
们知
道,爱情其实真的已经与我们离得很远。

我们试着通过各种途径来结交朋友,但是每每交往了几次,我们就不想再与他们来往。

说不清楚是因为他们太过于现实还是我们太封闭。我们于是感慨万千,在这个很多人都
戴面
具生活的社会,原来交一个真正的朋友竟然那么难。我们也试着去约会,可是爱情并非
喝水
吃饭那么简单,到最后都还是以失败告终。高不成低不就的我们继续高举单身的旗帜游
走于
大街小巷。

我们非常怀念学生时代那种单纯的恋情,非常羡慕那些还能坐在教室中的年轻人,非常

希望自己可以再读一次大学,但是我们也知道,泼出去的水怎么能够收回,远逝的时光
如何
可能重来?

我们的酒量越来越大,一打啤酒喝下去一只手指在眼前竖着也无法看成两只手指。我们

的腰越来越粗背越来越宽肚皮越来越大,日渐增多的脂肪很是晃眼。我们爬上楼梯的动
作越
来越笨拙,也越来越吃力,才到三楼就已经气喘吁吁。


我们向往着能到外面去走一走,看一看,却又害怕沦落天涯,苦不堪言。我们越来越觉

得钱钟书老人的围城理论精辟有理。我们越来越体会到人在江湖身不由己的无奈。我们
越来
越感到心力交瘁,压抑茫然。

……
……

可是,以后的路还很长,无论如何,我们得活下去。不管是痛苦还是快乐,我们都要面

对。毕竟想逃避也逃避不了的。所以,我们还是希望,明天是一个阳光灿烂的大好日
子。而
且,我们骨子里仍然相信自己会走出阴霾,出人头地。


再回首,灯火阑珊处没有伊人,只有自己的梦想在风中轻轻地摇曳……

posted @ 2005-10-27 13:12 rkind 阅读(154) | 评论 (0)编辑 收藏
有位心理学家曾写道,一个成熟称得上真爱的恋情

  必须经过四个阶段,那就是:

  共存(codependent)

  反依赖(counterdependent)

  独立(independent)

  共生(interdependent)

  阶段之间转换所需的时间不一定,因人而易。

  第一个阶段:共存。

  这是热恋时期,情人不论何时何地总希望能腻在一起。

  第二个阶段:反依赖。

  等到情感稳定后,

  至少会有一方想要有多一点自己的时间作自己想做的事,这时另一方就会感到被

  冷落。

  第三个阶段:独立。

  这是第二个阶段的延续,要求更多独立自主的时间。

  第四个阶段:共生。

  这时新的相处之道已经成形,

  你(妳)的他(她)已经成为你(妳)最亲的人。

  你们在一起相互扶持、一起开创属于你们自己的人生。

  你们在一起不会互相牵绊,而会互相成长。

  但是,大部分的人都通不过第二或第三阶段,

  而选择分手一途,这是非常可惜的。

  很多事只要好好沟通都会没事的,不要耍个性,

  不要想太多要互相信任,这样第二、三阶段的时间就会缩短。

  和所爱的人相遇相恋是非常不容易的,不要轻言放弃。

   两人相聚是因为有缘,相知是因为有心,真的得好好珍惜这福份莫说分手不是

  无由,

  希望看到上述的四个阶段,

  真能给大家一些启示与领悟并惜缘

  我们会逐渐变成我们所爱的人。

  妳和他本来没有相同之处,外表不相像,性格也是南辕北辙,一旦爱上了,年深

  日久,

  妳会惊讶妳的眼睛有点像他的眼睛,他的微笑也有点像妳的微笑。

  你们走路的步伐也有点相似,说话的语气也愈来愈相像。他的脖子上有一颗痣,

  一天,妳发现自己脖子上也多了一颗痣,原来我们会变成我们所爱的人。

  妳本来喜欢脚踏实地的人,而他一向比较轻佻,但你们爱上了,

  他竟会不知不觉变成一个老实人,这个改变,连他自己也不曾察觉。

  他本来喜欢活泼的女孩子,却爱上了拘谨的妳,这些日子,妳竟愈来愈活泼,

  妳差点认不出自己。我们会逐渐变成对方理想中的人,这种改变,

  绝对不是刻意的。两个人愈爱得长久,气质也愈来愈相近,

  妳曾经以为他不是妳梦寐以求的那种类型,然而,有一天,妳惊讶地发现,

  他已经变成妳喜欢的那种类型,妳不必再到处寻觅,他就是妳要找的人。

  深深爱着一个人的时候,妳原来真的会一点一点的失去自己,

  为甚么妳还会觉得快乐呢?

  大概是因为妳在失去的当儿,也是赚了,妳把他的气质和他的微笑都赚回来..

  幸福很单纯...

  所以要很单纯的人才容易获得.....

  与我亲爱的朋友们分享之
posted @ 2005-10-27 13:11 rkind 阅读(143) | 评论 (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 阅读(130) | 评论 (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 阅读(181) | 评论 (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 阅读(254) | 评论 (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 阅读(172) | 评论 (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 阅读(216) | 评论 (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 阅读(278) | 评论 (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 阅读(182) | 评论 (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 阅读(785) | 评论 (0)编辑 收藏
仅列出标题
共8页: 上一页 1 2 3 4 5 6 7 8 下一页