1. 概述
目中使用DWR有一段时间了,但说来惭愧,自己还没手动配个DWR的HelloWorld,今日一试,问题颇多,可见事不
亲历亲为,终不知其中的滋味,特记录下来。
2. DWR配置
网上关于dwr的教程甚多,这里给出官网上的一个Tutorial,不在赘述:
http://directwebremoting.org/dwr/introduction/getting-started.html
dwr.xml
<dwr> <allow> <create creator="new" javascript="hellodwr"> <param name="class" value="java.Hello"/> </create> </allow> </dwr>
3. 无奈的问题
理论上在浏览器里输入localhost:8080/项目发布名称/dwr 即可看到 可用的 dwr列表,但事实如图:
4. 调试
调试是辛苦的,但一定要注意方法,页面的信息太少,而tomcat中又没有打印出相关信息,因此想到配置log4j
引入 commons-logging-1.0.4.jar、log4j-1.2.12.jar,配置好log4j文件,如下:
启动tomcat,错误信息打印出来了......
2009-06-08 17:29:31,718 WARN [org.directwebremoting.util.LocalUtil] - <Error setting class=java.Hello on org.directwebremoting.create.NewCreator>
java.lang.IllegalArgumentException: Class not found: java.Hello
at org.directwebremoting.create.NewCreator.setClass(NewCreator.java:48)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.directwebremoting.util.LocalUtil.setProperty(LocalUtil.java:628)
at org.directwebremoting.util.LocalUtil.setParams(LocalUtil.java:587)
at org.directwebremoting.impl.DefaultCreatorManager.addCreator(DefaultCreatorManager.java:74
.......
错误定位到了,说找不到 Hello 这个类,怪了?明明在 包 java下,怎么找不到呢?
查丫查,试丫试......无果。。。
5. 曙光
愤怒了,我把包 java 删除了,src下只留 hello.java,竟然好了,可我再给套上 java包 就又躺了....
6. 思考与结论
忽然意识到,dwr该不会去jre中java.*找 Hello吧,做实验,把 java换成 com,果然一切正常!
事实证明,给自己的类写包时要注意了,第一个包 出于种种考虑,莫要写 java,在这里 dwr就不认。
如果你配置 dwr 的helloword 一直报错是 class not found,那么有可能是类似的错误,需要查一下 dwr的源码
是如何找到这些类的,看来此处仍需要改进!