DWR常遇问题的解决

 

TransformerFactoryConfigurationError

这个问题的现象是在启动有DWR的Web应用时出现如下stack trace:

root cause
javax.xml.transform.TransformerFactoryConfigurationError:
  Provider org.apache.xalan.processor.TransformerFactoryImpl not found
       javax.xml.transform.TransformerFactory.newInstance(Unknown Source)

这个问题和DWR没有什么关系,那是因为Tomcat没有配置好。比较简单的解决办法是下载Xalan替换掉$TOMCAT-HOME/common/lib目录下的xalan.jar文件。DWR2.0能更好的处理这个问题,但是本质的问题还是因为DWR的XML序列化需要有XSLT解析器的支持。

如果你用JDK5还是有这个问题的话,你可以增加以下VM参数来使Tomcat正常工作。

-Djavax.xml.transform.TransformerFactory=
   com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl

XML解析错误

在刚开始用DWR的时候经常遇到的一个错误就是XML解析错误。其实这和DWR没有多大关系,主要是因为Tomcat里面自带的Xerces的问题,要不是该有的时候没有,要不是不该有的时候有了。

  • JDK 1.3自身没有XML解析器,所以你需要xercesImpl.jar和xml-apis.jar.
  • JDK 1.4.0 和 JDK 1.4.1 虽然有了XML解析器,但是有很多bug,所以你还是需要把xercesImpl.jar放到tomcat/common/endorsed目录下。
  • JDK 1.4.2和JDK 5自带的XML解析器工作的很好,你就不需要再加其他的了。
    另外要提的一点是,不同版本的Tomcat需要的XML解析器不一样。所以要注意检查它和JDK的版本兼容性。

用BEA Weblogic的Classpath问题

Weblogic 8.1(有可能其他版本同样)可能找不到DWR的类。

这大多出现在dwr.jar放在APP-INF目录下(APP_INF/lib)的情况。在这种情况下DWR依然可以工作,例如debug页面可以看见,但是DWR找不到你的类。

解决办法是把dwr.jar放到WEB-INF/lib目录下。

没有cookies的情况下用DWR

当不能用cookies时,servlet规范通过URL重写来支持HttpSession。DWR 2.x通过它生成的URL来支持这项功能。但是DWR 1.x没有这个功能。你可以通过以下办法让DWR 1.x 也支持cookies:

  • 从dwr.jar中提取engine.js,保存到你的文件系统中,就像jsp文件一样.
  • 修改"DWREngine._sendData = function(batch)" 方法, 加入一行:
    statsInfo += ";jsessionid=" + <%="'"+session.getId()+"'"%>

这样就可以让DWR 1.x支持url重写了。DWR 2+默认支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值