最近在学的技术

根据这篇日志的题目,必然是一篇水文,我思量再三,还是把它放出来,这些技术的接触把我带入了另一个广阔的天堂。这是我学Java以来的第二个里程碑。 使用Java1年半,1年前开始JSP编程,一直是我和周围的朋友自己摸索,学校没有开Java课,也没有参加什么培训课程,面对庞大的Java开源分支,我一直摸索 ,不能登堂入室。 万分感谢倪经理这1个月来的教导,他给了我一个不一样的Java。 iBatis 如果说Hibernate是一款自动化的导弹,那么iBatis则是一款轻型的半自动步枪,简介、高效、方便配置。加上iBator这个神器,iBatis可以使开发 效率几倍提升。 ...

2010-04-18 · alswl

Java笔记 使用反射来改进BaseDao

关于反射 反射的定义(via Wiki):在计算机科学中,反射是指一种特定类型的计算机程序能够在运行时以一种依 赖于它的代码的抽象特性和它的运行时行为的方式被更改的特性。用比喻来说,那种程式能够"观察“并且修改自己的行为。 Java中的反射示例如下: package dddspace.job.exercise1116; public class Foo { public void fun(String str) { System.out.println(str); } } package dddspace.job.exercise1116; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class ReflectionDemo { public static void main(String[] args) throws SecurityException, NoSuchMethodException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { // 不使用反射 Foo foo = new Foo(); foo.fun("no reflection"); // 使用反射 String className = "dddspace.job.exercise1116.Foo"; String funName = "fun"; // 获取类名 Class cls = Class.forName(className); // 创建Object实例 Object foo2 = cls.newInstance(); // 创建Method hello Method method = cls.getMethod("fun", String.class); // 使用反射来调用Method的invode方法,参数是目标对象+参数 method.invoke(foo, "use reflection"); } } 原始BaseDao设计 我先阐述一下BaseDao的设计想法:BaseDao是一个抽象类,提供一系列Dao方法”get()/getAll()/add()/update()/delete()/getCount()",通过泛型匹配的获取类,我取出一个方法来做示例。 ...

2009-11-17 · alswl

Java入门好书《Java JDK6学习笔记》

Thumbnail

《Java JDK6学习笔记》(via 豆瓣,via ChinaPub)是我最近在看的一本书。虽然名为Java学习笔记,其实** 深入浅出的讲解了Java这门语言。书中的语言颇有白文风格**,适合没有语言基础的同学学习,也适合对一些概念不清楚的开发人员。 我很快的翻阅了半本书,作者的范例代码简单精要(“Java笔记split/不定长度参数/泛型类型通配符”中示例代码就是改编自本书)。我现在正在阅读线程、反射和Annotation这三块内容,看得我酣畅淋漓啊。 我算是概念模糊的开发者,现在准备笔试/面试所以恶补一下平时接触比较少的概念。我虽然也有《Think in Java》这本至尊级的书,但是显然这本书研究过深,不适合快速复习。《Java JDK6学习笔记》就成了我首选了。(感谢CUMT图书馆!) ...

2009-11-16 · alswl

Java笔记 split/不定长度参数/泛型类型通配符

今天看了一下午《Java学习笔记》,作者林信良,花名良葛格。从书中所获颇 多,正所谓温故而知新,我就把今天的"新"总结一下,加深记忆。良葛格也提倡"在网上写文章是我记录所学的一种方式"。 split的正则式和其中的正则式 C语言其中有函数strtok,就是按某些char对字符串进行切割。下面给出一个C下面的范例 char str[] = "now # is the time for all # good men to come to the # aid of their country"; char delims[] = "#"; char *result = NULL; result = strtok( str, delims ); while( result != NULL ) { printf( "result is "%s"n", result ); result = strtok( NULL, delims ); } 在Java中也有类似的StringTokenizer,但是在JDK5中,已经被标记为Legacy Class(遗产类),推荐使用String.split(String regex),可以接受正则表达式。范例如下。 ...

2009-11-15 · alswl

使用XOM类库对Java对象进行序列化

校内工具需要保存用户名和帐号,我就想把帐号信息作为一个XiaoneiUser类,然后对其进行对象持久化。 Google下的方法有好几种方法进行持久化,JDOM, DOM4J, SAX等。我看了之后,感觉都比较麻烦,我个人比较喜欢使用jdk自带的工具,但是查阅jdk api之后,感觉使用 javax.xml.* 下工具开发更加困难。 我仅仅是需要对一个简单的对象进行持久化来保存数据,并不需要太多太复杂的功能。最后我决定使用《Thinking in Java》推荐的开源类库:XOM 猛击这里打开www.xom.nu 友情提示一下,网站可以打开,但是下载的连接貌似被墙了,至少我教育网连不上去。推荐 一个在线代理服务器古狗在线代理(猛击这里打开),通过它就可以下载类库了。 使用类库非常简单,我这里提供个小例子。XiaoneiUser类 ...

2009-06-10 · alswl

java.net.*操作session/GET/POST方法

终于又考完一门试,开始做课程设计了,结果课程设计给工作室一个尾气3个月的项目,而这次的先用我写的贴吧放上去,我变得暂时空闲了,开始着手写校内开心农场小工具- 全能拖拉机。 首先要解决的就是校内登录的问题,那就是Get/Post方法了,还有用户状态保存,就是session的操作。Java不同于C#,那位可以集成系统 的浏览器或者之间创建一个Browser。 开始写了自己的第一个版本。 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.ProtocolException; import java.net.URL; import java.net.HttpURLConnection; public class FarmerHelper { /** * @param args * @throws ProtocolException */ public static void main(String[] args) throws ProtocolException { String loginUrlStr = "http://login.xiaonei.com/Login.do"; String homeUrlStr = "http://home.xiaonei.com/Home.do"; URL loginUrl = null; URL homeUrl = null; HttpURLConnection loginConn = null; HttpURLConnection homeConn = null; try { loginUrl = new URL(loginUrlStr); homeUrl = new URL(homeUrlStr); try { loginConn = (HttpURLConnection) loginUrl.openConnection(); homeConn = (HttpURLConnection) homeUrl.openConnection(); } catch (IOException e) { print("Conn't open the url connection!"); e.printStackTrace(); } } catch (MalformedURLException e) { print("Illegal URL!"); e.printStackTrace(); return; } loginConn.setRequestMethod("POST"); loginConn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.10)" + " Gecko/2009042316 Firefox/3.0.10"); loginConn.setRequestProperty("Keep-Alive", "300"); loginConn.setRequestProperty("Connection", "keep-alive"); loginConn.setRequestProperty("email", "alswlwangzi@163.com"); loginConn.setRequestProperty("password", "xh77Gffb_i"); loginConn.setRequestProperty("submit", "登录"); loginConn.setRequestProperty("Keep-Alive", "300"); try { loginConn.connect(); String headerName = null; String cookie = ""; /* * for (int i=0; (headerName = * loginConn.getHeaderFieldKey(i))!=null; i++) { if * (headerName.equals("Set-Cookie")) { cookie = * loginConn.getHeaderField(i); print(cookie); } } */ cookie = loginConn.getHeaderField("Set-Cookie"); print(cookie); homeConn.setRequestProperty("Cookie", cookie); homeConn.setRequestMethod("GET"); homeConn.connect(); BufferedReader in = new BufferedReader(new InputStreamReader( homeConn.getInputStream())); String lineStr = null; while ((lineStr = in.readLine()) != null) { // print(lineStr); print(new String(lineStr.getBytes("GBK"), "UTF-8")); } } catch (IOException e) { print("conn't connect to the server!"); e.printStackTrace(); } } private static void print(Object o) { System.out.println(o); } } 想法总是好的,现实总是残酷的,调试很久,用WireShark抓包,都是有Length Required错误,这个比较头疼,我感觉是我session传递的问题(其实不是,后来发现是Post的格式问题),于是网上找来一个Session操作类。 ...

2009-06-09 · alswl