posts - 32, comments - 153, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2006年12月11日

  1. 在创建Human Task的UI项目时,请注意保证每个Project的package名都不相同,否则在BPM Workspace中会出现DataControl的NullPointerException。最简单的方法就是不要设置Application的package prefix,然后让每个项目都使用auto-generate的package名。
  2. 在Human Task中可以动态指定审批人,具体做法是在Assign标签页中,选择Single类型(当然也完全可以是别的类型),然后选择User,By Expression,后面的表达式是一个字符串,比如'weblogic,wfaulk,jstein',注意要使用单引号,也可以从payload中读取。不过这种方式有时会出错,出错原因不明,不过在Organization中添加一个用户,deploy,然后再把这个用户删除就解决了,不得不说非常汗。
  3. 如果需要对某个Human Task定时做一些操作,可以使用Catch Timer Event,注意这里指向End1,说明Timer触发以后直接走Update Database & Send Email这条分支,然后结束,并不是主流程结束。


posted @ 2011-04-07 10:35 Zou Ang 阅读(1246) | 评论 (0)编辑 收藏

     摘要: JAVA相关基础知识 1、面向对象的特征有哪些方面   1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承: 继 承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法...  阅读全文

posted @ 2007-12-25 07:14 Zou Ang 阅读(493) | 评论 (0)编辑 收藏

     摘要: 使用Hessian开发C/S模式的小系统
之所以叫小系统,主要是因为Hessian不支持Hibernate的延迟加载,所以需要在DAO层使用Hibernate的同学请注意了。

Hessian其实是一种RMI技术,已经被集成在Spring Framework中,这样就很方便了。

首先看客户端

第一步:
先定义Client与Server交互的接口。  阅读全文

posted @ 2007-07-28 10:48 Zou Ang 阅读(3820) | 评论 (4)编辑 收藏

Another Quiz : " Which Programming Language Are You?"

http://www.bbspot.com/News/2006/08/language_quiz.php

You are Java.  You are very strong and sturdy, but this makes you a bit sluggish.

posted @ 2007-05-07 12:09 Zou Ang 阅读(494) | 评论 (0)编辑 收藏

测到最后我才发现原来我是一个内向的人啊~~真是,搞得我一直都不知道呢
大家有空也去玩玩
http://www.psytopic.com/mag/post/820.html

Psytopic分析:您的性格类型是“ISTJ”(内向+实感+思维+判断)

沉静,认真;贯彻始终、得人信赖而取得成功。讲求实际,注重事实和有责任感。能够合情合理地去决定应做的事情,而且坚定不移地把它完成,不会因外界事物而分散精神。以做事有次序、有条理为乐---不论在工作上, 家庭上或者生活上。重视传统和忠诚。

ISTJ型的人是严肃的、有责任心的和通情达理的社会坚定分子。他们值得信赖,他们重视承诺,对他们来说,言语就是庄严的宣誓。 ISTJ型的人工作缜密,讲求实际,很有头脑也很现实。他们具有很强的集中力、条理性和 准确性。无论他们做什么,都相当有条理和可靠。他们具有坚定不移、深思熟虑的思想,一旦他们着手自己相信是最好的行动方法时,就很难转变或变得沮丧。ISTJ型的人特别安静和勤奋,对于细节有很强的记忆和判断。 他们能够引证准确的事实支持自己的观点,把过去的经历运用到现在的决策中。他们重视和利用符合逻辑、客观的分析,以坚持不懈的态度准时地完成工作,并且总是安排有序,很有条理。他们重视必要的理论体系和传统 惯例,对于那些不是如此做事的人则很不耐烦。ISTJ型的人总是很传统、谨小甚微。他们聆听和喜欢确实、清晰地陈述事物。ISTJ型的人天生不喜欢显露,即使危机之时,也显得很平静。他们总是显得责无旁贷、坚定不变 、但是在他们冷静的外表之下,也许有强烈却很少表露的反应。

您适合的领域有:工商业领域、政府机构 金融银行业、政府机构、技术领域、医务领域

您适合的职业有:

· 审计师
· 会计
· 财务经理
· 办公室行政管理
· 后勤和供应管理
· 中层经理
· 公务(法律、税务)执行人员
· 银行信贷员
· 预算分析师
· 保险精算师
· 税务经纪人
· 税务检查员
· 机械、电气工程师
· 计算机程序员
· 数据库管理员
· 地质、气象学家
· 法律研究者
· 律师
· 外科医生
· 药剂师
· 实验室技术人员
· 牙科医生
· 医学研究员
· 信息总监
· 电脑编程员
· 证券经纪人
· 会计
· 文字处理专业人士

posted @ 2007-05-06 08:09 Zou Ang 阅读(1499) | 评论 (2)编辑 收藏

基于求函数f(x,y,z)=xyz*sin(xyz)最大值问题的演示程序:


截图:








 

压缩包:
genetic_algorithm.part1.rar
genetic_algorithm.part2.rar
genetic_algorithm.part3.rar
genetic_algorithm.part4.rar

运行方法:
解压后在命令行输入:java -jar genetic_algorithm.jar

posted @ 2007-04-29 12:11 Zou Ang 阅读(6187) | 评论 (75)编辑 收藏

     摘要: 最近学习遗传算法,写了这么一个小程序来计算函数 f(x,y,z) = xyz*sin(xyz)的最大值,这段程序经过小小改变就可以适应其他的函数最大值求解问题首先介绍一下遗传算法,遗传算法就是模拟自然界中物竞天择,适者生存的法则,通过对解空间进行进化从而求得最优方案的方法,遗传算法的好处在于,即使算法中的某些参数不起作用了,整个算法还是可以正常地工作,也就是说,整体种群的走向是越来越好的遗传算法的...  阅读全文

posted @ 2007-04-26 21:41 Zou Ang 阅读(6997) | 评论 (14)编辑 收藏

     摘要: 用Java从控制台输入密码

本来以为是很简单的问题,查了一下发现Java居然没提供这样一个方法。目前实现的方式有2个,一个是利用JNI来调用C/C++方法,另一个是使用多线程。
本文使用JNI调用C/C++的方法实现  阅读全文

posted @ 2007-02-24 22:06 Zou Ang 阅读(3638) | 评论 (6)编辑 收藏

     摘要: JDK6.0发布有段时间了,新的JDK也有不少新的特性,我去网上搜集了一下,列在下面和大家一起学习.1.Desktop和SystemTray. 在JDK6中 ,AWT新增加了两个类:Desktop和SystemTray,前者可以用来打开系统默认浏览器浏览指定的URL,打开系统默认邮件客户端给指定的邮箱发邮件,用默认应用程序打开或编辑文件(比如,用记事本打开以txt为后缀名的文件),用系统默认的打印...  阅读全文

posted @ 2007-02-09 12:00 Zou Ang 阅读(2400) | 评论 (3)编辑 收藏

这几天突然遇到了一个问题:Tomcat跑不起来了!提示错误信息:
Error Listener Start
org.springframework.web.context.ContextLoaderListener
Error Listener Start
....
就这么2行,让人一头雾水。昨天检查了一个下午也没发现问题。今天突然在查看错误日志时发现:
Context initialization failed

org.springframework.beans.factory.BeanDefinitionStoreException: Line 14 in XML document from ServletContext resource [/WEB-INF/springctx-datareport.xml] is invalid; nested exception is org.xml.sax.SAXParseException: Element type "bean" must be followed by either attribute specifications, ">" or "/>".

仔细查看了一下配置文件,原来是同组的组员在写配置文件的时候在class="...."后面多了一个引号!
这个Listener Start的问题太隐蔽,如果没有做错误日志估计一直很难发现了
不过这次有了教训,以后也有方向了

posted @ 2007-02-03 09:33 Zou Ang 阅读(3662) | 评论 (1)编辑 收藏

     摘要: 根据Ajax in Action书进行调整,修改了原书上的错误,调试通过。
可重用的Ajax输入提示类,功能类似Google的输入提示  阅读全文

posted @ 2007-02-01 22:39 Zou Ang 阅读(3908) | 评论 (7)编辑 收藏

     摘要: JSP与Tomcat乱码解决方法  阅读全文

posted @ 2007-01-23 21:12 Zou Ang 阅读(4348) | 评论 (6)编辑 收藏

经常开各种各样的会议,要达成共识很不容易,尤其技术会议更是容易吵架。旧年最后一天,写点关于“开会”的想法。

首先,要注意听别人发言。尽量不要打断别人的发言,抓住对方的主要思想和依据。不要带着偏见听,有时候可能觉得对方不如你,但是不代表他现在说的就不对。把口头禅从“不,……”改成“对,……”,即使有时候你不同意他的观点,但是先肯定一下,可以缓和很多气氛。

然后,尽量先把自己的理论基础表达清楚,有时候争了半天,发现两个人想法是一样的,不过是换了种表达方式……

最后,不要长篇大论,给别人一个插口的机会。有些人讲话,喜欢停顿一下,然后在别人马上要开口讲话的时候接着讲。我很反感这种人,耍猴呢啊?给别人一个提出意见和疑问的机会。尽量把自己放到讨论的主导地位上来,就是说,要慢慢地让大家围绕着你的观点提问题,然后你再来进行解答。但是千万不要不让别人说话,有时候给别人机会说话对自己理清思路也非常有好处。

最近看一本叫《人件集-人性化的软件开发》的书,里面第一篇文章就讲如何作出决策和达成一致意见。一致意见应该做到综合各方的优点,而不应该是各方意见的“折衷”。书里有一个稍显极端的例子:假如你的团队正在开发一个图形用户界面的项目,一部分人强烈建议直接将控制按钮放在屏幕底部,而另一部分人建议在屏幕左侧放置一个控制窗口。两种意见中,一个是水平放置,一个是垂直放置,形成了两个极端。那么一个最具代表意义的折衷方案就是,将控制按钮沿着对角线放置在屏幕的中央。在很多时候,由折衷所产生的解决方案比任何一个原始方案都差劲,但是“技术性一致意见”就恰恰相反,它所产生的解决方案要比任何一个原有的方案都好。书上给的“一致意见”解决方法是给控制按钮窗体加上选项,让用户来决定是水平放置还是垂直放置。

在团队中的表现是很重要的,通过一个团队来改变团队中的个体,要比单独改变一个个体容易得多。所以在团队中发挥影响,比单独对每一个人发挥影响要有用得多。

有人说软件工程更像是“社会学”,而不是“工程学”,我也越来越有这种感觉了。

posted @ 2006-12-31 15:22 Zou Ang 阅读(1438) | 评论 (3)编辑 收藏

圣诞到了,祝所有的朋友圣诞快乐!!

posted @ 2006-12-24 14:05 Zou Ang 阅读(288) | 评论 (0)编辑 收藏

原贴地址:
http://news.csdn.net/n/20061221/99748.html

从根本上说,面向服务的架构能够使企业内部动态数据服务的创建变得更加方便,同时,还能够使企业开发人员创建影响这些服务的复合应用程序。Web2.0提供了一个丰富的Web体验,用户能够以高效的、充满希望的、有益的方式参与合作。

  如果我们把这两个现象结合起来,那么,通过企业社团成员之间的互相交流,以及成员与不断变化的企业数据之间的交互,我们就能够实现这一关键的提高效率的新方法。

  协作型企业相互融合,下一代的Web应用程序也已露端倪,但是,开发团体的推测是,为了实现明显的利益,企业所采用的各种技术之间存在着根本性 的差异。标准必须朝哪个方向发展才能够满足SOA与Web2.0概念的结合,为了更好的理解这个问题,我们将致力于检验Java表示技术的状态。

  Ajax化JavaServer Faces

  标准奠定了SOA的基本结构,但是,在Web2.0的世界中却不存在着标准。为了支持Web2.0的功能,市场上出现了太多的方法,其中大多数 在JavaScript的实现(影响Ajax的技术)上却非常繁杂。在Java EE的规范中,JavaServer Faces提供了表示层,但是,相比起Ajax技术和Web2.0概念的流行,它目前的修订版出现的更早。

  事实证明,在组件层,JSF中的可扩展组件架构非常适合与Ajax技术协同使用,但是,组件层Ajax技术存在的问题是,它们是存在于狭小的规 避JSF生命周期的交互空间内。解决这一问题所需要的是,一种更加全面的方式,以实现在JSF生命周期内的Ajax交互。具体来说,有以下两点需要着重阐 述。

  1.改进的用户交互模型: 在JSF中,目前的用户交互模型是基于表格的,它过于粗略而无法传输丰富的Web2.0特性。组件层的Ajax交互粒度,以及JSF目前依赖的基于表格的子任务模型,这两者之间存在着显著的差异。交互类型应当包含以下几种形式:

  •   纯粹的本地客户端JavaScript交互,没有服务器通信、不需要执行JSF生命周期。这种类型的例子可以是,在日期选择组件中通过日历来进行导航。目前,通过组件层JavaScript实现能够支持这个模型。
  •   组件层的Ajax交互,不需要执行JSF生命周期。这种类型的例子可以是,基于当前用户在文本框中的输入,从而形成一个列表。这里的关键是,用户与组件的交互仅仅影响到该组件的表示。同样,目前,通过组件层JavaScript实现能够支持这个模型。
  •   组件层的提交,引发JSF生命周期的执行。生命周期的执行结果将成为新的表示,该表示可能会影响到页面中的多种组件。这这种类型的例子可以是,在日期选择组件中完成日期的选择,结果是引发显示不同的日期安排信息。目前在JSF中,还无法支持这种形式的交互。

  2. 增量表示更新: 为了使用Ajaxian 方式(不是页面刷新)实现第三种交互模型,JSF需要一个增量更新机制,仅仅是把页面中应用到的表示层所做的必要修改从一个表现处理传向下一个表现处理。 下面这个图示表明了这个概念。它需要一个Ajax桥,在服务器端把表示的改变组合起来,在客户端的DOM把那些变化重组。

JSF Push模式

  Ajaxified JSF实现和多数其它的Ajax方式从遗留的Web应用程序模型中继承了一个共同的特征,该模型是一个客户端发起的交互模型。这意味着,客户端的表示层只需要针对用户与表示层的交互进行相应变化。

  与使用遗留应用程序相比,使用Ajax技术,这个交互是细粒度的,但是,它仍然是客户发起的。现在,当你检验支持应用程序的SOA数据模型的动 态特性、了解众多同步用户采用这一动态数据所进行的协调互操作时,你就能够意识到,在客户端推动动态表示变化的机制是非常重要的,这一点越来越清晰。它是 达到Web2.0模型所需要的真正的动态特性的唯一途径。

在产业中已经证明,对于JSF规范与一个表示push模型的协作来说,Ajax push技术,也指Comet,是十分必要的。前文已经描述的这个增量更新特性,提供了在实现JSF Push模式时所需要的基于Ajax的更新机制。除此之外,当应用程序逻辑发现出现了一些将会影响客户端表示层状态的变化时,延长JSF的生命周期来允许 一个强制的表现处理是很有必要的。

虽然,JSF push模型相对而言实现起来更加容易,但是,生产经验表明,为使得开发人员能够有效继承,仅仅暴露JSF API中底层强制的表示机制是远远不够的。关于基本的push机制,JSF规范很有必要对表现API进行介绍,从而呈现给开发人员一个清晰有效的机制,用 于请求强制表示。API尤其需要提供以下几个方面:

  1.触发的表现:应用程序开发人员应当能够在发出表示处理请求的业务逻辑中定义触发点。

  2. 群组表现: 一个触发点能够影响一个单一客户端、多个客户端,或者是所有连接到该应用程序上的客户端。因此,为触发表现提供群组管理结构,这是很有必要的。

  3. 预定的表现:有许多合适的计划机制应当被支持,包括,按需表现、推迟表现,以及内部表现。预定的表现架构应当具备可扩展性,以支持其他用户预先设定的需 求。很重要的一点是,触发表现机制应当能够更加有效的传输。由于存在着大量的触发,它们潜在地以各种方式影响着客户端,因此,管理表现的处理这一任务不能 仅仅落在开发人员身上。触发表现的实现,必须有效地合并表现处理请求、处理必要的同步,而且,这些操作都是以一种线程有效的方式。

  多视图支持

  现存的为JSF定义的阶段和需求范围,根本不足以支持满足Ajax的JSF应用程序——用户能够在同一应用程序上获得多个活动视图。阶段范围能 够维护所有视图共同的状态,但是,它不足以处理视图之间不同的状态。由于多个同步请求都必须是活动状态,所以,需求范围也不充分。因此,需要一个新的范 围,来管理满足Ajax 的JSF应用程序的会话方面。JBoss的Seam 方案提出了会话范围,它主要提供JSF中所需要的额外范围。除了支持多视图之外,会话范围还能够带来其他优势,例如,在应用程序中,通过会话中对一系列用 户交互的明确描述,就能够有效地支持书签和返回按钮特性。

  长期存在的HTTP请求

  回到前面所提到的push模型,你可能注意到,机制需要一个特殊的HTTP请求,它能够异步地响应从应用程序中发出的触发表现出理请求。依据更 新的频率,这个特殊HTTP请求能够长期存在。由于在响应之前,每一个请求都占用其线程,所以,在处理这个长期存在的请求时,现存的Servlet模型无 法很好的响应。因此,为了支持push模型,必须对Servlet模型进行改变,使它能够以线程有效的方式来处理长期存在的请求。再强调一次,有很多生产 方案与异步Servlets和HTTP服务器相关,Java EE规范能够在此基础上定义一个解决方案。

  结论

  人们仍然有些质疑:SOA与Web2.0世界将会发生抵触,新一代的协作型企业应用程序已露端倪。也存在着这样的质疑,现存的Java EE规范无法完全处理Web2.0提出的请求,以及JSR处理必须开始在直接项中考虑这些请求。然而,产业中的重大进步,已经能够处理出现的请求,并且能 够实现扩展现存Java EE基础结构的商业化的可行方案。即将使用JSR 172来生成JSF2.0规范,非常重要的是,包含Ajax特性,以及产业参与者贡献相关技术,来确保能够及时做出基于标准的解决方案。

posted @ 2006-12-23 17:39 Zou Ang 阅读(578) | 评论 (0)编辑 收藏

原帖地址:
http://www.blogjava.net/errorfun/archive/2006/12/09/86584.html
乱码问题好像跟我们中国程序员特别有缘,一直困扰着我们,从开始的JSP乱码问题,STRUTS乱码问题,到现在的AJAX乱码问题,无一不是搞得许多程序员焦头烂额的,整天骂XXX产品对中文支持不了,UTF-8无法使用中文啊什么的,其实这里面被骂的产品中其实99%以上是对中文支持非常好的,而出现乱码的原因只是因为自身对国际化支持以及文件编码等信息的认识不知造成的。要知道一个产品那么流行,怎么可能对中文支持不了呢,下面就开始一一帮大家解决这些问题。


1
、编码
      --
想要解决好中文问题,对编码肯定是不能一概不懂了,编码是解决中文乱码问题的根本。
      
编码比较常用的有: UTF-8 GBK GB2312 ISO-8859-1 ,除了 iso-8859-1 之外的其它三个编码都能很好的支持中文,但它们都兼容 ISO-8859-1 的编码(就是说无论编码怎么改变,只要是 ISO-8859-1 中的字符,永远不会出现乱码)。
     
这四种编码中, GB2312 是中国规定的汉字编码,也可以说是简体中文的字符集编码 ; GBK GB2312 的扩展 , 除了兼容 GB2312 外,它还能显示繁体中文,还有日文的假名 ; UTF-8 虽然也支持中文,但却 GB 码不兼容(编码值不同) UTF-8 使用的是可变长的 UNICODE 编码,编码可能是 1 16 进制(即 ISO-8859-1 中的字符,其编码也是相同的)也有可能是 2 位或 3 位的 16 进制。 UTF-8 的优点是: 1 CPU 字节顺序无关 , 可以在不同平台之间交流。 2 、容错能力高 , 任何一个字节损坏后 , 最多只会导致一个编码码位损失 , 不会链锁错误 ( GB 码错一个字节就会整行乱码 ) ,所以在国际化处理中基本都是建议使用 UTF-8 作为编码。

2、文件的编码
      --虽然说只要设置了正确的编码就可以使字符正确显示了,但如果忽略了文件保存时的编码的话,那可是会让你走进迷雾中的。
      文件编码最常使用的有两种:ANSI和UTF-8,光看名字估计你都可以猜到了,ANSI就是我们保存文件时使用的默认编码,而UTF-8则需自己设置。对于编码的改变,我使用的工具是NOTEPAD和ECLIPSE,NOTEPAD使用最简单,只要打开文件后在另存为中选择相应的编码就行了,而且它对编码的支持非常好;而在ECLIPSE中,只要稍微设置一下就行了,打开首选项,然后选择:常规->内容类型(ContentType),在右边选中你想改变保存编码的文件类型,然后在下方的缺省编码中改变其值,最后点击更新(UPDATE)按钮即可。



而在其它的编辑器中,默认保存的内容都是GB2312或者GBK(NOTEPAD中对应ANSI).而根据前面所说的UTF-8和GBK,GB2312等的编码值是不同的这一点,可以知道,如果文件使用了UTF-8,那么字符编码就必须使用UTF-8,否则编码值的不同就可能造成乱码。而这也就是为什么那么多的人使用了UTF-8编码后还会产生乱码的根本原因。(JS和JSP都是这个道理)

3、JSP,STRUTS等的中文乱码解决方案
     其实解决的方法只有一个:

 request.setCharacterEncoding(encoding);

   方法只有一种,但处理方式就多种多样了,初学者会在JSP页面上直接使用,而有经验的程序员会使用过滤器。而现在所要说的方法也是过滤器。这里以统一使用UTF-8作为编码作为例子说明。具体过程就不多说了,网上有很多教程。偷懒一点的,到TOMCAT中复制就行了。在TOMCAT的目录下的\webapps\jsp-examples\WEB-INF\classes\filters\找到SetCharacterEncodingFilter.java 这个类,放到你的程序中并配置好映射路径。配置好后基本上你的乱码问题就解决了。但要映射路径中需要注意的就是不能使用 '*'

   < filter-mapping >
    
< filter-name > Set Character Encoding </ filter-name >
    
< servlet-name > * </ servlet-name >
  
</ filter-mapping >

像上面这样配置的话(可能也是网上大多教程的做法,想当年也是害苦了我),可能你只有JSP的乱码解决了,要解决STRUTS的乱码需要映射 *.do 或者 servletActionName。然后在初始化参数中设置encoding的值就行了。

< init-param >
      
< param-name > encoding </ param-name >
      
< param-value > UTF-8 </ param-value >
</ init-param >

当然,最重要的是要记得根据前面所说的方法,改变你所使用的编辑器保存文件的编码要与使用的字符编码一致。
而在JSP内容中,还是使用如网上教程所说的那种技俩,在所有页面的页首加入:

<% @ page language = "java" contentType = " text / html; charset = UTF - 8 "
    pageEncoding
= "UTF - 8 " %>

至此,相信JSP,ACTION都不太可能出现乱码了。

4、资源文件的乱码解决方案
      资源文件谁都知道是国际化支持不可或缺的一部分,如果资源文件都出现乱码了那还了得?其实资源文件的乱码是很好解决的,其原因也是因为使用了UTF-8做为JSP编码后,没有相应地改变资源文件的文件编码造成的,所以只要对资源文件保存的编码进行更正后,乱码问题也就解决了。当然,你的中文要使用 native2ascii 命令进行正确的转换。

5、调用JS时,JS内容乱码的解决方案。
     其实JS的乱码还是跟文件的编码有关系的,如果JS中有中文的话,那JS文件保存的编码就必须跟调用此JS的页面编码相同,否则,你的所有中文都要从JSP页面传给JS才会显示正常。可以看出对于调用JS出现的乱码是最容易解决的(也是建立在前面的辛苦之下的)。

6、AJAX提交数据乱码,返回数据乱码的解决方案
     随着AJAX的流行,乱码问题也开始困扰着许多刚开始使用它的程序员,幸好我之前对JSP乱码有过一点研究,在遇到AJAX后,并没有给我带来多大的困扰,在此将我的一些心得共享给大家。
     万变不离其宗,AJAX的乱码问题自然跟编码有关了,其实很多人跟我一样想到了对文件编码进行设置,并且在接数据时设置了requet的编码,在返回的数据时设置了response的编码一切都以为会很顺利,可是这一切都是徒劳无功的,讨厌的乱码再一次出现在你眼前。在你试了N多种方法,包括JS自身的escape,unescape方法后,你发现乱码仍然猖狂地出现在屏幕上。
    其实在试过这N多方法后,很多人都没发现,解决的方法其实很简单,而且其答案就在我们之前处理的JSP乱码之中。让我们先看一下AJAX的经典请求代码

xmlhttp.open( "post", url, async );
xmlhttp.setRequestHeader( 
"Content-Type""text/html"
 );
xmlhttp.send( params );

通过前面的说明,不知道你现在看出端倪了没有。不知道是受了网上教程的影响还是其它方面影响,setRequestHeader并是万年不变的,也没人想过去改它,而问题就正好出在这个地方。回想一个JSP页面内容的编码设置,其中有这么一节:
contentType="text/html; charset=UTF-8"

现在知道问题了吧,所以我们要把第二句代码改为:
xmlhttp.setRequestHeader( "Content-Type""text/html;charset=UTF-8" );

最后别忘了在返回数据时也设置上:
response.setContentType( "text/xml" );
response.setCharacterEncoding( 
"UTF-8" );

是不是很简单,一点都不麻烦呢?
如果要问为什么的话,其实我们可以把xmlhttp看成是一个临时页面,它由浏览器动态生成,主要作用是在后台获得请求的数据(可以看成是一个高级的iframe)。所以对于普通页面设置的编码,对它也要同样设置。而在servlet中返回数据为什么要设置contentType和encoding其道理也是一样的。众所周知,jsp的最后形态就是servlet,而jsp页首设置的那个内容其实也就是让生成的servlet中生成这么两句话:
response.setContentType( "text/html" );
response.setCharacterEncoding( 
"UTF-8" );

而pageEncoding则是跟jvm说明了这个页面的内容要使用什么编码保存(这跟之后生成的CLASS有关系)。所以在servlet设置response的编码也是理所当然的了。

一口气把自己一年以来遇到的乱码问题和解决的方案写出来了,希望对你有所帮助。

posted @ 2006-12-11 11:04 Zou Ang 阅读(3274) | 评论 (11)编辑 收藏