9月21
我们在jsf中你其实并不能通过h:commandButton或 者h:commandLink向一个带参数的方法中传递参数,但是你也可以使用f:param来达到这一目的。比如对于下面的代码:
你不能够这样定义MyAction中的actionMethod:
public String actionMethod(String myParam)
JSF不会把相应的参数传递给方法。但是你可以申明一个无参数的方法并通过request得到f:param中的值:
另外,需要提醒你的是,如果你使用了JBoss Seam,你就完全可以使用带参数的方法了。
你不能够这样定义MyAction中的actionMethod:
public String actionMethod(String myParam)
JSF不会把相应的参数传递给方法。但是你可以申明一个无参数的方法并通过request得到f:param中的值:
另外,需要提醒你的是,如果你使用了JBoss Seam,你就完全可以使用带参数的方法了。
9月21
我们在HttpServletRequest中我们可以通过getLocale()得到用户请求的locale,但是如果你希望手动改变用户的locale设置的话却没有setLocale方法,那么有什么办法来改变request的locale设置吗呢?
答案是可以写一个HttpServletRequestWrapper,通过其中的getLocale()方法和getLocales()方法来改变用户请求的locale设置。首先我们来写一个这样的类:

答案是可以写一个HttpServletRequestWrapper,通过其中的getLocale()方法和getLocales()方法来改变用户请求的locale设置。首先我们来写一个这样的类:
9月21
内存溢出的原因
有三种可能导致OutOfMemoryError。首先是,此JVM有真实的内存泄漏,导致此JVM堆在内部实现时产生了一个Bug。这极不可靠。所有JVM都经过充分的测试,并且,如果有人发现这种bug,它将绝对是最高的优先级。因此你可以非常宽心地排除这种可能性。
第二种可能的OutOfMemoryError原因只不过是,你没有为你的应用程序运行时给予足够多的可用内存。这种情况,有两种可能的方案,或者增加 JVM堆可用大小,或者减少你的应用程序所需的内存总量。提高JVM可用堆大小可以简单的使用JVM的 -Xmx 参数。假如你将此参数设置尽可能的大(可用内存极限不要超过系统物理内存,否则你的应用程序将分页并暂停),仍然有以上所提到的内存问题,那么,你需要减少你的应用程序所可能用到内存总量。减少应用程序内存可能是简单的,你可能允许一些集合过大,例如使用了许多大的缓冲区。或者它过于复杂,要求你重新实现一些类,乃至重新设计应用程序。
有些JVM还有一个“Perm”参数用来处理JVM结构与类对象。如果你正在使用一个数量非常巨大的类集,它有可能运行在"Perm"空间之外,然后你需要增加此空间的大小,例如,sun的JVM使用 -XX:PermSize 与 -XX:MaxPermSize 选项。
第三种导致OutOfMemoryError最为常见,无心的对象引用保持。你没有明确无误的释放对象,以致于你的堆增长再增长,直到你没有额外的空间。
有三种可能导致OutOfMemoryError。首先是,此JVM有真实的内存泄漏,导致此JVM堆在内部实现时产生了一个Bug。这极不可靠。所有JVM都经过充分的测试,并且,如果有人发现这种bug,它将绝对是最高的优先级。因此你可以非常宽心地排除这种可能性。
第二种可能的OutOfMemoryError原因只不过是,你没有为你的应用程序运行时给予足够多的可用内存。这种情况,有两种可能的方案,或者增加 JVM堆可用大小,或者减少你的应用程序所需的内存总量。提高JVM可用堆大小可以简单的使用JVM的 -Xmx 参数。假如你将此参数设置尽可能的大(可用内存极限不要超过系统物理内存,否则你的应用程序将分页并暂停),仍然有以上所提到的内存问题,那么,你需要减少你的应用程序所可能用到内存总量。减少应用程序内存可能是简单的,你可能允许一些集合过大,例如使用了许多大的缓冲区。或者它过于复杂,要求你重新实现一些类,乃至重新设计应用程序。
有些JVM还有一个“Perm”参数用来处理JVM结构与类对象。如果你正在使用一个数量非常巨大的类集,它有可能运行在"Perm"空间之外,然后你需要增加此空间的大小,例如,sun的JVM使用 -XX:PermSize 与 -XX:MaxPermSize 选项。
第三种导致OutOfMemoryError最为常见,无心的对象引用保持。你没有明确无误的释放对象,以致于你的堆增长再增长,直到你没有额外的空间。
9月21
9月21
我们在很多时候你可能需要在程序中解析HTML文件或者字符串并从中抽取出文本内容来,要实现这个功能有很多工具可用。今天介绍的这个示例是使用swing中的一个类HTMLEditorKit.ParserCallback来实现这个功能。下面是一段示例代码:
其中:静态方法htmlToPlainText可以用来将html转化为纯文本,main函数示例了如何将一个网页的内容转化成为纯文本.
其中:静态方法htmlToPlainText可以用来将html转化为纯文本,main函数示例了如何将一个网页的内容转化成为纯文本.
9月21
关于单例模式的一些要点:
1.Singleton模式中的实例构造器可以设置为protected以允许子类派生。
2.Singleton模式一般不要支持ICloneable接口,因为这可能会导致多个对象实例,与Singleton模式的初衷违背。
3.Singleton模式一般不要支持序列化,因为这也有可能导致多个对象实例,同样跟Singleton模式的初衷违背。
4.Singleton模式只考虑到了对象创建的管理,并没有考虑对象销毁的管理。就支持垃圾回收的平台和对象的开销来讲,我们一般没必要对其销毁进行特殊的管理。
多线程的Singleton模式
代码说明:
1.volatile C#关键字作用,简单来说,编译器编译我们的代码时候,会对代码作一些优化,进而对代码进行了微调,使用volatile关键字就可以避免这个微调。继而严格意义上保证不会产生多线程。更详细的关于volatile 的说明,请看参考资料。
2.双检查加锁模式。在lock之外和之内,我们做了instance是否为空的检查。这叫双检查。因为同步控制的时间太长了。双检查能够最高效地实现多线程安全的访问。
1.Singleton模式中的实例构造器可以设置为protected以允许子类派生。
2.Singleton模式一般不要支持ICloneable接口,因为这可能会导致多个对象实例,与Singleton模式的初衷违背。
3.Singleton模式一般不要支持序列化,因为这也有可能导致多个对象实例,同样跟Singleton模式的初衷违背。
4.Singleton模式只考虑到了对象创建的管理,并没有考虑对象销毁的管理。就支持垃圾回收的平台和对象的开销来讲,我们一般没必要对其销毁进行特殊的管理。
多线程的Singleton模式
代码说明:
1.volatile C#关键字作用,简单来说,编译器编译我们的代码时候,会对代码作一些优化,进而对代码进行了微调,使用volatile关键字就可以避免这个微调。继而严格意义上保证不会产生多线程。更详细的关于volatile 的说明,请看参考资料。
2.双检查加锁模式。在lock之外和之内,我们做了instance是否为空的检查。这叫双检查。因为同步控制的时间太长了。双检查能够最高效地实现多线程安全的访问。
9月21
我们在IE中使用ajax时,你可能会发现有时候IE会直接返回缓存的页面,而不是向服务器发送一个新的请求,理论上通过设置这样的head:
<META HTTP-EQUIV="Pragma" CONTENT="no-cache" />
<META HTTP-EQUIV="Expires" CONTENT="-1" />
IE就应该不用缓存了,但是实际情况并不是这样,那么怎么办呢?
目前有一个办法很简单可以解决:
使用POST请求来代替GET,这样IE就会永远向服务器发送请求了
。
<META HTTP-EQUIV="Pragma" CONTENT="no-cache" />
<META HTTP-EQUIV="Expires" CONTENT="-1" />
IE就应该不用缓存了,但是实际情况并不是这样,那么怎么办呢?

目前有一个办法很简单可以解决:
使用POST请求来代替GET,这样IE就会永远向服务器发送请求了
。
9月21
使用Spring时,你有时候可能想把某个Bean的属性(而非该bean本身)注入到另外一个bean的某属性中去,这时候你可以参考如下代码:
在上面的例子中,sessionFactory的mappingResources属性是一个字符串数组类型的属性,熟悉Spring和hibernate的朋友知道这是所有映射文件的列表。而我们定义的hibernateMappingManager中,有一个名为mappingFiles的属性是所有这些文件的列表。通过使用PropertyPathFactoryBean我们成功地将mappingFiles注入到了sessionFactory的mappingResources属性
在上面的例子中,sessionFactory的mappingResources属性是一个字符串数组类型的属性,熟悉Spring和hibernate的朋友知道这是所有映射文件的列表。而我们定义的hibernateMappingManager中,有一个名为mappingFiles的属性是所有这些文件的列表。通过使用PropertyPathFactoryBean我们成功地将mappingFiles注入到了sessionFactory的mappingResources属性
9月21
CentOS下Apache2以及PHP,Ruby,Python的安装
现在我们开始安装apache和php:
yum install php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel
编辑/etc/httpd/conf/httpd.conf:
vi /etc/httpd/conf/httpd.conf
然后改变DirectoryIndex:
[...]DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3 index.pl[...]将apache注册为启动的服务:chkconfig --levels 235 httpd on
启动apache:
/etc/init.d/httpd start
安装mod_ruby
CentOS 5.3上没有mod_ruby,所以如果你要使用ruby必须自己编译安装mod_ruby。首先需要安装一些软件包:yum install httpd-devel ruby ruby-devel
现在我们开始安装apache和php:
yum install php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel
编辑/etc/httpd/conf/httpd.conf:
vi /etc/httpd/conf/httpd.conf
然后改变DirectoryIndex:
[...]DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3 index.pl[...]将apache注册为启动的服务:chkconfig --levels 235 httpd on
启动apache:
/etc/init.d/httpd start
安装mod_ruby
CentOS 5.3上没有mod_ruby,所以如果你要使用ruby必须自己编译安装mod_ruby。首先需要安装一些软件包:yum install httpd-devel ruby ruby-devel
9月21
Postfix邮件服务器的安装
现在安装Postfix以及Dovecot(Dovecot可以用作pop/imap服务器)。
yum install cyrus-sasl cyrus-sasl-devel cyrus-sasl-gssapi cyrus-sasl-md5 cyrus-sasl-plain postfix dovecot
现在配置SMTP-AUTH以及TLS(如果你的smtp服务器不需要认证可以跳过这一步),使用root用户:
postconf -e 'smtpd_sasl_local_domain ='
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_sasl_security_options = noanonymous'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_authenticated_header = yes'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
postconf -e 'inet_interfaces = all'
postconf -e 'mynetworks = 127.0.0.0/8'
之后需要编辑/usr/lib/sasl2/smtpd.conf,64位CentOS上是/usr/lib64/sasl2/smtpd.conf:
vi /usr/lib/sasl2/smtpd.conf

现在安装Postfix以及Dovecot(Dovecot可以用作pop/imap服务器)。
yum install cyrus-sasl cyrus-sasl-devel cyrus-sasl-gssapi cyrus-sasl-md5 cyrus-sasl-plain postfix dovecot
现在配置SMTP-AUTH以及TLS(如果你的smtp服务器不需要认证可以跳过这一步),使用root用户:
postconf -e 'smtpd_sasl_local_domain ='
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_sasl_security_options = noanonymous'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_authenticated_header = yes'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
postconf -e 'inet_interfaces = all'
postconf -e 'mynetworks = 127.0.0.0/8'
之后需要编辑/usr/lib/sasl2/smtpd.conf,64位CentOS上是/usr/lib64/sasl2/smtpd.conf:
vi /usr/lib/sasl2/smtpd.conf







