显示标签为“Java”的博文。显示所有博文
显示标签为“Java”的博文。显示所有博文

2010年8月22日星期日

JAVA开发二三事(续一)

dom4j 写入 xml 文件汉字乱码的问题

1、代码:
XMLWriter xmlWriter = new XMLWriter(new java.io.FileWriter(path));

2、问题:
在集成开发环境下启动的程序,写入文件,汉字确实是utf-8,不乱码;但是在console控制台下启动的独立运行,汉字就是乱码了。

3、解决的方法:
代码改成:
XMLWriter xmlWriter = new XMLWriter(new java.io.FileOutputStream());
问题解决。

4、原因:
java.io.FileWriter 没有实现 ENCODING 相关的接口(该说法来源于网络),所以在集成开发环境都是utf-8的情况下,可以输出utf-8,但是在console控制台下,是GBK环境,写入的就不是utf-8了。即使设置了也不起作用。
java.io.FileOutputStream 是二进制的流,实现了相关接口,所以没有问题。

2010年8月15日星期日

JAVA开发二三事

最近做了一个简单的JAVA图形界面程序,给一个同事的项目用。网上搜索解决了不少问题,现在总结一下,做个存档。

一、JAVA Sybase数据库连接:
1、JDBC连接字符串:
String url = "jdbc:sybase:Tds:" + machine + ":" + port + "/" + dbname + "?charset=cp936";
properties = new Properties();
properties.put("user", userID);
properties.put("password", password);
其中:machine是数据库服务器的IP地址。不能是机器名、不能是Localhost、不能是127.0.0.1。我的操作系统是Win7,除了静态IP地址,其他的都连接不上,这个折腾的时间最多。还有端口port是5000,不是文档上说的那个43XX。dbname是数据库的名字。加上 "?charset=cp936"参数是指明了字符集,为了返回结果中的中文正常显示,否是是乱码。默认的userID是sa,password是空字符串。

2、打开连接:
Class.forName("com.sybase.jdbc3.jdbc.SybDriver").newInstance();
connection1 = DriverManager.getConnection(url, properties);

3、数据库读取操作以及结果集循环:
Statement selectStatement;
ResultSet resultSet;
String kmdm;
String mc;
try {
if (connection1 != null) {
selectStatement = connection1.createStatement();
resultSet = selectStatement.executeQuery("SELECT KMDM, "
+ " MC "
+ " FROM KM" + cyear
+ " WHERE 1=1 ");
while (resultSet.next()) {
kmdm = resultSet.getString("kmdm");
mc = resultSet.getString("mc");
jTextArea1.append(kmdm + " - '" + mc + "'\n");
} catch (Exception exception) {
jTextArea1.append("Error: " + exception.getMessage());
}

二、JAVA Sybase Spring JdbcTemplate数据库连接:
1、连接字符串
String url = "jdbc:sybase:Tds:" + machine + ":" + port + "/" + dbname + "?charset=cp936";
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.sybase.jdbc3.jdbc.SybDriver");
dataSource.setUrl(url);
dataSource.setUsername(userID);
dataSource.setPassword(password);
其中:dataSource.setUsername和dataSource.setPassword不能省略。其实连接字符串中的url里面也能写上用户名和密码,但是会报错,一定要写。
2、查询一:
JdbcTemplate jt = new JdbcTemplate();
jt.setDataSource(dataSource);
String qry;
qry = "select count(MAX(SXH)) from BAK_PZ" + cyear + " GROUP BY YUE,PZLB,PZBH";
pzcount = jt.queryForInt(qry);
其中:queryForInt能直接得到整数型的返回值;
3、查询二:
qry = "SELECT A.* FROM BAK_PZ" + cyear + " A JOIN "
+ " (SELECT MAX(SXH) AS SXH,YUE,PZLB,PZBH FROM BAK_PZ" + cyear
+ " GROUP BY YUE,PZLB,PZBH) B "
+ " ON A.SXH =B.SXH AND A.YUE=B.YUE AND A.PZLB=B.PZLB AND A.PZBH=B.PZBH "
+ " ORDER BY A.YUE,A.PZLB,A.PZBH ";

List rows = jt.queryForList(qry);

Iterator it = rows.iterator();
String shrNull;
int tmpi = 0;
while (it.hasNext()) {
Map userMap = (Map) it.next();
shrNull = userMap.get("SHR") == null ? "" : userMap.get("SHR").toString().trim();
其中:queryForList 能直接把返回结果集组装成一个list,每个list里面是一个个的map,存放的是字段和对应的值,遍历、使用都非常方便。唯一的缺点是字段的值被装箱成Object了,一是要自己类型转换;二是内存消耗很大。方便飞副作用就是内存占用上升。

三、dom4j的使用(XML的生成、写入文件)
1、创建xml跟节点:
Document doc = null;
Element root = null;
doc = DocumentHelper.createDocument();
root = DocumentHelper.createElement("ufinterface");
doc.setRootElement(root);

2、给某个节点添加属性:
root.addAttribute("roottag", "voucher");

3、增加子节点
Element voucherElem = root.addElement("voucher");
voucherElem.addAttribute("id");
或者直接连续增加:
voucher_head.addElement("fiscal_year").addText(cyear);

4、DOM XML写入文件:
OutputFormat outFmt = OutputFormat.createPrettyPrint();
outFmt.setEncoding("UTF-8");
outFmt.setIndent(" ");//设置缩进
outFmt.setNewlines(true);//让xml换行,方便查看
XMLWriter xmlWriter = new XMLWriter(new java.io.FileWriter("c:\\凭证_" + dbname +pk_corp + "公司" + cyear + "年.xml"), outFmt);
xmlWriter.write(doc);
xmlWriter.close();
其中:Encoding设置为UTF-8能保证不乱码。缩进和换行是为了后续调试xml方便。为了减少体积可以不加。

四、用Netbeans来写GUI 图形界面程序太爽了,简直就是VB、C#图形程序的开发方式,拖拉控件、设置布局、写事件响应代码、挂接。很高效。当然,这个是调用的Netbeans自带的Swing开发框架。您老要是觉得不地道,自己整Swing或者AWT都行。Eclipse里面也可以自己去弄响应的框架。

五、JAVA 程序的打包发行。偷懒的也是最简单的做法,把编译生成的jar和自己加工过的jdk一起压缩发给客户。就40MB。然后写个简单的批处理文件,如下调用:
.\jdk1.6.0_20L\jre\bin\java -jar .\DesktopApplication1\dist\DesktopApplication1.jar
看到了吗,我直接把整个Netbeans项目文件夹都给客户了。顶多删除源码。jdk就是安装之后的1.6.0.20版,自己删除了里面带的源码、例子等等不需要的做了精简。

六、想到再说。吃饭了。

2010年4月25日星期日

Java 读写 Word doc 文件的方法(POI代码示例)

都说懒人推动社会进步。
我的出发点是,想做个自动生成工作日志的工具。思路是读取google日历中我每日的工作记录,填充生成公司规定格式的word文件,然后再调用邮件函数发送邮件到领导的信箱里面去。

这其中一环就是Java读写doc文件。网上找了不少资料,初步选用了Apache POI,可以读写整个Office系列的各种文档,并且不依赖Office的任何库,纯JAVA代码。直接读写doc的二进制文件,我最喜欢了。相对的有个Java com 桥的方法,用Java来操作com对象,后台运行隐藏的word程序,甚为不喜。

POI API Documentation 的文档写的太差了,没有例子,Apache 的 POI 项目主页也没有代码,直接说想看代码,请去svn下载代码,阅读他的单元测试用例,TestCase。
最后磕磕绊绊写了下面的一个测试的例子。基本可以看清这个POI的hwpf库,读写word doc 文件的方法。代码、注释都是原创,高手飘过去就行了。

import java.io.*;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.hwpf.usermodel.Section;

public class Main {

public static void main(String[] args) {
try {
//新建 HWPFDocument 对象,读入doc文件
HWPFDocument doc = new HWPFDocument(new FileInputStream("c:\\test.doc"));
//得到整个doc文档的Range,可以理解为文档对象
Range r = doc.getRange();

System.out.println("Example you supplied:");
System.out.println("---------------------");

String text = new String("");
//得到整个文档里面的所有纯文字,包含回车换行。一段是一行
text = r.text();
//System.out.println(text);

//得到整个文档的分节数。一般只有一节,排版很漂亮的word文档一般分为多节
System.out.println("numSections: " + r.numSections());
//得到倒数第一节的Section对象
Section section = r.getSection(r.numSections() - 1);
//得到该节里面的段落数
System.out.println(section.numParagraphs());
System.out.println("numParagraphs: " + section.numParagraphs());

String searchText = "${Ryan}";
String replacementText = "Apache Software Foundation";

//循环得到每一段落的文字。这个跟Range.text()是不同的。
for (int np = 0; np < section.numParagraphs(); np++) {
Paragraph para = section.getParagraph(np);
//得到该段落的文字
text = para.text();
//System.out.println(Integer.toString(np) + ":" + text);
int offset = text.indexOf(searchText);
if (offset >= 0) {
System.out.println(Integer.toString(np) + ":" + para.text());
//如果找到了,就进行文字的替换。replaceText只能针对段落
para.replaceText(searchText, replacementText);
break;
}
}
//写入到新的doc文件
OutputStream outdoc = new FileOutputStream("c:\\test2.doc");
doc.write(outdoc);
outdoc.flush();
outdoc.close();

} catch (Throwable t) {
t.printStackTrace();
}
}
}


编译运行很顺利,但是悲剧的是,最后调用write方法写入的doc文件打不开了,报格式错误,用Notepad++打开这个doc文件对比原来的,发现文字确实替换成功了,但是文件的尾巴上少了一部分内容,二进制和assic混合的,格式看来是被破坏了。

忙活了半天,最后发现杯具了。应该是兼容性的问题。改天去他们的邮件列表问问。或者路过的看官知道的,指导一下我。

我在写这个文章的时候,又想到一个绝妙的注意。何必绕道这么远呢?
实施工作日志内容来源于google calendar,如果能够利用google app doc 自己本身的宏:google script,的功能,读取日历数据,形成doc文件,调用gmail发送到指定的信箱,不是齐活了吗?费不着用Java了。

其实在决定用java之前,想过用VB,这个做肯定不存在问题,VB操作com对象本身是轻车熟路,顶多再找个发邮件的库,实在不行了没人手工发送。方法还是很多的。

科技以人为本。

2010年2月22日星期一

GAE(Google App Engine) 对 struts Spring 等的支持情况

完整描述见这里:(要fuckgfw)
http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine

Spring MVC
Version: 2.5.6
Status: COMPATIBLE
To see Spring's MVC framework running on App Engine, check out the autoshoppe sample application.
If you're using Spring forms (e.g. using the spring-form.tld tag library and subclassing SimpleFormController), you will need to register custom editors for your properties. This is covered in http://groups.google.com/group/google-appengine-java/browse_thread/thread/d93fd7385bf85bf7.

Spring ORM
Version: 2.5.6
Status: COMPATIBLE
To get Spring working with the App Engine-provided JPA interface, follow the instructions at http://objectuser.wordpress.com/2009/05/19/spring-jpa-in-google-app-engine/, which discusses a workaround to the dependency on javax.naming needed for @PersistenceContext. A more complex workaround is available at http://groups.google.com/group/google-appengine-java/browse_thread/thread/187d41712ec1d394.

Spring Security
Version(s): ?
Status: SEMI-COMPATIBLE
To work around a ClassNotFoundException, you can use a re-compiled version of the library which adds a StringInsensitiveComparator class -- the download is provided at http://www.google-app-engine.com/blog/post/Spring-security-fix-for-google-app-engine.aspx.
See http://www.dotnetguru2.org/bmarchesson/index.php?p=1100 for tips on how to get Spring Security running with App Engine and GWT (in French).

Stripes Framework
Version(s): ?
Status: COMPATIBLE
The default multipartwrapper implementation needs a temporary directory on the local file system for file uploads, which App Engine doesn't allow. The workaround is to create your own implementation -- more details at http://groups.google.com/group/google-appengine-java/browse_thread/thread/81dbcf7cf2281014.

Struts 1
Version: 1.2.28
Status: COMPATIBLE

Struts 2
Version(s): ?
Status: COMPATIBLE (see notes)
Struts will not initially work because the OGNL permissions which the framework relies on can't be set due to security restrictions in App Engine's sandbox. However, some users have documented a workaround at http://groups.google.com/group/google-appengine-java/browse_thread/thread/19018b0317f27817.
A tutorial on uploading files using Struts running on App Engine is available at http://whyjava.wordpress.com/2009/10/04/file-upload-on-google-app-engine-using-struts2/.
Will need to set devMode to false in struts.xml: <constant name="struts.devMode" value="false" />


这个人的博客上也描述了如何使用 Struts 2 with App Engine:

还有这个博客,关于GAE、Spring、JPA、JDO 内容非常丰富:(要fuckgfw)

  • Spring + JDO in Google App Engine
  • 17 Minute JDO!
  • Spring + JPA in Google App Engine
  • More on Spring Security in Google App Engine
  • Spring Security in Google App Engine
  • Google App Engine Testing with Spring
  • Queries in GAE: One to Many Relationships
  • Google App Engine
  • Queries in GAE: Many to Many Relationships
  • Queries in GAE: One to One Relationships

Spring + JPA in Google App Engine


I've been playing around with Google App Engine because it's new and cool and has some interesting possibilities. However, it's in a preview mode currently and has some limitations, as expected.

One difficulty I encountered was getting Spring (2.5.6) to work nicely with the App Engine-provided JPA. But now I have it working. Here's how.

The basic problem is that PersistenceAnnotationBeanPostProcessor has a dependency on javax.naming. But that's the thing you need to get @PersistenceContext to work. And you want that to work because you want to be able to have transactions that span DAOs (or, at least, I wanted that).

That dependency is easy to resolve, however. Just grab the source to PersistenceAnnotationBeanPostProcessor, put it in your own package, and replace the catch blocks with NamingException with just Exception … you won't be using those things anyway.

Now, use that bean in your context configuration file.
<bean id="persistienceAnnotationBeanPostProcessor"
class="your.package.name.PersistenceAnnotationBeanPostProcessor" />

Finally, use the @PersistenceContext annotation in your DAO just like it says in the Spring documentation:
@PersistenceContext
private EntityManager entityManager;

You're done. Thank me.

Update 5/25: As Alex points out I spelled the bean ID incorrectly. However, that was right from my code, so the id doesn't really matter. In fact, now I have:
<bean class="your.package.name.PersistenceAnnotationBeanPostProcessor" />

2009年5月7日星期四

Grails 连接 Oralce url 的方法

在玩Grails。
折腾了半天,终于连上了oracle数据库。下面是url的例子:
dataSource {
pooled = true

url = "jdbc:oracle:thin:@localhost:1521:orcl"
driverClassName = "oracle.jdbc.OracleDriver"
username = "ncstudy"
password = "ncstudy"
}

其中:thin是jdbc驱动的一种类型。orcl是实例名。

我试了sqlite数据库:

url = "jdbc:sqlite:gtunes"
//url = "jdbc:sqlite::memory"
driverClassName = "org.sqlite.JDBC"

怎么都是不成哦。

奇怪的是,NC的oralce驱动类名是oracle.jdbc.driver.OracleDriver,我试了,两个都可以。

收工,回家。
由于GAE不支持hibernate,没办法,那就很多scalforld的功能没法利用了。只能用JPA。JDBC也用不了,得换成JDO。GORM也悬了。哎呀。Grails。

郎啊郎别太忙 | langalang.blogspot.com

2009年4月8日星期三

Google App Engine SDK for Java 版提前发布测试 - wow !!!

Google云计算平台Java支持提前发布了。原来说要等到5月份。这下得好好玩玩了。

文档地址:http://code.google.com/intl/zh-CN/appengine/docs/java/gettingstarted/

SDK for java 早期版:http://googleappengine.googlecode.com/files/appengine-java-sdk-1.2.0.zip

注意:Google App Engine SDK for Java,在中文的GAE网站上还没有下载的。

如果自动重定向到中文网页,请在页面顶端选择english。

或者访问:http://code.google.com/intl/en/appengine/downloads.html#Google_App_Engine_SDK_for_Java


郎啊郎别太忙 | langalang.blogspot.com

2009年4月2日星期四

Google App Engine将支持Fortran语言?

昨天(美国是今天)AppEngine的官方blog宣布:Google App Engine将支持一名牌编程语言Fortran。
来源:
Today we're excited to officially announce support for FORTRAN 77!
还有一个相应的SDK下载。

其实,一看到Fortran77几个字,我就笑了。4-1玩笑而已。
大笑大笑。有益健康。
谷歌鸟看。也是笑死个人哦。
昨天还有个网易的科技新闻也比较搞,说是微软发布了新的操作系统,名字叫做windows98!!!
取信没有进入时空机器,新闻是10年前的新闻了。一字不改哦。
郎啊郎别太忙 | langalang.blogspot.com

2009年3月31日星期二

Google App Engine 云计算平台5月份将支持Java语言

来源:

Java: Coming Soon to Google’s App Engine


重大利好。原来只支持Python语言,毕竟开发群体没有Java、PHP等大。这下Google的云计算平台获得了最大的程序员开发群体支持。
传言SUN即将被IBM收购,sun手头的Java平台上的云计算平台,肯定要在IBM手中大放异彩,成为未来的一个重要的基础平台。
Google此举有点抢占先机的意味,同时咄咄逼人。因为Google宣布,将采用自家的JVM(Java虚拟机)Dalvik,不跟
SUN玩了。
Dalvik这个平台已经在google的Android手机平台上使用了,特点是小内存下的编译执行,速度超快。它是Google手机平台的核心组件,所有应用都是Java的,但是不是SUN的J2ME,速度上那快的不是一点两点。
所以说Google可能通过自己的JVM,自己的云计算平台,自己的移动计算平台,组建自己的web操作系统平台。
这是Google最强大的地方。
主啊,菩萨啊。我把一切都交给云了。一切都交给Google的云了,


郎啊郎别太忙 | langalang.blogspot.com

2008年12月1日星期一

AIX UNIX 平台安装 NC oracle 和 WAS 经验数则

一个全国性的大客户,120家3级单位,上了NC系统。运行于AIX UNIX平台,数据库Oracle,NC使用了IBM WAS 中间件做群集。
硬件方面,四台IBM Sytem P5 小型机,两台SNA盘阵,一个带库。分成两组,每组一台数据一台应用,一组在线,另一组灾备,HACMP群集。折腾oracle、nc、WAS遇到几个问题。问题虽然都解决了,对于不熟悉的人来说还是很费劲的。
随便写几点,想到哪里,写到哪里。
  1. NC连接不上oracle,用任何客户端都连不上,监听ping得通,但是就是不正常。原因是由于oracle装在盘阵上,而ha还没有配置好,监听配置指定IP的话,解析不到,只能写hostname。这个折腾了一下午,鄙视一下Oracle的经销商。
  2. AIX自带了一个java1.5,位于/usr/java5,直接export JAVA_HOME=/usr/java5就可以。公司流传的那个版本是linux平台的,在aix ppc 64平台上没法用。
  3. AIX环境的LANG设置:export LANG=Zh_CN。和linux平台不一样,注意大小写。这个不写对,nc是乱码,日志"报无法解析语言配置文件"错误。
  4. System P5的机器,WAS要使用AIX PPC 64的版本,如果跑NC502,要使用.11的补丁,.07的不行,补丁和tools也要相应的版本。在这里强烈谴责一下集团办事的人,3张WAS盘,补丁和tools盘都发错了,去ftp上下载,要下一天。怎么在办事啊?浪费时间。
  5. AIX 平台 umount 光驱的问题,大活人被那个什么憋死,怎么都umount不了cdrom,总是说资源忙。上网查,有大把的同病相怜的兄弟姐妹。光驱不umount的话,光盘弹不出来,换不了盘,WAS可是有三张盘的哦。被折腾的火大,大叫一声FUCK user,谁在使用光驱啊,使用这个命令,他可以显示出谁在使用光驱:fuse -uck /cdrom,看到是root在用,root不就是自己吗?FUCK到自己头上了。高。但是就是kill不掉这个root进程,没办法,惹不起,我还躲不起,关掉所有的连上去的远程端,再重新进,fuse -uck /cdrom,这次ok 了,umount /cdrom,跑到机房换光盘去。这个问题折腾了老半天。晕死。
  6. 装WAS的时候,直接进cdrom的WAS目录,运行setup.sh安装。刚开始的时候,想和win下面一样,运行launch.sh,结果说必须在浏览器里运行,机器上又没有mozilla,搞死个人。
  7. 宁可麻烦一点,mount光驱,拷贝WAS安装文件到硬盘再装,要不然10倍数的cdrom,装的慢死。装第二台时,速度刷刷的。
  8. smitty是个好东西。
  9. smitty jfs2,可以进去调整挂载的硬盘分区的大小。这台机器由于要做磁带备份,默认只备份根分区,根分区搞的很小,只有3G、太小了。
  10. 待续。。。

--
郎啊郎别太忙 | langalang.blogspot.com

2008年11月19日星期三

JRuby 1.1.5 发布

JRuby 1.1.5 Released

Homepage: http://www.jruby.org/
Download: http://dist.codehaus.org/jruby/

JRuby 1.1.5 是从 JRuby 1.1以来的第5个发行版。主要改进了兼容性和效率问题。我们的目标是更快的更新周期(3-4周)。我们希望在一个更快的更新周期里面解决JRuby用户提出的问题。

主要更新:

- 每个类方法缓存 (改进 _send_, respond_to?, and defined?)
- 常量缓存显著的改进了常量的搜索
- 减少了内存占用
- 几个 Java 集成的修复
- 更新到Rubygems 1.3.1 和 Rspec 1.1.11
- 更新了 ffi (Foreign Function Interface) 支持t
- 更多 1.9 mode支持
- 修复了从 1.1.4以来的113 bug

--
郎啊郎别太忙 | langalang.blogspot.com

ubuntu 替换 安装别的 java 版本

sudo update-alternatives --config java

--
郎啊郎别太忙 | langalang.blogspot.com

2008年11月12日星期三

NC 可以飞快的在 Firefox 里面运行

今天试了试,用友NC的确可以在Firefox(火狐浏览器)里面正常运行。速度比IE里面快。
晚上做一个报表,5千行记录,IE刷新一下很慢,并且是越来越慢。忍不住到Firefox中试了试,果真可以。
以前试过的,总是不行,打不开用友NC,今天在第一次载入的时候,多等了一下,就进去了。
Firefox是3.0.3。这样在Linux下面也可用了。实在没有理由再在windows下面办公了。
组长老吴一次在火车上看了我秀了ubutun的3D动态桌面,播放视频,编辑word文档,大发感慨,号召大家都转到linux下面去。要得哦。
不过,我建议办公使用,还是用 Fedora10 这个版本比较好,因为所有的软件都在一张DVD光盘里面了。ubuntu虽然说很方便,但是毕竟让每个人都去熟悉apt-get install命令,还是有部分人不感冒的。

老规矩,email post blog,附件发图片到博客。一气呵成。
--
郎啊郎别太忙 | langalang.blogspot.com

2008年10月20日星期一

NC脚本的JAVA_HOME设置

============nc脚本的JAVA_HOME设置=======
在ufsoft/bin/ncSysConfig.sh和ufsoft/startup.sh文件的头部,均加上下面两句:

export LANG=zh_CN.gbk
export JAVA_HOME=/home/jdk1.5.0_06

这是最简单的设置JAVA_HOME的方法

--
郎啊郎别太忙 | langalang.blogspot.com

2008年10月11日星期六

最近在玩的东西

最近除了在研究java/j2ee/jsp/Tomcat/Glassfish等技术性的等东西外,还有blogger、twitter、叽歪等玩意。

blogger最大的好处是可以用邮件自动发布文章。不用我登录,随便写一份邮件过去,就可以发布出来。

我的微软的博客也接受邮件发博,正好,可以写同时给这两个地址发邮件,一篇博就方便的发在两个地方。国内的还没有哪一家支持这个服务吧?百度的是不行的。donews的wordpress的也不支持,那一些使用dot net的TEXT系统的比如csdn、博客园等,统统不行。新浪、sohu支不支持,那就更悬了,这一些网站就是要赚流量放广告的,他生怕你不来他的页面访问,远程发博,想都不用想。

目前有一个最大的问题,blogger的抄送功能不能用,就是BlogSend功能,BlogSend地址是另外一个电子邮件地址,只要一发布文章,系统会将其邮寄文章到此地址。但是就是不能寄送到msn livespace。

这里有两篇重要的参考文章,估计网上的搜官都看过:

Google Blogger使用技巧

使用手册--安装邮件发布博客

看了就明白如何邮件发博。

另外,在goolge上搜索"邮件发布博客",可以证明,国内提供这个邮件发博功能的真是不多啊。

当仁不让,本文同时通过Gmail发送到另外一个蜗居:http://anuxs.spaces.live.com/


--
郎啊郎别太忙 | langalang.blogspot.com