环境:dwr 1.1.4 + Tomcat 5.0.28 + jdk 1.6.0_03
配置了最基本的 web.xml,加了一个 web.xml 和 RemoteBean,部署后通过网址
http://localhost:8080/testdwr/dwr 访问
页面出现错误
javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found
javax.xml.transform.TransformerFactory.newInstance(Unknown Source)
uk.ltd.getahead.dwr.convert.DOMConverter.(DOMConverter.java:157)
这是一个 XML 解析器的问题,我们能直接能理解的就是 TransformerFactoryImpl 找不到,那么这个类在哪个包里呢? xalan,就去 apache 网上下载到 xalan.jar 包扔到应用的 WEB-INF/lib 目录中,重启 Tomcat 就能OK 了。
上面是第一种解决办法。问题是解决了,但是根由何在?难道就不能用别的 XML 解析器呢,难道 JDK 和 Tomcat 就没有为我们预备好对于 dwr 可用的 XML 解析器吗?先说个背景
·JDK1.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 及后来版本的 XML 解析器可以工作的很好
·最后,那个出现错误本质原因还得由下面慢慢道来……
这样就是说 JDK 1.4.2 及更新版本根本用不着 xercesImpl.jar 和 xml-apis.jar 帮忙了。只要我们细心些就能发现在 Tomcat5.0.x/common/endorsed 目录中有两个包 xercesImpl.jar 和 xml-apis.jar。因为 Tomcat 加载 endorsed 中的包是通过参数 -Djava.endorsed.dirs="X:\Tomcat5.0.x\common\endorsed" 加载的,所以放在 endorsed 目录中的包要优于 JDK 的 rt.jar,所以要用 JDK 的 XML 解析器必须把 xercesImpl.jar 和 xml-apis.jar 从 endorsed 目录中移去,这是第二种解决办法。
再静心想一想,问题在 XML 解析器,为何偏偏是 org.apache.xalan.processor.TransformerFactoryImpl 这样的类名呢?这让我不免思考起 JDK 1.4 及 JDK 1.5 以上版本的差异来,再次回想起为何 Tomcat 5.5.x 版本需要 JDK 1.5 以上的版本来。
不妨做个实验,dwr 1.1.4 + JDK 1.4.2 + Tomcat 5.0.x,xercesImpl.jar 和 xml-apis.jar 仍旧让它们在 endorsed 目录中,运行最基本的 dwr 程序没一点问题。那为什么换个JDK就又行了呢?原因就在 xml-apis.jar 中指定了 TransformerFactory 的实现类全名为 org.apache.xalan.processor.TransformerFactoryImpl,它存在于 JDK 1.4.2 的 rt.jar 包中,而在 JDK 1.5 的 rt.jar 包中根本就没有 apache 的包了,所以它不行,再进一步,其实第二种解决办法如果用的是 JDK 1.5 以上版本仅仅需要把 xml-apis.jar 包从 endorsed 目录挪出就行了。
在 Tomcat5.0.x 的 common/endorsed 目录中放上 xercesImpl.jar 和 xml-apis.jar 是为 JDK 1.4.2 之前版本不健康的 XML 解析器而考虑的。再如前面所说,JDK 1.4.2 的 XML 解析器已经很好了,再试验用 JDK 1.4.2 时,把 xercesImpl.jar 和 xml-api.jar 从 endorsed 目录中移开,效果会如何呢?一切正常。还需注明点就是,如要用的 JDK 1.4.x,只移开 xml-api.jar,还留有 xercesImpl.jar 在 endorsed 目录中仍会报错的。
就如勒威耶根据天王星轨道的摄动,运用万有引力定论计算出了海王星的位置并由伽勒观察到了海王星;既然 Tomcat5.5.x 是为 JDK 1.5 以上版本而设计,而在 JDK 1.5 的 rt.jar 中没有 xalan,就不应该在 endorsed 目录中制造些杂音的,果如其然,打开 Tomcat5.5.x 的 common/endorsed 目录中空空如也。由此可证明 JDK 1.5 和 Tomcat 5.5.x 搭配 dwr 能顺顺当当的。
别说这么伟大,回想起曾经有一次碰到这种问题时,什么也没想直接就把 xercelImpl.jar 和 xml-apis.jar 移出 endorsed 目录,居然能这么神奇的瞎猫撞老鼠般的解决一个问题,实属幸运。今天正式去用 DWR 碰到麻烦才来了解个究竟,问题只要你愿深入,就能悟出些门道来。并非高版本的 JDK 就能很好的向后兼容,与应用服务器也要注意正确的搭配,SUN 好像也只是对 Solaris 承诺过二进制 100% 向后兼容而已。
分享到:
相关推荐
- DWR提供了错误处理机制,当服务器端或网络出现问题时,可以在JavaScript中捕获错误信息。 - 开发模式下,DWR会提供详细的调试信息,帮助定位问题。 9. **优化与性能**: - 使用Batching功能,将多个请求合并...
DWR支持多种服务器环境,如Tomcat、Jetty等,并且兼容各种现代浏览器,使得它成为开发人员构建Ajax应用的一个可靠选择。 总之,DWR.jar和dwr.xml是实现DWR功能的关键组件。dwr.jar提供了DWR框架的运行时环境,而dwr...
3. **更好的错误处理**:提供了更丰富的错误报告和调试工具,帮助开发者定位问题。 4. **更灵活的配置**:DWR2允许更精细的配置,如自定义转换器和序列化器,以及更方便的白名单设置。 5. **新的API**:添加了新的...
5. **错误处理**:DWR提供了统一的错误处理机制,方便开发者捕获并处理错误。 6. **实时更新**:DWR的Reverse AJAX特性使得服务器能够主动推送数据到客户端,实现了双向通信,常用于聊天、股票报价等实时应用。 7....
这些库通常包括`dwr.engine.js`,它是DWR的核心引擎,以及一些辅助脚本,如错误处理和安全相关的脚本。 5. **示例和文档**:有时,DWR包中可能还包括示例代码和文档,帮助开发者了解如何初始化DWR,设置远程调用,...
1. **Engine**: 这是DWR的核心,负责处理所有与远程调用相关的任务,如安全、类型转换、缓存和错误处理等。 2. **Batching**: DWR支持批量调用,允许多个远程方法在一个HTTP请求中一起执行,从而提高性能。 3. **...
**DWR(Direct Web Remoting)**是一种JavaScript库,它允许Web应用程序在客户端与服务器之间进行实时通信,而无需刷新整个页面。...对于初学者,可以在此基础上扩展,如添加数据库支持、错误处理和更复杂的业务逻辑。
6. **错误处理**:DWR还提供了错误处理机制,当服务器端方法抛出异常或通信出现问题时,可以在前端接收到相应的错误信息。 7. **安全性**:DWR有内置的安全措施,比如CSRF防护和允许列表,以防止未经授权的访问。在...
- **Improved Error Handling**:改进的错误处理机制,提供更友好的错误提示和调试信息。 - **AJAX Push**:支持服务器向客户端推送数据,实现真正的双向通信。 3. **DWR的核心组件** - **Ajax Engine**:负责...
- 错误处理是任何应用的重要部分。DWR提供了一套机制来处理远程调用失败的情况,包括JavaScript中的异常处理和服务器端的日志记录。 10. **调试工具**: - DWR提供了内置的调试工具,如DWR Explorer,它可以帮助...
10. **错误处理**:DWR具有内置的错误处理机制,当服务器端出现错误时,能够优雅地处理并反馈给客户端。 在使用DWR 1.1.4时,需要注意的是,这个版本相对较老,可能不包含后来版本中的一些新特性或优化。因此,在...
7. **错误处理**:DWR提供了详细的错误处理机制,包括客户端和服务器端的错误捕获和反馈,便于调试和问题定位。 8. **国际化支持**:DWR 3.0支持多语言环境,可以轻松地处理不同地区的用户需求。 9. **API与工具**...
6. **错误处理和调试**:DWR提供详细的错误报告和调试工具,帮助开发者快速定位和解决问题。 7. **可扩展性**:DWR3.0设计为高度模块化,可以方便地与其他框架(如Spring、Struts等)集成,扩展其功能。 在实际...
这些文件可能包含DWR的`util`函数,用于设置回调、错误处理,以及调用服务器端的`MessageService`。 4. **HTML/WEB-INF**:HTML页面是用户界面,通常会有一个`chat.html`文件,包含聊天窗口、输入框和按钮。这些...
2. **API 更新**:DWR 3.x 提供了新的API,以适应现代Web开发的需求,例如支持更多的数据类型转换,以及更好的错误处理机制。 3. **安全性增强**:DWR 3.x 引入了更强的安全特性,如CORS(跨源资源共享)支持,增强...
- **错误处理**:可能增强了错误报告和异常处理机制,提供了更好的调试支持。 - **API改进**:可能有新的API或者现有API的增强,以简化开发工作。 3. **JAR打包过程:** - **构建配置**:在项目根目录下创建`pom...
- 错误处理和调试技巧 - 示例应用开发 - 性能优化和安全性考量 - DWR与其他技术的集成 这个DWR中文教程涵盖了所有你需要知道的基础知识和实践技能,无论你是初学者还是有经验的开发者,都能从中受益。通过学习...
6. **错误处理和调试**:DWR提供了错误处理机制,包括客户端和服务器端的日志记录,这对于调试和理解应用程序的行为至关重要。 7. **实例化和部署**:最后,你需要将这个小例子打包并部署到Web服务器上,例如Tomcat...
5. **错误处理和日志记录**:为了便于调试和问题定位,可能增强了错误处理和日志记录功能,以便在资源加载失败时给出更明确的错误信息。 在实际应用中,要使用这个修改版的DWR,开发者需要将源码编译为新的jar包,...
- **类型安全的远程方法调用**:DWR通过自动生成的JavaScript接口确保了客户端调用服务器端方法的安全性,避免了因类型匹配错误导致的问题。 - **自动对象映射**:DWR能自动将Java对象转换为JavaScript对象,反之...