| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4606 人关注过本帖
标题:反向Ajax扫盲贴(3)PiggyBack
取消只看楼主 加入收藏
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2546
专家分:9359
注 册:2007-11-3
结帖率:80.91%
收藏
 问题点数:0 回复次数:14 
反向Ajax扫盲贴(3)PiggyBack
之前发了两个帖子 关于反向ajax的内容 多谢大家给捧场
但是之前的两贴介绍的技术跟今天咱们要说比起来 那就是boolshit 根本没有可比性
那就是我要说的PiggyBack 但是在这之前 我要跟大家先说一下DWR 就像它自己介绍自己的一样 Easy Ajax for JAVA

首先是官方解释
DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).它的最新版本DWR0.6添加许多特性如:支持Dom Trees的自动配置,支持Spring(JavaScript远程调用spring bean),更好浏览器支持,还支持一个可选的commons-logging日记操作.以上摘自open-open,它通过反射,将java翻译成javascript,然后利用回调机制,轻松实现了javascript调用Java代码。

不懂请看下方屌丝解释
看到上面那段您也许会乱了  新手更会说 这都什么跟神马啊 说了这么多废话 一句没懂 那么DWR到底是做什么的呢 下面我通俗的给大家讲一下
首先 DWR是一个框架 你要下载它的最新版本 然后安装 你安装DWR时会配置一个servlet 这个servlet记得吧?他就是负责把前台的JS参数封装成JAVA 去调用你的JAVA类 然后将返回结果(JAVA类型)再翻译成JS生成到你的JSP页面上(这块是它的NB之处)给你的错觉就是你用JS直接调用了JAVA方法  不懂servlet的朋友可以看这里
http://blog.
那DWR又和反向ajax有什么关系呢 ???
DWR包含两个主要的部分:允许JavaScript从WEB服务器上一个遵循了AJAX原则的Servlet
中获取数据.
另外一方面一个JavaScript库可以帮助网站开发人员轻松地利用获取的数据来
动态改变网页的内容.

看到这里您是不是有点明白了 既然DWR支持ajax 那我是不是可以用它来搞一个推送呢 答案是完全可以
给大家找了两个例子 咱们先说第一个 告诉大家怎么配置一下DWR 因为毕竟是不是VS没有那么智能 但也不是特别难

还是重复之前那几句话
DWR是一个Open Source的 java项目。DWR可以让JavaScript调用运行在Web服务器里面的JAVA程序。简单一点或者专业一点就是Easy AJAX for JAVA.
官方网站:http://
下面将一步一步的介绍怎么完成一个简单DEMO :TestDwr
一、从官方网站下载DWR.jar包
    把他直接放到apache-tomcat-7.0.27\lib目录下面
二、新建Web Project工程
编写一个TestDwr.Java类如下:
package com.test.ajax;
publicclass TestDwr
{  

    public String getMyName()
    {     

        return"Hello Casco!";

    }     

}  

这个类方法不用多说了 就是返回一个Hello Casco!
三、修改web.xml
程序代码:
<?xml version="1.0" encoding="UTF-8"?>  

<web-app version="3.0"   

    xmlns="http://java. xmlns:xsi="http://www. xsi:schemaLocation="http://java. http://java. <servlet-name>dwr-invoker</servlet-name>  

    <servlet-class>org.directwebremoting.servlet.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>  

  <welcome-file-list>  

    <welcome-file>index.jsp</welcome-file>  

  </welcome-file-list>  

</web-app>  





搜索更多相关主题的帖子: 服务端 客户端 Java JAVA ajax 
2015-06-01 16:29
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2546
专家分:9359
注 册:2007-11-3
收藏
得分:0 
配置文件不用多说了 就是配置servlet

出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2015-06-01 16:31
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2546
专家分:9359
注 册:2007-11-3
收藏
得分:0 
四、新建dwr.xml文件
把TestDwr类配置在dwr.xml中,dwr.xml是DWR的配置文件,所有需要在JavaScript中调用的java的类都必须在这个文件中描述 (必须与web.xml同级)
关键代码如下
程序代码:
<?xml version="1.0" encoding="UTF-8"?>  

<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http:// creator="new" javascript="CASCO" scope="application">

<param name="class" value="com.test.ajax.TestDwr"/>

</create>

</allow>

</dwr>


出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2015-06-01 16:32
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2546
专家分:9359
注 册:2007-11-3
收藏
得分:0 
有点乱了 感觉没说明白 我在琢磨琢磨怎么让大家理解 今天先说到这儿

出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2015-06-01 16:32
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2546
专家分:9359
注 册:2007-11-3
收藏
得分:0 
接着昨天的说
程序代码:
<?xml version="1.0" encoding="UTF-8"?>  

<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http:// creator="new" javascript="CASCO" scope="application">

<param name="class" value="com.test.ajax.TestDwr"/>

</create>

</allow>

</dwr>
 <allow>标签中包括可以暴露给javascript访问的东西。
 <create>标签中指定javascript中可以访问的java类,并定义DWR应当如何获得要进行远程的类的实例。creator="new"属性指定java类实例的生成方式,new意味着DWR应当调用类的默认构造函数来获得实例,其他的还有spring方式,通过与IOC容器Spring进行集成来获得实例等等。javascript=" CASCO"属性指定javascript代码访问对象时使用的名称。
 
  标签指定要公开给javascript的java类名。
 
  <include>标签指定要公开给javascript的方法。不指定的话就公开所有方法。
 
  <exclude>标签指定要防止被访问的方法。


[ 本帖最后由 wangnannan 于 2015-6-2 08:40 编辑 ]

出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2015-06-02 08:38
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2546
专家分:9359
注 册:2007-11-3
收藏
得分:0 
OK这是配置文件就算搞定了 下面我说一下DWR调用原理 借用网上现成的 我觉得他这个说的相当全面
1 编写业务代码,该代码是和dwr无关的。(这个咱们做了TestDwr类和方法 )
2.确认业务代码中哪些类、哪些方法是要由javascript直接访问的。(这个也做了 TestDwr中的getMyName方法要被访问)
3.编写dwr组件,对步骤2的方法进行封装。 (配置文件已经设置了)
4.配置dwr组件到dwr.xml文件中,如果有必要,配置convert,进行java和javascript类型互转。
这步还没开始 如何进行转换呢 也很简单 看下边
首先,引入javascript脚本
5.通过反射机制,dwr将步骤4的类转换成javascript代码,提供给前台页面调用。
6.编写网页,调用步骤5的javascript中的相关方法(间接调用服务器端的相关类的方法),执行业务逻辑,将执行结果利用回调函数返回。
  <script src='dwr/interface/ CASCO.js'></script>
 
  <script src='dwr/engine.js'></script>
 
  <script src='dwr/util.js'></script>
 
  其中TestClass.js是dwr根据配置文件自动生成的,engine.js和util.js是dwr自带的脚本文件。
 
  其次,编写调用java方法的javascript函数
 
  Function callTestMethod2(){
 
  CASCO.getMyName(callBackFortestMethod2);
 
  }
 
  Function callBackFortestMethod2(data){
 
  //其中data接收方法的返回值
 
  //可以在这里对返回值进行处理和显示等等
 
  alert("the return value is " + data);
 
  }


出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2015-06-02 08:49
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2546
专家分:9359
注 册:2007-11-3
收藏
得分:0 
DWR的配置和原理算是给大家说完了 下边我说一下推送 毕竟这是大家最关心的话题

出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2015-06-02 08:49
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2546
专家分:9359
注 册:2007-11-3
收藏
得分:0 
DWR推送是相当NB的 是可以在配置文件进行设置的
下边我给大家截取一段
<servlet>
  <servlet-name>dwr-invoker</servlet-name>
  <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
  <init-param>
   <param-name>debug</param-name>
   <param-value>true</param-value>
  </init-param>
  <init-param>
   <param-name>logLevel</param-name>
   <param-value>ERROR</param-value>
  </init-param>
  <init-param>
   <param-name>crossDomainSessionSecurity</param-name>
   <param-value>false</param-value>
  </init-param>
  <init-param>
   <param-name>allowScriptTagRemoting</param-name>
   <param-value>true</param-value>
  </init-param>
  <!--
   <init-param> <param-name>crossDomainSessionSecurity</param-name>
   <param-value>false</param-value> </init-param> <init-param>
   <param-name>allowScriptTagRemoting</param-name>
   <param-value>true</param-value> </init-param>
  -->
  <init-param>
   <param-name>classes</param-name>
   <param-value>java.lang.Object</param-value>
  </init-param>
  <!-- 开启反转Ajax 即所谓推技术 -->
  <init-param>
   <param-name>activeReverseAjaxEnabled</param-name>
   <param-value>true</param-value>
  </init-param>
   <init-param>
       <param-name>initApplicationScopeCreatorsAtStartup</param-name>
       <param-value>true</param-value>
     </init-param>
  <init-param>
     <param-name>maxWaitAfterWrite</param-name>
     <param-value>1000</param-value>
  </init-param>
  <!-- 对dwr scriptSession 自定义管理 -->
  <init-param>
   <param-name>org.directwebremoting.extend.ScriptSessionManager</param-name>
   <param-value>com.xx.xx.util.DwrScriptSessionManagerUtil</param-value>
  </init-param>
 </servlet>
 <servlet-mapping>
  <servlet-name>dwr-invoker</servlet-name>
  <url-pattern>/dwr/*</url-pattern>
 </servlet-mapping>

出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2015-06-02 08:52
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2546
专家分:9359
注 册:2007-11-3
收藏
得分:0 
程序代码:
 <!-- 开启反转Ajax 即所谓推技术 -->
  <init-param>
   <param-name>activeReverseAjaxEnabled</param-name>
   <param-value>true</param-value>
  </init-param>
   <init-param>
       <param-name>initApplicationScopeCreatorsAtStartup</param-name>
       <param-value>true</param-value>
     </init-param>
  <init-param>
     <param-name>maxWaitAfterWrite</param-name>
     <param-value>1000</param-value>
  </init-param>
  <!-- 对dwr scriptSession 自定义管理 -->
  <init-param>
   <param-name>org.directwebremoting.extend.ScriptSessionManager</param-name>
   <param-value>com.xx.xx.util.DwrScriptSessionManagerUtil</param-value>
  </init-param>
这段就是重要的代码 只要配置就可以了

出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2015-06-02 08:53
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2546
专家分:9359
注 册:2007-11-3
收藏
得分:0 
另外推送当中的 涉及到 scriptsession优化问题 不再本帖讨论范围内 有兴趣的可以自己百度

出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2015-06-02 08:54
快速回复:反向Ajax扫盲贴(3)PiggyBack
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025598 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved