星期六, 三月 26, 2005

用JSP生成Excel文件下载的最简单的方法

Tips:没想到Excel可以直接打开用<table> HTML tag的文件,并且能正确显示颜色和字体等信息.

<%
String path=request.getRealPath("/");
StringBuffer outstr = new StringBuffer();
PrintWriter pout = response.getWriter();
response.setContentType("application/x-msexcel");
java.util.Calendar ca=java.util.Calendar.getInstance();
String filename=ca.getTime()+"_filename.xls";

response.setHeader("Content-Disposition","attachment; filename="+filename);
pout.println("");
StringBuffer _finalStr=new StringBuffer();
_finalStr.append("\n");
_finalStr.append("");
_finalStr.append("
工资计算
考勤开始时间"+termstartdate+"
结束时间:"+termenddate+"
工资计算时间:"+ca.getTime()+"
计算人Good
工号UserId\n
");
pout.print(_finalStr.toString());
pout.close();
outstr=null;
%>

星期二, 三月 22, 2005

Java 极其过度的IO设计

按行读入一个文本文件:
BufferedReader in = new BufferedReader(new FileReader("你的文件.txt"));
String s, s2 = new String();
while((s = in.readLine())!= null)
s2 += s + "\n";
in.close();

星期四, 三月 17, 2005

小资料:Transaction(ACID) Property.





















ACID
原子性( Atomicity ) 一个事务是处理过程的一个原子单元;要么执行整个事务,要么一点也不执行
一致性( Consistency ) 事务的正确执行必须是使系统从一个一致的状态到另一个一致的状态
孤立性( Isolation ) 在事务被提交之前,它的更新对其它事务应该是不可见的。也就是说,它应该自己运行,就象没有其它事务在运行一样
持久性( Durability ) 一个事务一旦提交,所提交的更改必须在任何故障事件下都永不丢失

星期六, 三月 12, 2005

JDO About

1.Domain Object Model(行业对象模型)
DOM是应用的设计者来说尤其重要.
因为DOM往往代表着一个应用的基本状态和可用的行为.
因为它往往代表着应用目标客户可以理解的概念.并且能提供专家的意见.

NetBean 4.1 beta VS Eclips 3.0.x ,Who is winner?

Netbean 4.1 在J2SDK 1.5.01下运行的速度,简直如同VB IDE 的表现.

Netbean 4.1增加的JDBC支持和Database server支持,及Schema Browser已经到了完美的地步.
唯一的缺陷就是UI的不一致设置。比如JDBC Driver Add就需要在Runtime tab那里加入.而在菜单中却没有.
NB(牛B)对J2EE和JSP/JSF的支持也已经到了完美的地步,而且copy了JBUILDER的Library Manager和Server Mananger,出乎意料.相当完美的企业工具了.而且让我一直赞叹的properties资源文件管理依然那么漂亮.可惜Jbuilder 9.x,X,2005里对资源尤其是多语言资源文件的管理一直没做.

Eclips 3.0.1下载了看看,依然只是个空壳子,点了几下,同2.x的时候没什么大变化.
颜色丑的要死.要想用来开发J2EE/JSF/JDO及其麻烦,需要寻找一大堆瘸腿的Plugin来磨练自己的意志.
打个哈欠.Uninstall,剔除的机器.

NB最大的缺点在于,缺少一个Plugin或Module的开发如同Eclips一样的.Plugin Development Wizard
这样可大大减少开发Plugin的开发量.我发现NB不能支持Jboss J2EE deployment后,想自己开发个Plugin,
结果看Module/Plugin开发规范,看的两眼眼屎.Gosh.
另外就是NB应该要支持主流Application server的发布.这也涉及到了plugin的开发学习周期.
所以NB应该把Plugin和Module的开发Wizard加入到下一个发布中来.

星期五, 三月 11, 2005

过度设计的糟糕后果.

在Java IO存在过度设计的问题.
比如,在JAXP中调用XSLT Transform的时候,需要用Unicode的格式打开一个.xslt的格式转换文件,假设xslt的名称为:payroll.xslt
对应的JAXP代码:注意红色部分:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
TransformerFactory tmf = TransformerFactory.newInstance();
Transformer tf = tmf.newTransformer(new StreamSource(new InputStreamReader(new FileInputStream("payroll.xslt"),"UTF-8")));

星期二, 三月 08, 2005

如何得到JDBC支持的连接字符串的属性?

得到一个JDBC支持的连接属性的list

import java.sql.*;

public class listAllJDBCParameters
{
public static void main(String[] args)
{
try {
// Load the driver
String driverName = "org.gjt.mm.mysql.Driver"; // MySQL MM JDBC driver
Class.forName(driverName);
if(args.length>0)driverName=args[0];
// Get the Driver instance
String url = "jdbc:mysql://localhost:3306/PCD55";
Driver driver = DriverManager.getDriver(url);

// Get available properties
DriverPropertyInfo[] info = driver.getPropertyInfo(url, null);
System.out.println("属性个数:"+info.length);
for (int i=0; i<info.length; i++) {
// Get name of property
String name = info[i].name;
System.out.print(name+":");
// Is property value required?
boolean isRequired = info[i].required;
System.out.print(isRequired);
// Get current value
String value = info[i].value;
System.out.print(":"+value);
// Get description of property
String desc = info[i].description;
System.out.println(":"+desc);
// Get possible choices for property; if null, value can be any string
String[] choices = info[i].choices;
}
} catch (ClassNotFoundException e)
{
// Could not find the database driver
} catch (SQLException e)
{
}
}
}

星期二, 三月 01, 2005

JSR-144 JDBC RowSet Reader give NPE(java.lang.NullPointerException),解决方法.

JSR-144 JDBC RowSet 在 JDK 1.4.2_06及以后出现错误:
代码:
com.sun.rowset.CachedRowSetImpl cacherset = new com.sun.rowset.CachedRowSetImpl();
出现以下错误

java.lang.NullPointerException
at java.io.Reader.(Reader.java:61)
at java.io.InputStreamReader.(InputStreamReader.java:80)
at java.util.Properties.load(Properties.java:266)
at java.util.PropertyResourceBundle.(PropertyResourceBundle.java:96)
at com.sun.rowset.JdbcRowSetResourceBundle.(Unknown Source)
at com.sun.rowset.JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(Unknown Source)
at com.sun.rowset.CachedRowSetImpl.(Unknown Source)


解决方法:
1.使用J2SE 5.0
2.改变用户国家.这是实现代码,绑定出错信息资源文件的时候,找不到对应语言的ResourceBundler出现的错误.
目录下:com.sun.rowset.RowSetResourceBundle.properties

这是代码没有考虑其他语言资源文件不存在的时候,应该使用en语言的资源文件.

手工改变当前语言可以解决这个问题,如下:

java -Duser.language="en" -Duser.region="US" javaProgram

JSR-144 JDBC RowSet Reader give NPE(java.lang.NullPointerException),解决方法.

JSR-144 JDBC RowSet 在 JDK 1.4.2_06及以后出现错误:
代码:
com.sun.rowset.CachedRowSetImpl cacherset = new com.sun.rowset.CachedRowSetImpl();
出现以下错误

java.lang.NullPointerException
at java.io.Reader.(Reader.java:61)
at java.io.InputStreamReader.(InputStreamReader.java:80)
at java.util.Properties.load(Properties.java:266)
at java.util.PropertyResourceBundle.(PropertyResourceBundle.java:96)
at com.sun.rowset.JdbcRowSetResourceBundle.(Unknown Source)
at com.sun.rowset.JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(Unknown Source)
at com.sun.rowset.CachedRowSetImpl.(Unknown Source)


解决方法:
1.使用J2SE 5.0
2.改变用户国家.这是实现代码,帮定出错信息的时候,找不多对应语言的ResourceBundler出现的错误.
目录下:com.sun.rowset.RowSetResourceBundle.properties
这是代码没有考虑其他语言资源文件不存在的时候,应该使用en语言的资源文件.
手工改变当前语言可以解决这个问题,如下:
java -Duser.language="en" -Duser.region="US" javaProgram