2007-03-26

Apache Commons FileUpload来实现文件上传的时候,往往会遇到一些中文乱码的问题,有可能是获取的文件路径或者文件名称为乱码,也有可能获取的表单字段为乱码,以UTF-8编码为例,解决的办法如下:

  • 调用FileUpload.settingHeaderEncoding(”UTF-8″),这项设置可以解决路径或者文件名为乱码的问题。
  • 在取字段值的时候,用FileItem.getString(”UTF-8″),这项设置可以解决获取的表单字段为乱码的问题。
Tags: .
2007-03-18

position:fixed做为CSS2规范中的一项,可以让元素相对于屏幕来定位,而不是相对于网页,比如有一些网页元素需要始终停留在屏幕上 的某个位置,而不是随着页面滚动而位置变动,这个时候这项特性是非常有用的,但这项特性却不被ie支持,以下是一些实现这种效果的变相方式,基本上在所有 主流浏览器中都适合。最简单是把修饰元素的position改为absolute,然后在css中加上以下style:

html, body {
height: 100%; overflow: auto;
}

更多参考文章:

Tags: .
2007-03-17

网页设计中圆角的使用越来越多,往往多是以图片背景的方式来实现,用这种方式实现圆角的缺点是图片加载增加了网络传输量,同时如果圆角的大小需要改 变,需按照尺寸重新制作圆角图片。这里介绍一种用javascript来灵活实现圆角的方式,开发人员要实现圆角效果,不用每次都去求助美工了。

首先从curvycorners.net下载一个rounded_corners.js的js文件,遵循LPGL协议,最新的版本是1.2.9,支持对HTML中DIV元素实现圆角(rounded corners)修饰。主要特性:

  1. 免费
  2. 易于使用的javascript对象
  3. 不需要任何图片
  4. 反锯齿支持
  5. 可以在背景图片上实现反锯齿
  6. 可以修饰带有背景图片的DIV
  7. 可变的高度和宽度设置
  8. 支持solid border,也就是可以实现带颜色的圆角border
  9. 用户可以自定圆角半径
  10. 支持所有主流浏览器

用法:

<script type=”text/JavaScript” src=”rounded_corners.js”></script>

<DIV id=”myDiv”></DIV>

<script type=”text/JavaScript”>

window.onload = function()
{
settings = {
tl: { radius: 20 },
tr: { radius: 20 },
bl: { radius: 20 },
br: { radius: 20 },
antiAlias: true,
autoPad: false
}

var divObj = document.getElementById(”myDiv”);

var cornersObj = new curvyCorners(settings, divObj);
cornersObj.applyCornersToAll();
}

</script>

更 加详尽的用法参考它自带的demo,大概的工作原理是curvyCorners一个像素一个像素的画出圆角,每一个像素用一个div实现,同时通过给每一 个像素加上一定的不透明性来实现反锯齿。可以同时给多个div实现圆角,通过newCornersObj = new curvyCorners(settingsObj, divObj1[, divObj2[, divObj3[, . . . [, divObjN]]]]);

Tags: .
2007-03-15

Spring开发过程中常用的几种模式或者说最佳实践。

  1. Exception Translator (异常转换):常常会遇到API中有一些checked Exceptions需要处理,如果catch这些异常,然后写error log或者return error code,通常都不是很有效的方法而且会影响到事务的处理,正确的方法是把这些异常捕获然后重新抛出一个runtime exception。
  2. Template(模 板):在Spring提供的一些API中,如HibernateTemplate、JdbcTemplate,往往对一些资源的处理都被封装成为一个 template,一个Template就是对资源处理的API封装,这样你就不必关注资源处理的一些琐碎问题,如写jdbc代码的时候经常需要 finally里写一堆close逻辑,这些逻辑你都可以封装在Template中,想自己写一个Template可以先去看看 HibernateTemplate、JdbcTemplate的源代码实现。
  3. Exporter (导出者):往往遇到一些情况,已经有了一个service bean,不想或者不能改变它的接口、参数和返回值,比如原先传入的是一个List对象,返回Map对象,现在需要传入一段XML String同时返回XML String,这个时候可以用Exporter这种模式,如远程调用的时候,我们需要把一个bean导出为EJB接口或者Hessian服务,这个时候可 以用Spring中提供的HessianServiceExporter。遇到类似情况,可以自己写一个Exporter。
  4. Proxy (代理):同Exporter模式一样,主要用于远程调用情形下,通过Proxy,用户只需关注bean的API而不必关注如果从远程接口中如何取得这个bean,因为这些都可以通过spring配置来实现。
Tags: .
2007-03-02

REST(Representational State Transfer),有人翻译成中文为“具象状态传输”,最近在开发者社区中被广泛讨论,可以把它理解为同MVC和Ajax一样,是一种架构模式,来源于 最初对互联网web架构的定义,在URI和HTTP这类标准之上的一套web通用架构,URI表示资源,HTTP协议提供GET/POST/PUT /DELETE四种基本操作动作,任何动作都可以由这四种最原子的动作组成。当然REST只是一种架构和思想,所以也不限于URI和HTTP协议,用户可 以自己定义新的协议实现REST架构,如用直接在TCP/IP协议上来实现REST架构。

因为现有的浏览器软件提供商都没有实现HTTP协 议中的PUT和DELETE方法,所以严格来讲,现在的web应用都不是REST架构,包括html中的form method也只能是GET和POST方法,但是很多web应用服务器都已支持PUT和DELETE方法,如java servlet api可以看到put和delete接口。一些http client如apache commons httpclient也支持这两种方法。在现阶段要实现REST架构的应用程序,我们只能借助ajax(XMLHttpRequest可以支持PUT和 DELETE方法)或者在某些情况下自己写客户端。

REST架构的特点在于把一些逻辑放在了客户端,客户端与服务器端的交互就是对服务器端资源的操作,或者可以理解为远程资源调用,Ruby on Rails在REST架构上已经有所尝试,估计在今后几年内,REST架构会有一个大的发展。

资源:

Tags: .
2007-03-01

越来越多的人采用Subversion代替CVS来构建版本控制系统,Subversion默认提供两种服务模式,一种是自己实现的 svnserve,可以通过svn协议访问,另一种也是采用最为广泛的一种方式是借助apache http server来实现,可以通过http webdav方式访问,这里主要介绍第二种方式的安装和使用,安装环境为Windows XP。

  1. 下载apache HTTP serversubversion二进制版本
  2. 安装apache服务器,解压缩subversion安装文件到如D:\svn
  3. 修改Apache下的httpd.conf文件,找到
    #LoadModule dav_module modules/mod_dav.so
    #LoadModule dav_fs_module modules/mod_dav_fs.so
    去掉注释,同时在文件末尾加上以下配置
    LoadModule dav_svn_module D:/svn/bin/mod_dav_svn.so
    <Location /svn>
    DAV svn
    SVNParentPath D:/svn/svnparent
    AuthType Basic
    AuthName “Subversion repository”
    AuthUserFile D:/svn/svn-auth-file
    Require valid-user
    </Location>
  4. 用apche下的htpasswd命令创建用户验证文件,添加用户
    C:\apache\bin>htpasswd -cm D:\svn\svn-auth-file collin
    New password: *****
    Re-type new password: *****
    Adding password for user collin
    C:\apache\bin>htpasswd -m D:\svn\svn-auth-file collin2
    New password: *****
    Re-type new password: *****
    Adding password for user collin
  5. 创建资源库
    D:\svn\bin>svnadmin create D:\svn\svnparent\repository
  6. 重启apache服务器

安装完成,更详细的说明和配置参考svnbook

其他资源:

  • TortoiseSVN 一个svn的客户端
  • Subclipse subversion的eclipse插件,功能类似eclipse自带的CVS插件
Tags: ,.