这几天听同事说DWR很好,比ajax好用多了,也很简单方便,就试试。我的开发环境是MyEclipse4.1+JDK1.4.2+TOMCAT5.0.2x。仿照DWR官方网站上的例子做了几个,感觉很好。不过我试着通过客户端传个参数到服务器就出现问题了(以前的都没有带参数),老报错Invalid reply from server。
web.xml
<
servlet
>
<
servlet-name
>
dwr-invoker
</
servlet-name
>
<
servlet-class
>
uk.ltd.getahead.dwr.DWRServlet
</
servlet-class
>
<
init-param
>
<
param-name
>
debug
</
param-name
>
<
param-value
>
true
</
param-value
>
</
init-param
>
</
servlet
>
<
servlet-mapping
>
<
servlet-name
>
dwr-invoker
</
servlet-name
>
<
url-pattern
>
/dwr/*
</
url-pattern
>
</
servlet-mapping
>
dwr.xml
<?
xml version="1.0" encoding="UTF-8"
?>
<!
DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd"
>
<
dwr
>
<
allow
>
<
create
creator
="new"
javascript
="JDate"
>
<
param
name
="class"
value
="com.huaying.caochen.TestDate"
/>
</
create
>
</
allow
>
</
dwr
>
java类
package
com.huaying.caochen;
public
class
TestDate
{
public String getHello(String str)
{
return str;
}
}
index.jsp
<
html
>
<
head
>
<
title
>
DWR - Test Home
</
title
>
<
script
type
='text/javascript'
src
='dwr/interface/JDate.js'
></
script
>
<
script
type
='text/javascript'
src
='dwr/engine.js'
></
script
>
<
script
type
='text/javascript'
src
='dwr/util.js'
></
script
>
<
script
type
='text/javascript'
language
="javascript"
>
function checkStr(){
JDate.getHello(loadStr,DWRUtil.getValue("str"));
}
function loadStr(data)
{
DWRUtil.setValue("reply",data);
}
</
script
>
</
head
>
<
body
>
<
form
action
="index.jsp"
method
="post"
>
str:
<
input
type
="text"
name
="str"
/><
br
>
<
input
type
="button"
onclick
="checkStr()"
value
="submit"
/>
</
form
>
<
span
id
="reply"
></
span
><
br
>
</
body
>
</
html
>
每次都报Invalid reply from server这个错误,不带参数的是好的,但是看官网上的例子是可以带参数的,估计就是开发环境的问题了。
我先把TOMCAT5.5装上,运行之后在控制台有错误消息提示,而这在以前那个版本是没有的,把这个错误消息baidu一下,根据http://www.pocketshark.com/blog/page/tempo?entry=javatwo_2006_ajax_client_server最后那个高人的指点有必要升级jdk的版本。
jdk1.5安装并且配置好之后重新启动tomcat,没有问题,不过执行http://localhost:8080/myapp/dwr/总是报下面的错误:
javax.servlet.ServletException: Servlet.init() for servlet dwr-invoker threw exception
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
118
)
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:
160
)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
799
)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:
705
)
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:
577
)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:
683
)
java.lang.Thread.run(Thread.java:
595
)
再baidu一下,找到http://jivesoftware.com/jive/thread.jspa?threadID=15861&tstart=15,说是Tomcat和JDK1.5中的 xml-parser 冲突,于是就把TOMCAT/common/endorsed/xml-apis.jar删掉,重启tomcat。
在DWR启动的时候还有错误:
java.lang.IllegalArgumentException: DefaultContainer can't find a classes
at org.directwebremoting.impl.DefaultContainer.getBean(DefaultContainer.java:
216
)
at org.directwebremoting.annotations.AnnotationsConfigurator.configure(AnnotationsConfigurator.java:
50
)
at org.directwebremoting.servlet.DwrServlet.init(DwrServlet.java:
121
)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:
1105
)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:
757
)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:
130
)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:
178
)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:
126
)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
105
)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
107
)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
148
)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
869
)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:
664
)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:
527
)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:
80
)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:
684
)
at java.lang.Thread.run(Thread.java:
595
)
再baidu查到http://www.javafan.cn/archives/2006/09/125.html,原因是因为启动时会检查JDK5的annotations,还没用到annotations注释,解决办法,就是初始化时加上java.lang.Object,如下:
<
servlet
>
<
servlet
-
name
>
dwr
-
invoker
</
servlet
-
name
>
<
display
-
name
>
DWR Servlet
</
display
-
name
>
<
servlet
-
class
>
org.directwebremoting.servlet.DwrServlet
</
servlet
-
class
>
<
init
-
param
>
<
param
-
name
>
debug
</
param
-
name
>
<
param
-
value
>
false
</
param
-
value
>
</
init
-
param
>
<
init
-
param
>
<
param
-
name
>
classes
</
param
-
name
>
<
param
-
value
>
java.lang.Object
</
param
-
value
>
</
init
-
param
>
<
load
-
on
-
startup
>
1
</
load
-
on
-
startup
>
</
servlet
>
<
servlet
-
mapping
>
<
servlet
-
name
>
dwr
-
invoker
</
servlet
-
name
>
<
url
-
pattern
>/
dwr
/*</url-pattern>
</servlet-mapping>
好了,大功告成,主要原因是我的开发工具版本过低,不过总结一下自己的教训,给初学者一个参考吧!

760

被折叠的 条评论
为什么被折叠?



