??xml version="1.0" encoding="utf-8" standalone="yes"?> 作者:江南白Q原文出处: http://blog.csdn.net/calvinxiu/archive/2007/01/27/1495778.aspxQ{载请保留出处?/p>
Unixpȝ永远只会来多Q开发h员就没必要特意学习它们的安装、配|和理了,全部交l集成h员吧?br /> 但开发h员行CUnix之间Q依然有四样东西要熟l?/p>
虽然Unix上的文本~辑器已l越来越好用Q但不在Console前面Q网速也不够qXWindows的时候,q是要依赖VI?br /> 回想VI的时代背景,发现VI对开发h员已l周到得谱了,热键多到你双手不键盘就能完成大半编辑工作?br /> 自己制作一张自p为有用,但又l常忘记的命令的sheetQ拿试的力气把它背熟?/p>
开发h员在Unix下干得最多的除了Make和除Bug外,大概是处理日志文g、业务文件进行查错和l计了?br /> 只会more和grep是不够的Q开发老手会把awk,sed,grep,sort,uniq,wc,head,tailq些文本处理命oQ通过道玩具式的拆卸DQ最后完成一件原本以为非~写大段代码不可的工作。周到的参数讑֮Q让人再一ơ感叚w个简单的q代Q这样复杂到极致的设?......怪不得《Unix ~程艺术》的作者有那么骄傲的自觉?/p>
比如车东的每月访问TOP10 l计脚本Q?/p>
~程是开发h员的天赋本能Q不Z么语aQ看看参考手册应该就能上手?/p>
?a >Bash新手指南中文?/a>Q一份写l新手看的包含很多老手知识的指南?/p>
用过Java的Ant后,惌vMakep得很烦,很厌倦。dq是会的Q见GNU Make 3.8.0 中文手册 不过即make已经_N到变态,每个人写出来的MakeFileq是千奇百怪,再看看开源项目们个个都是automake+autoconf了,我们自己也长q一点吧。手工编写MakeFile.amQ让auotomake变成MakeFile.inQ再让用?/configure 生成最l的MakeFile?br /> 入门文章Q?a >使用AutoMakeL生成Makefile 另外QACE里还贡献了一个更厉害?a >MPC(Makefile, Project, and Workspace Creator )Q 自动的生成了MakeFile.am或者VC的项目文件?br />
上下左右Q?/strong>
查: awkQ?/strong>处理l构化的文本(每行以固定符号分成若q列)Q提取打印某些字D,如: grepQ?/strong>qoQ大家用得最多的命oQ支持正则表辑ּ。参数有Q?br /> -i忽略大小写,-n昄line numberQ?c l计在每个文件的出现ơ数Q?l只显C符合的文g的名字?/p>
sedQ?/strong>编辑器Q主要用于替换,如: uniqQ?/strong>去除重复行?br /> 除了正常用法外,q有-cl计重复ơ数Q和-u Q唯一Q和 -d Q重复)两个参数,只显C唯一的和重复的行?/p>
wcQ?/strong> l计?br /> -l ?-m 字符,-w 单词 PS:以下文字不算字数 开发h员行走Unix的随w四?/a>
一、VI
二、文本处?/h2>
awk -F '
t' '{
print
$
4
}' 2004_2
.
txt| grep chedong
.
com
/
tech
/
|
uniq -c|
sort
-rn|head -
10
三、Bash Shell ~程
四、Make与AutoMake
生成的MakeFile既能跨越q_Q又是标准的写法Q最重要的是Q编写MakeFile.am的工作量比MakeFile多了,只要单的定义目标文gQ先要处理的子目录,需要的源文Ӟ头文件与库文件就可以了。如果看完下面两还是不懂,直接看ACE里的Makefile.am懂了?/p>
q阶文章Q?a href="javascript:void(0);/*1169901219468*/">IBM DW:?/a>?autoconf ?automake 生成 Makefile 文g
完整的免费电子书Q?a >GNU Autoconf, Automake and Libtool 附录AQ我的VI易忘命o手册
ctrl+u/d 上下半屏Qctrl+f/b,上下一?br /> H/G屏幕?文章?Q?/$ 行首行末
增删改:
yy/dd 复制/删除 一行,p/PQ将yy/dd的内容paste出来
I/A 在行?末添加, o/O 开新行Qd0/d$ 删除到行首,行末
u:undo
? 向前查找Q?n/N 重复上一ơ查?/p>
附录B: 文本处理命o结
ls -l|awk '{print $1}' --ls-ll果的第一列打印出?br /> awk -F":" '{print $1" "$6}' /etc/passwd Q将?分割?etc/passwd文g的第1Q?列打印出来,中间以空格分开
详见IBM DW中国的AWK实例(?? ?Bash新手指南中文版第6?/a>?/p>
sed -e '1,10s/foo/bar/g' myfile2.txt ??0行的文本中的foo 替换成bar,s代表替换,g代表全局替换
支持正则的替换字W串Q可以只替换某个范围内的内容?br /> 用法不算?详见IBM DW中国的Sed实例(???Bash新手指南中文版第5?/a>?br />
sortQ?/strong>排序Q参数有Q?br /> -r逆序, -n 数字比较 , -M 日历比较 Feb,Dec, -f 忽略大小?br /> 同样支持l构化文Ӟ?br /> sort -t : -k 1,1 /etc/passwdQ以: 分割,只按W?列排?br /> sort -t : -k 1,1 -k2.2,3.4 /etc/passwd Q以:分割,先按W?列排?再按W?列的W二个字W到W?列的W?个字W排序?/p>
一个多月没有更新博客了Q因为公叔R调了新部门,很多东西要学习。太久没试过华丽的在上班旉Q在工作中,在同事们w上学到q么多东西了Q很是开心?br /> 下周开始爆发更新?/p>
]]>
-------------
java环境讄
-------------
在环境变量中讄以下三个变量Q?br />JAVA_HOME=C:\j2sdk1.4.1 //可以改ؓ相应的目?br />CLASSPATH=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar
PATH=%JAVA_HOME%\bin;%PATH%
然后在命令行输入java -version命oQ如果出?br />java version "1.4.1"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1-b21)
Java HotSpot(TM) Client VM (build 1.4.1-b21, mixed mode)
则说明已l配|成功!
HelloWorld.java源程序如下:
public class HelloWorld{
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
在命令行执行javac HelloWorld.java
如果没有输出M信息则说明编译成功?/p>
在命令行q行java HelloWorldQ输出:
Hello World!
代表成功执行了javaE序?/p>
-----------------
初学者常犯的错误
-----------------
1. q行Ӟ带了.class后缀
如果你试图用如下命令:
E:\java\src>java HelloWorld.class
pȝ会误认ؓ你运行的是HelloWorld包下的名为class的类文gQ会到系l的CLASSPATH下(一般都包括当前目录Q企囑֯找HelloWorld.class.classq样的类Q这Lcd然不存在了;q且也不可能存在Q因为class是关键字Q不能作Z个类的名字。所以会报如下错误信息:
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/class
2. 文g名大写错误
对于像Windowsq样的系l,~译时可以不兛_大小写。比如编译HelloWorld.javaӞ也可以用:
E:\java\src>javac helloworld.java
也可以编译通过Q但产生的类文g仍然是和源文件相W的QHelloWorld.class?br />但在q行时一定要注意大小写,比如试图使用如下命oq行Q?br />E:\java\src>java helloworld
报cM?中的错误Q?br />Exception in thread "main" java.lang.NoClassDefFoundError: helloworld (wrong name: HelloWorld)
----------------------------
包含包层ơ的HelloWorld.java
----------------------------
比如上面的HelloWorld.java修改如下Q?br />package org.javaresearch;
public class HelloWorld{
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
~译时有两种Ҏ
1. 直接~译
E:\java\src>javac HelloWorld.java
此时在当前目录下输出HelloWorld.class。此Ӟq行不能使用上面相同的方法,使用Q?br />E:\java\src>java HelloWorld
q行Ӟ出现如下错误Q?br />Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: org/javaresearch/HelloWorld)
从上q错误信息你也可以看刎ͼpȝ可以扑ֈHelloWorldc(因ؓ当前路径包含在CLASSPATH中,具体Z么会提示wrong nameQ有兴趣的朋友参见Java语言规范Q,但这个类属于org.javaresearch包。所以,你要做的是按照上述包层ơ,相应的创建目录层ơ,把上面生成的HelloWorld.class攑ֈE:\java\src\org\javaresearch\目录下。运行:
E:\java\src >java org.javaresearch.HelloWorld
pȝ打印出:
Hello World!
q儿要注意的是,不能使用java org\javaresearch\HelloWorld来运行,此时同样会出现如下错误:
Exception in thread "main" java.lang.NoClassDefFoundError:org\javaresearch\HelloWorld (wrong name: org/javaresearch/HelloWorld)
2. 使用 -d <directory>~译选项
是不是觉得上面的~译Ҏ有点ȝQ能不能自动在当前\径(或Q意指定的路径Q下生成包层ơ呢Q有Q?d <directory>~译选项p做到?br />E:\java\src >javac -d . HelloWorld.java
此时Q在当前目录下就生成了一个org\javaresearch目录Qƈ且输出的.class文g也在里面。运行:
E:\java\src >java org.javaresearch.HelloWorld
pȝ打印QHello World!
如果你想把生成的cL仉中存攑֜一个目录中Q比如:E:\java\classes下,那么你首先创个目录,然后~译Ӟ
E:\java\src >javac -d E:\java\classes HelloWorld.java
可以把生成的类文g攑ֈE:\java\classes目录下,q且按照包层ơ相应的创徏目录路径。你可以在E:\java\classes\org\javaresearch下找到HelloWorld.class文g。此时用如下命令可以正运行(注意如果要用到其它类Q请在CLASSPATH中设好)Q?br />E:\java\classes >java org.javaresearch.HelloWorld
或者你可以在E:\java目录下面q行以下命o来执?br />E:\java >java -classpath .\classes org.javaresearch.HelloWorld
使用java?classpath参数可以一些目录加入类路径
-------------------
打包jar文g
-------------------
可以把一个包内的所有class文g打包Z个jar文gQ便于存攑֒q行。以上文的org.javaresearch包ؓ例,其打包命令如下:
E:\java\classes >jar cvf wxb.jar org
会生成一个wxb.jar文gQ将其中META-INF\MANIFEST.MF文g中添加如下一行:
Main-Class: org.javaresearch.HelloWorld
保存jar文g?/p>
或者首先创建ƈ~辑一个MANIFEST.MF文gQ其内容如下Q?br />Manifest-Version: 1.0
Created-By: 1.4.1 (Sun Microsystems Inc.)
Main-Class: org.javaresearch.HelloWorld
其保存到classes目录?br />然后其一h包到jar文g中,打包命o如下Q?br />E:\java\classes >jar cvfm wxb.jar MANIFEST.MF org
-------------
q行jar文g
-------------
在命令行中输入如下命令即可:
E:\java\classes >java -jar wxb.jar
输出为:
Hello World!
------------------------
用Ant来编译运行javaE序
------------------------
首先安装AntQ步骤很单:
1.Ant压羃包解压到一个目录,例如D:\Ant1.5.2Q?br />2.在环境变量中d以下变量Q?br />ANT_HOME=D:\Ant1.5.2 //可以改ؓ相应的目?br />3.修改Path环境变量
PATH=%ANT_HOME%\bin;%PATH%
最后给Z一个Ant的build.xml文gQ运行ant卛_完成所有以上的~译和运行过E,其build文g如下Q?br /><project name="HelloWorld" default="jar" basedir=".">
<description>
building HelloWorld!
</description>
<!-- set global properties for this build -->
<property name="src" location="src"/>
<property name="build" location="classes"/>
<property name="dist" location="dist"/>
<property name="user.name" value="Wang Xuebin"/>
<target name="init">
<!-- Create the time stamp -->
<tstamp/>
<!-- Create the classes directory structure used by compile -->
<mkdir dir="${build}"/>
</target>
<target name="build" depends="init" description="build the source code" >
<!-- Compile the java code from ${src} into ${build} -->
<javac srcdir="${src}" destdir="${build}"/>
</target>
<target name="jar" depends="build"
description="generate the distribution" >
<!-- Create the distribution directory -->
<mkdir dir="${dist}/lib"/>
<!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
<jar destfile="${dist}/HelloWorld-${DSTAMP}.jar" basedir="${build}">
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Main-Class" value="org.javaresearch.HelloWorld"/>
</manifest>
</jar>
</target>
<target name="run" depends="build" description="run HelloWorld">
<java classpath="${build}" classname="org.javaresearch.HelloWorld"></java>
</target>
<target name="runjar" depends="jar" description="run HelloWorld in jar file">
<java jar="${dist}/HelloWorld-${DSTAMP}.jar"
fork="true"
failonerror="true"
maxmemory="128m"
>
<arg value="-h"/>
<classpath>
<pathelement location="${dist}/HelloWorld-${DSTAMP}.jar"/>
<pathelement path="${java.class.path}"/>
</classpath>
</java>
</target>
<target name="clean"
description="clean up" >
<!-- Delete the ${build} and ${dist} directory trees -->
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
</project>
q年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算?/p>
应用E序已从传统的桌面应用{到Web应用。基于B/SQBrowser/ServerQ架构的3层开发模式逐渐取代C/SQClient/ServerQ架构的开发模式,成ؓ开发企业应用和电子商务普遍采用的技术。在Web应用开发的早期Q主要用的技术是CGIH?a target="_blank">ASPH?a target="_blank">PHP{。之后,Sun公司推出了基?a target="_blank">Java语言的Servlet+Jsp+JavaBean技术。相比传l的开发技术,它具有跨q_H?a target="_blank">安全H有效﹑可移植等Ҏ,q其更便于使用和开发?/p>
Java应用E序讉K数据?/font>的基本原?/p>
在Java语言中,JDBCQJava DataBase ConnectionQ是应用E序与数据库沟通的桥梁,
即Java语言通过JDBC技术访问数据库。JDBC是一U“开䏀的ҎQ它为数据库应用开发h员﹑数据库前台工具开发h员提供了一U标准的应用E序设计接口Q开发h员可以用UJava语言~写完整的数据库应用E序。JDBC提供两种APIQ分别是面向开发h员的API和面向底层的JDBC驱动E序APIQ底层主要通过直接的JDBC驱动和JDBC-ODBC桥驱动实C数据库的q接?/p>
一般来_Java应用E序讉K数据库的q程Q如?所C)是:
①装载数据库驱动E序Q?/p>
②通过JDBC建立数据库连接;
③访问数据库Q执行SQL语句Q?/p>
④断开数据库连接?/p>
POQ?br />persistant object持久对象
最形象的理解就是一个PO是数据库中的一条记录?br />好处是可以把一条记录作Z个对象处理,可以方便的{为其它对象?br />
BOQ?br />business object业务对象
主要作用是把业务逻辑装Z个对象。这个对象可以包括一个或多个其它的对象?br />比如一个简历,有教育经历、工作经历、社会关pȝ{?br />我们可以把教育经历对应一个POQ工作经历对应一个POQ社会关pd应一个PO?br />建立一个对应简历的BO对象处理历,每个BO包含q些PO?br />q样处理业务逻辑Ӟ我们可以针对BOd理?br />
VO Q?br />value object值对?br />ViewObject表现层对?br />
主要对应界面昄的数据对象。对于一个WEB面Q或者SWT、SWING的一个界面,用一个VO对象对应整个界面的倹{?br />
DTO Q?br />Data Transfer Object数据传输对象
主要用于q程调用{需要大量传输对象的地方?br />比如我们一张表?00个字D,那么对应的PO有100个属性?br />但是我们界面上只要显C?0个字D,
客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,
q时我们可以用只有q?0个属性的DTO来传递结果到客户端,q样也不会暴露服务端表结?到达客户端以后,如果用这个对象来对应界面昄Q那此时它的w䆾p{为VO
POJO Q?br />plain ordinary java object 单java对象
个h感觉POJO是最常见最多变的对象,是一个中间对象,也是我们最常打交道的对象?br />
一个POJO持久化以后就是PO
直接用它传递、传递过E中是DTO
直接用来对应表示层就是VO
DAOQ?br />data access object数据讉K对象
q个大家最熟悉Q和上面几个O区别最大,基本没有互相转化的可能性和必要.
主要用来装Ҏ据库的访问。通过它可以把POJO持久化ؓPOQ用POl装出来VO、DTO
ȝ下我认ؓ一个对象究竟是什么O要看具体环境Q在不同的层、不同的应用场合Q对象的w䆾也不一P而且对象w䆾的{化也是很自然的。就像你对老婆来说是老公Q对父母来说是子女。设计这些概늚初衷不是Z唬h而是Z更好的理解和处理各种逻辑Q让大家能更好的ȝ面向对象的方式处理问?
大家千万不要陷入q度设计Q大可不必ؓ了设计而设计一定要在代码中区分各个对象。一句话技术是为应用服务的?br />
Ƣ迎指正?br />
下面是我的回信:
做web开?q了Q居然才发现有这么好的浏览器开发工P真是惭愧?br />
做Java的web开发,肯定M开览器,现在行的浏览器除了微Y的IEQ还有其他流行的览器:firefox,opera。俗话说Q“欲要善其事Q必先利其器”,下面我就列出工作中针对这些浏览器常用的工兗?br />1.Instant Source q是一N对IE的工兗对|页源文件的查看Q可以我们获得更多与网늛关的信息Q对|页制作者来_一些设计得较有特色的网,通过对其源代码来查看以作q一步地学习借鉴更有必要了。但在IE中查看源文g极ؓ不便。Instant Source是一个非常实用的IE插gQ只要你用鼠标指向网上的某一元素Q它的HTML代码便即时显C出来,配合Shift、Ctrl键的操作Q还可以锁定昄的源代码和显CHTML代码的上U元素。此外,通过鼠标q可以直接获取网上各种颜色的R、G、B值及HEX代码?br />2.ieHTTPHeaders q是一N对IE的工兗我们进行web开发的时候,使用的就是http协议Q这个Y件能够帮助我们查看http协议的表头的信息?br />3.Internet Explorer Developer Toolbar q是一N对IE的工兗IE Developer Toolbar Ҏ如下: Q浏览和修改Web늚文对象模型QDOMQ。-通过多种技术方式定位、选定Web上的特定元素。-止或激zIE讄。-查看HTML对象的类名、IDQ以及类似链接\径、tab序、快捷键{细节。-描绘表格、单元格、图片或选定标签的轮廓。-昄囄象素、大、\径、替代文字等。-x重定义浏览器H口大小?00x600或自定义大小。-清空览器缓存和cookieQ被清除可从所有对象或l定域中选择。-直接讉K兌W3C规范参考、IE开发组blog或其他来源。-昄设计时标,帮助寚w对象。该工具条可集成在IEH口Q或以Q动窗口Ş式存在\\使用Ҏ:安装好以?打开IE,在菜单栏中选择 查看---工具?勾上 Developer Toolbar 4.FireBug q是一N对FireFox的工?可以查看和时修改HTML源代码、查看CSS定义、调试JavaScript.其是在firefox上调试javascript功能非常的强大,但是firefox对javascript的兼Ҏ没有IE好,所以这ƾ插件就会有很大的局限性?br />5.script debugger q是一N对IE的javascript调试工具。此工具的特ҎyQ功能齐全,debug时能够单步执行,能够昄变量QObject的|~点是不够稳定,很容易出错,出错以后q个工具再也打开不了?br />6.microsoft script editor q是一N对IE的工?调试javascript的功能非常的强大Q他是跟随office发布的,q个工具很稳定,一般不会出错,调试javascript需要的功能都具有,唯一的缺Ҏ占内存较多,比较慢,如果内存的话可以考虑使用script debugger. |
l过五个斚w的比较,newxy+struts WEB开发与deiphi桌面开发相比,速度更快Q能力更强?
newxy是hibernate的替代者,struts+newxy是struts+hibernate的替代方案?
struts的不I下面一文章有代表性:《Struts的巨大烦?真的不适合大系l??a >http://dev.csdn.net/develop/article/85/85114.shtm?br />主要观点是:
一、{到展C层Ӟ需要配|forwardQ每一ơ{到展C层Q相信大多数都是直接转到jspQ?而涉及到转向Q需要配|forwardQ如果有十个展示层的jspQ需要配|十ơstrutsQ?而且q不包括有时候目录、文件变_需要重C改forwardQ注意,每次修改配置之后Q?要求重新部v整个目Q而tomcateq样的服务器Q还必须重新启动服务器,如果业务变更复杂频繁的系l, q样的操作简单不可想象。现在就是这P几十上百个h同时在线使用我们?pȝQ?大家可以惌一下,我的烦恼有多大?br /> 二、当面表单需要自动变化或者频J变化时?br /> 对于一个成熟的MISpȝ来说,面表单肯定是不固定?甚至象有些系l,面表单是存在数据库中, 需要填写的表单在页面自动生成,比如填写一个h员基本信?本来只需要填?姓名、性别、出生年?三个指标Q?而我后来需要增加籍贯这L指标Q我只需要在数据库中dc诏q个记录Qƈ在页面就能自动增加籍贯这L表单??struts在这斚wQ其优势反而变成了不Q我参考了非常多的人力资源理pȝQ这些系l几乎都能够做系l里面就可以控制人员信息的指C, q行使展C层能随之灵zd化,如果使用了strutsQ这些灵zL就Ҏ用不上。 同时Q如果页面表单频J变化时Q就需要频J修改formbean对应的方法和属性,而每ơ修改之后,p求重新部|Ԍ或者重新启动服务器……?br /> hibernate的不I下面是一位网友的看法Q具有代表性:
一、对象与数据库的映射Q关键在于对象关pȝ映射Q但是没做到很理惻I配置q多Q控制复杂, 另外q会出错。其实本质在于对象不够自由?br /> 二、事务处理。这点上更容易出问题Q相对于各种各样的事务管理器Q要兼容是一个大问题Q?d在各U应用服务器上有很多问题。其本质在于创徏了一个自我数据存取小环境Q必焉临各U兼定w题?br /> 三、HQL语言。徏立对象查询语aQ类SQLQ但是不同于M一USQLQ调试环境复杂。本质在于创Z一U语aQ增加学习成本?br /> q位|友q提Z减化和退化方案?
struts+newxyx以在开发效率上比struts+hibernate能提高十倍、甚臛_十倍,是因为克服了struts与hiberate的不?br /> 利用newxy DAOc,标签Q?struts+newxy可以在以下几个方面不用写java代码Q不用配|struts?
1.数据库的增、删、改Q?
2.Ҏ询所得数据缓存,指定~存旉Q?
3.数据库字W编码与本地字符~码转换Q?
4.文g上传Q上传大控Ӟ
5.文g下蝲Q下载记敎ͼ
6.囄昄Q?
7.数据分页昄Q?
8.客户端标记记录集哪条记录被选择Q?
因ؓ可以不写java代码Q不用徏立ActionFormcRActionc,因而不用配|strutsQ不用重新编译类文g、不用重新打包、不用重启服务器?可以克服struts的不?br /> 在克服hibernate的不x面,newxy采用“退化”和“进化”ƈ用的Ҏ?br /> newxy在进行数据的查询、增、删、改旉会调用一注册ҎQ根据业务涉及到的数据库相关数据源名和表名进行注册, 注册的目的是要获得表字段对应的javacdQ主关键字段名,d键字D长度等数据Q保存在一个单子实例中Q以供DAOc调用?如果已注册不再注册?br /> 可以对多表查询语句注册,如:“select a.field1,b.field2 from table1 as a,table2 as b where ...";
可以对跨数据源的查询注册。如Q?select a.field1,b.field2 from table1 as a,DB3.dto.table2 as b where ...";
如果是数据增、删、改Q则是对单一表注册;
׃struts+newxy用即时注册的ҎQ可以不象hibernate那样用静态文件媄数据库到值对象类。开发者不用配|Q何文件。可以用Q意查询语句,克服“对象不够自由”问题?br /> hibernate通过配置文g讄表之间的关系Q有一定意义,newxy在这斚w是“退化”的Q但struts+newxy在处理数据库表之间关pL面是很容易的?br /> 在事务处理方面,newxy提供了一事务cnet.newxy.dbm.Transaction。它可以多个数据库的操作放在一个事务中。由于DAOcd数据操作前的注册Ҏ得到的表及其字段各种Ҏ都是与数据库直接相关的Q而不是事先用静态文件媄, 因而极发生错误;开发者可以通过Transaction的方法ؓ不同的数据库讄不同的隔ȝU;可以讄操时回滚旉Q在讄的时间内事务没有完成Q会有一U程q行q预Q将事务回滚?br /> hibernate的HQL语言是和数据库与对象影射规则盔R应的,它没有特别功能,主要是利用值对象类来查询数据?newxy也提供了一U查询语aNQL。开发者不需用特D的语法来构建查询语句。非常容易理解,不会增加学习成本?
struts一旦与newxyl合C赯用是如此单,下列是struts+newxy代替struts+hibernate的例子?
struts配置中,formBean的type是“net.newxy.struts_faces.DynaFormBean”,开发者不需另外设计ActionFormcR如Q?br /> <form-bean name="myFormBean" type="net.newxy.struts_faces.DynaFormBean" />
用户从页面表单submit数据后,在ActioncȝҎ中,开发者可以用DynaFormBean代替struts ActionForm,用DynaDto代替hibernate 对象cR?br /> public ActionForward methodName(ActionMapping actionMapping, ActionForm actionForm,
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) throws Exception{
......
DynaFormBean form=(DynaFormBean)actionForm;
DynaDto dto=(DynaDto)form.getDto();
dto.set_table("table1");//如果用户面没有传来数据库表名?br /> try{
IFacade ifacade=IFacadeFactory.getFacade(httpServletRequest.getParameter("_dao"),
httpServletRequest.getLocale()); //l大多数情况是:IFacade ifacade=IFacadeFactory.getFacade();
//更新或插入,如果result==null,为updateQ否则ؓinsert?br /> result = ifacade.update(dto);//或:FormBeanUtils.update(ifacade, form);
//删除记录
ifacade.remove(dto);//?FormBeanUtils.remove(ifacade, form);
//数据查询Q如果上传了W合newxy多项查询规则的数据。查询记录集攑֜newForm 的_coll属性中?br /> DynaFormBean newForm=new DynaFormBean();
FormBeanUtils.createForm(newForm, httpServletRequest);
......
//开发者如果想知道生成的sql语句Q可以这P
//string sql=form.get_sql();
//׃开发者在Ҏ据进行操作时完全不需知道sql语句Q所以没有提供方法让开发者直接得到sql语句来控制数据操作?br /> //未来版本可能提供q样的方法?br /> }catch(Exception e){
......
}
}
如果使用newxy的标{֏以不建立Actionc,不设|struts的formBean及actionQ可以不写代码?br />
newxy也提供了一些实用类。本文是用newxy自n工具c轻村־立的?
U观国内的Y件行业,靠Java吃饭的程序员q真不是,而且JavaE序员是有很大优感的,毕竟对于很多用b/s搞开发的业内朋友来说QJava技术意味着隑ֺ大、门槛高Q因此相Ҏ说JavaE序员比其它的程序员(如php?net)收入高就理所当然。然而J2EE所涉及到的范畴是很q的Q不能一个JavaE序员就概括了事Q而应该具有层ơ及水^之分Q很多时候经帔R要进行分cL评Q有时他评、有时自评?/p>
谈到国内J2EE领域的程序员层次水^Q当前流行的U谓及评U不外乎׃面几U:
W一U是_N掌握记事本、Dreamweaver{工h写JSP+JavaBean数据库应用的是J2EEE序员;
W二U是用JBuilder、Eclipse{专用Java开发工具写着一堆一堆过E式Java BeanQ而且q能_NStruts+Spring+Hibernate{应用框架的高J2EEE序员;
W三U是用Together建模Q然后生成一堆Java接口或代码,开口闭口都是设计模式的资深JavaE序同及高pȝ分析、构架师Q?br /> 最后还有一U是整天在BlogJava或JavaEye上谈l论道的大师们,q些大师技术水q难以触摸,武功门派也各LԌ不好归类Q有时不好称为程序员Q因为有的时候他们甚至不写或者写不出E序Q,但又做着与J2EEE序员密切相关的事情Q我们暂且就归ؓ“牛牛”或“大师”?/p>
U谓毕竟只是U谓Q带有点主观或者功利色彩,有时很难鉴定一个h应该属于什么,因此Q我们再从纯技术的角度Q也x功修为的角度Q作了一个简单的分析及归c,?EE领域E序员大致分成以下几个层ơ,可以作ؓ大家自评的一个参考标准:
W一个层ơ:_N掌握Java语法、能调试基本的程序错误,_N掌握JSP+Java Bean写一些Nq前ASP、PHPȝ的Java Web应用E序Q如论坛、网站新d布系l、OA、网上商城等Q,_NJDBC使用、精通SQL语句、精通XML{?/p>
W二个层ơ:掌握设计模式原理及应用,掌握ZOO的分析及设计Ҏ,q能_N熟l用几UJava专业设计及开发工P_N掌握流行的J2EE框架如Hibernate、EJB、Webwork、Spring的原理及应用Q精通J2EE中一两个l成部分(如Servlet、EJB{?的工作原理及l节?/p>
W三个层ơ:林的高僧有两种Q禅僧及武僧。J2EEE序员的W三个层ơ也同样有禅、武两个分支Q这里我们重点分析一下:
W一个分支属于走的禅僧线路。在l完W二个层ơ中的各U武功基上,l合实际目中的千奇百怪的用户需求,游刃有余的选择适合的技术方案ؓ客户解决问题Qƈ形成自己的一套解x案。达到这一个层ơ的J2EEE序员已l不在乎使用M工具、Q何框架了Q而是Ҏ不同的对手,使用不同的武器或招式来应寏V好比小李飞刀一P只有辑ֈ了“手中无刀、心中有刀”的境界Q才能达到“出手一刀Q例不虚发”的效果。这一层次的武功属于一个熟l度问题Q刀l得多了、遇到的Ҏ多了Q再加上前面的武功修为,q做不C不虚发,也可辑ֈ十发九中?/p>
W二个分支属于走的武僧线路,在撑握熟悉第一二个层次中涉及到的内容后Q进一步专研ƈ撑握J2EE底层开发,J2EE规范制订、规范实现、Java虚拟机的工作原理、各U常见的J2EE服务器内核工作机制、内存管理、进E机制、源代码{。因为涉及的很多东西都比较抽象,代码也很多,l这一层的武功需要有很好的资质及耐性、ƈ兯得有一定的环境及条件。好比神雕大侠杨q拿起“玄铁剑”,q练成“暗焉掌”的成长q程Q需要前面的武功修ؓ作基Q更需那只威力武雕的帮助指点及他处处ؓ民、惩奔R恶的侠之心态?br />
胡侃了这么多Q现在来Ҏ自己情况算一下自q份量Q结果如下:
W一层 l到8成;
W二层 l到5成;
W三层 准备走禅僧线路,当前是l到1成;
唉,后面的武功提升越来越难,真不知道要到何年何月才能辑ֈ10成啊。你的武功练到哪一个层ơ了Q不防亮出来大家切磋切磋。嘿嘿,要是有一天,׃中国的JavaE序员h手一把“玄铁剑”、hZ低쀜暗焉掌”,那还了得Q汗...Q写着写着居然做v白日梦了Q不好意思,此打住?/p>