搜索类别为 ‘ J2EE ’ 的文章列表

正则表达式基础

一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。如:

JScript VBScript 匹配
/^\[ \t]*$/ “^\[ \t]*$” 匹配一个空白行。
/\d{2}-\d{5}/ “\d{2}-\d{5}” 验证一个ID 号码是否由一个2位数字,一个连字符以及一个5位数字组成。
/<(.*)>.*<\/\1>/ “<(.*)>.*<\/\1>” 匹配一个 HTML 标记。

点击查看更多 »

官方网站:http://xstream.codehaus.org/

将xstream和xpp3的jar包加入lib中
XStream x = new XStream() ;
List userList = new ArrayList() ;
User user = new User() ;
user.setUserName(“peltason”) ;
user.setPassword(“123″) ;
User user2 = new User() ;
user2.setUserName(“jack”) ;
user2.setPassword(“321″) ;
x.alias(“user”, User.class) ;
userList.add(user) ;
userList.add(user2) ;
System.out.println( x.toXML(userList) ) ;

生成的XML文件内容:
xml 代码
peltason

123

jack

321

今天做一个jsp的验证码程序,把验证码的绘制写在一个jsp里,发现在调用时总是出现getOutputStream() has already been called for this response异常,搞得一头雾水,看似自己重复调用了,因为在程序最后是这样输出的
ImageIO.write(image, “JPEG”, response.getOutputStream());
但是仔细检查了程序,并没有问题,不过最后还是解决了,问题出在%>与<%之间的空行,把换行都去掉就OK了。
因为Application Server在处理编译jsp时对于%>和<%之间的内容一般是原样输出,而且默认是PrintWriter,而你却要进行流输出:ServletOutputStream,这样做相当于试图在Servlet中使用两种输出机制,就会发生getOutputStream() has already been called for this response的错误
详细请见《More Java Pitfill》一书的第二部分 Web层Item 33:试图在Servlet中使用两种输出机制 270
而且如果有换行,对于文本文件没有什么问题,但是对于其它格式,比如AutoCAD、Word、Excel等文件
下载下来的文件中就会多出一些换行符0×0d和0×0a,这样可能导致某些格式的文件无法打开,有些也可以正常打开

Guice 1.0 用户指南

guice-1-0-%e7%94%a8%e6%88%b7%e6%8c%87%e5%8d%97

Guice 1.0 用户指南

(20070326 王咏刚 译自http://docs.google.com/Doc?id=dd2fhx4z_5df5hw8

(非常酷的Google果汁——Guice 发布一段时间了,今天非常快速地把它的用户指南翻译成了中文,分享给大家。因为只花了3个小时翻译,也没有更多时间校对,肯定有不少错误,希望有心人指正。)

Guice (读作”juice”)是超轻量级的,下一代的,为Java 5及后续版本设计的依赖注入容器。

点击查看更多 »

JAVA Calendar详解

java-calendar%e8%af%a6%e8%a7%a3

(在文章的最后,将会介绍Date类,如果有兴趣,可以直接翻到最后去阅读)

究竟什么是一个 Calendar 呢?中文的翻译就是日历,那我们立刻可以想到我们生活中有阳(公)历、阴(农)历之分。它们的区别在哪呢?
比如有:
月份的定义 – 阳`(公)历 一年12 个月,每个月的天数各不同;阴(农)历,每个月固定28天
每周的第一天 – 阳(公)历星期日是第一天;阴(农)历,星期一是第一天

点击查看更多 »

FreeMarker设计指南(完整整理)

freemarker%e8%ae%be%e8%ae%a1%e6%8c%87%e5%8d%97%e5%ae%8c%e6%95%b4%e6%95%b4%e7%90%86

快速入门

(1)模板 + 数据模型 = 输出

FreeMarker基于设计者和程序员是具有不同专业技能的不同个体的观念他们是分工劳动的:
设计者专注于表示——创建HTML文件、图片、Web页面的其它可视化方面;
程序员创建系统,生成设计页面要显示的数据。
经常会遇到的问题是:在Web页面(或其它类型的文档)中显示的信息在设计页面时是无效的,是基于动态数据的。在这里,你可以在HTML(或其它要输出的文本)中加入一些特定指令,FreeMarker会在输出页面给最终用户时,用适当的数据替代这些代码。

点击查看更多 »

让WebWork遍历Map

%e8%ae%a9webwork%e9%81%8d%e5%8e%86map

用Webwork的标签遍历,是一件很爽的事情。例如遍历一个List。你可以做得比之前任何一套标签更优雅和简单。当遇到Map的时候,可能你会束手无策。因为我也刚好有这样的经历。
如果知道Map里面的Key,使用Key去得到Value那不难做,只需要在遍历的标签里面写上<ww:property value=”yourMap['key']“/>即可。但是要把Map里面所有的无素都遍历出来,我查了好多网页都没有答案。最后查了下Webwork in action,发现只有一句话提到Map的遍历,但这句话足以让我找到答案了。原文是:
When iterating over a Map, it
iterates over the Set returned by Map.entrySet(), which is a set of Map.Entry
objects, which in turn has the methods getKey() and getValue() to retrieve the
associated key/value pairs.
译文如下:
当遍历一个Map的时候,它调用Map.entrySet()方法返回一个Set,这个Set是一个Map.Entry对象的集合。这个返回的对象有一个getKey(),getValue()的方法供取得相关的键及值。
发现了有Get方法了。这意味着可以在页面上使用EL直接把Map的键及值取出来了。爽死了。那么,在遍历一个Map的时候,键及值的获得可以这样简单:
<ww:iterator value=”yourMap”>
<ww:property value=”key”/><ww:property value=”value”/>
</ww:iterator>

JDBC性能技巧

jdbc%e6%80%a7%e8%83%bd%e6%8a%80%e5%b7%a7

介绍
开发一个注重性能的JDBC应用程序不是一件容易的事. 当你的代码运行很慢的时候JDBC驱动程序并不会抛出异常告诉你.
本系列的性能提示将为改善JDBC应用程序的性能介绍一些基本的指导原则,这其中的原则已经被许多现有的JDBC应用程序编译运行并验证过。 这些指导原则包括:
* 正确的使用数据库MetaData方法
* 只获取需要的数据
* 选用最佳性能的功能
* 管理连接和更新
以下这些一般性原则可以帮助你解决一些公共的JDBC系统的性能问题.
选用JDBC对象和方法
本节的指导原则将帮助你在选用JDBC的对象和方法时哪些会有最好的性能.
在存储过程中使用参数标记作为参数
当 调用存储过程时, 应总是使用参数标记(?)来代替字面上的参数. JDBC驱动能调用数据库的存储过程, 也能被其它的SQL查询执行, 或者直接通过远程进程调用(RPC)的方式执行. 当你将存储过程作为一个SQL查询执行时, 数据库要解析这个查询语句, 校验参数并将参数转换为正确的数据类型.
要记住, SQL语句总是以字符串的形式送到数据库, 例如, “{call getCustName (12345)}”. 在这里, 即使程序中将参数作为整数赋给了getSustName, 而实现上参数还是以字符串的形式传给了服务器. 数据库会解析这个SQL查询, 并且根据metadata来决定存储过程的参数类型, 然后分解出参数”12345″, 然后在最终将存储过程作为一个SQL查询执行之前将字串’12345’转换为整型数.
按RPC方式调用时, 之前那种SQL字符串的方式要避免使用. 取而代之, JDBC驱动会构造一个网络packet, 其中包含了本地数据类型的参数,然后执行远程调用.

点击查看更多 »

本文使用Hibernate3.2 cr2

1.直接返回List结果集,不包括列名信息

List ls = session.createSQLQuery(querySql).list();

如果当前查询SQL里包括多列,则List里每行存放的是Object数组,如果直接查询的是一列,则每行存放的则直接就是查询的哪一列的数据。
也可以在返回的结果数据里指定每一列的类型

List ls2 = session.createSQLQuery(querySql).addScalar(“column_name”, Hibernate.DATE).list();
这样返回的数据的时候Hiberante就会对返回的数据转换成你指定的数据类型.这个是在3.1版本就支持的操作。

点击查看更多 »