DWR初次尝试

这几天听同事说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>

 好了,大功告成,主要原因是我的开发工具版本过低,不过总结一下自己的教训,给初学者一个参考吧!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值