Tag Archives: Java

Dom4j 中文问题

第一次使用dom4j进行xml文件的处理,使用很简单,开发很高效。
测试中中文会出现乱码,看了一下生成的文件,默认为utf-8存储,这样乱码必然会出现。
解决方法也很简单,见如下代码
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("gbk");
        XMLWriter writer = new XMLWriter(new FileWriter("commands.xml"), format);
        Document document = reader.read("commands.xml");
        writer.write(document);
        writer.close();
也就是在写入文件时设置一下编码格式就可以解决乱码问题。

Google Web Toolkit 和 Google App Engine 综合教程 交互篇

前面几篇教程已经把Google Web Toolkit 和 Google App Engine 两方面的代码完成了很大部分,这篇教程将让Google Web Toolkit 的客户端代码与 Google App Engine 的服务器端代码联合起来,实现客户端和服务器端的交互。
Google Web Toolkit 如何与服务器交互?
Google Web Toolkit 的程序最终会以JavaScript代码的形式在用户的浏览器上运行。所以,如果要与服务器交互,要使用JavaScript支持的方法。Google Web Toolkit 为我们提供了3种方法。
远程过程调用 (Remote Procedure Calls, GWT RPC)
如果项目的服务器端使用Java,并且为服务器端的操作都使用了各种接口,那么 GWT RPC是最好的选择。因为我们使用 Google App Engine 作为服务器端,使用Java编码,所以接下来将使用 GWT RPC来完成我们接下来的教程。
更详细的有关 Remote Procedure Calls 的介绍,请看这里。
HTTP 取回 JSON
如果项目的服务器端没有使用Java,亦或是已经使用了JSON 或 XML,那么就可以通过HTTP来取得JSON来实现与服务器端的交互。
更详细的有关 JSON 的介绍,请看这里。
利用 JSONP 协议
如果你对 mashup 很感兴趣,那么一定不能错过 Google Web Toolkit 提供的这种方法。
更详细的有关 [...]

Google Web Toolkit 和 Google App Engine 综合教程 存储篇

前面已经向同学们简要介绍了Google Web Toolkit 和 Google App Engine ,并且做出了一个初步的界面。在这篇教程里,我们将一起学习如何使用Google App Engine 的数据库。
简单介绍Google App Engine 的数据库
Google App Engine 的数据库提供了健壮的可扩展的分布式数据存储,我们不必考虑连接哪一个数据库,也不需要配置连接参数。我们需要做的是调用简单的API来进行各种操作。
Google App Engine 的数据库提供了两套API : 标准API和底层API。标准API是与App Engine解耦的,所以使用标准API你可以很方便的将你的应用移植到其他环境中;而是用底层API,你可以让你的应用拥有更好的性能。
Google App Engine 支持两种连接数据库的标准: Java Data Objects (JDO) 和 Java Persistence API (JPA)。从Google App Engine 的网站中可以看到,它们都是由DataNucleus Access Platform提供的,不过我没有细看,有兴趣的同学可以自己点进去学习。
什么是JDO ?
Java Data Objects (JDO) 是存储对象的标准接口。使用了JDO的应用程序不需要关心数据库类型,不论是关系数据库,层次数据库还是对象数据库,这样在我们更换数据源的时候会非常的方便。
要在Google App Engine项目中支持JDO,需要进行配置,不过Eclipse的插件已经帮我们做好了,再次请有兴趣的同学移步这里仔细学习。
Java Persistence API (JPA) 和JDO的作用相似,我现在使用的JDO,所以就不多做介绍了,链接补上。
建立数据库的POJO类
前面进行了简单介绍,下面来实际操作一下。新建一个net.kylewu.idea.db.dataobject.Idea类。

Google Web Toolkit 和 Google App Engine 综合教程 界面篇

诸位还不清楚Google Web Toolkit 和 Google App Engine是什么的同学,请移步这里,看我的综合教程 启蒙篇。
请装好Eclipse的插件,后面的程序都是以插件为准,用命令行的同学请自己注意。
创建Eclipse工程
点击最左面的小图标就开始创建新的Web应用。我这里创建了一个名为kylewuidea的Project,包设为net.kylewu.idea,我们这里要同时使用Google Web Toolkit 和 Google App Engine,所以两个都要选择支持。确认后可以看到Eclipse为我们创建好了整个Project,结构见图。

Google Web Toolkit 部分
打开Kylewuidea.java,里面已经写好了一个事例程序,有兴趣的同学可以先熟悉一下。接下来删除这个文件里多余的代码,仅保留下面这些。

Google Web Toolkit 和 Google App Engine 综合教程 启蒙篇

什么是Google Web Toolkit 和 Google App Engine?
Google Web Toolkit : 如今,编写网络应用程序是一个单调乏味且易于出错的过程。开发人员可能要花费 90% 的时间来处理浏览器行话。此外,构建、重复使用以及维护大量 JavaScript 代码库和 AJAX 组件可能困难且不可靠。Google Web 工具包 (GWT) 通过允许开发人员用 Java 编程语言快速构建和维护复杂但高性能的 JavaScript 前端应用程序来减轻该负担。
Google App Engine : Google App Engine 使您可以在支持 Google 应用程序的同一可扩展系统上构建网络应用程序。
上面是直接摘自Google Web Toolkit 和 Google App Engine 的主页。总的来说,前者提供一个用Java编写Javascript的工具,后者提供一个网络平台,用户可以在上面搭建自己的应用。
为什么要使用Google Web Toolkit 和 Google App Engine?
首先,如Google一贯作风,两者都是免费的,是code.google.com下的项目。
其次,Google App Engine开始支持Java,这样,两个工具在一起使用更加方便了。
当然,熟悉了Google Web Toolkit有助于开发JavaScript,了解Google App Engine可以在网上搭建自己的应用。
最后,学习新技术是提升自己的途径,能够开阔自己的眼界,锻炼自己的思想。
如何获得Google Web Toolkit [...]

serialVersionUID介绍

What is serialVersionUID?
serialVersionUID是Serializable类的验证器。也就是说,在序列化时,通过判断serialVersionUID来验证版本的一致性。如果没有匹配,将会抛出InvalidClassException异常。
Guidelines for serialVersionUID
serialVersionUID的几条注意事项

在类中要加入serialVersionUID字段,即使这是该类的第一个版本
在未来的版本中不要去修改serialVersionUID的值,除非你了解修改以后将导致新旧版本不兼容
即使保持serialVersionUID的值不变,序列化类的新版本也有可能与旧版本不兼容

Generate serialVersionUID using Eclipse

这里有两种添加方式:
默认的serialVersionUID和生成serialVersionUID。
选择默认的话将设为private static final long serialVersionUID = 1L;
而生成的话将生成一个随机值(其实是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段)
Summary
Java序列化是一个简单而又高深的部分,在实践中要慢慢学习。

学习使用Twitter4J

What is Twitter4J?
Twitter4J是TwitterAPI的一个Java库。使用Twitter4J,你可以方便的将你的应用程序与Twitter服务结合。
How to use Twitter4J?
首先,从Twitter4J的网站上下载最新的Twitter4J的jar包。点这里可以进入下载界面。
下载完成后,让我们打开Eclipse,新建一个Java工程,不要忘记将Twitter4J的jar包加入Library中,见下图。

接下来我们可以创建一个net.kylewu.twitter.TwitterMain类,用来程序主流程。代码如下(代码比较多,折叠起来了,点箭头就可以看到完整的了)。
package net.kylewu.twitter;

import java.util.List;
import java.util.Scanner;

import twitter4j.DirectMessage;
import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.Status;
import twitter4j.Tweet;
import twitter4j.Twitter;
import twitter4j.TwitterException;

/**
 * The main class of twitter client
 *
 * @author Kyle Wu
 *
 */
public class TwitterMain {

    public static void print(String string) {
        System.out.println(string);
    }

    public static void main(String[] args) {

        if (args.length < 2) [...]