日期:2014-05-16 浏览次数:20733 次
先说说注释语法,省掉dwr.xml。(自从用了java 5 之后,现在越看一堆堆的配置文件越烦,越来越喜欢注释方式来的直接简单了)??
首先下载最新的稳定版本的dwr.jar文件放到你的工程中。(还有需要其它的吗?不需要了,dwr就是这么简单)
然后在web.xml中添加如下一段
<!-- DWRServlet --> <servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> <init-param> <!-- 默认为false,调试用,可以访问http://地址:端口/上下文/dwr 来进行测试 --> <param-name>debug</param-name> <param-value>true</param-value> </init-param> <!--这就是传说中的DWR反转调用的开关了,默认也是false --> <init-param> <param-name>activeReverseAjaxEnabled</param-name> <param-value>true</param-value> </init-param> <!--日志级别不多说了--> <init-param> <param-name>logLevel</param-name> <param-value>WARN</param-value> </init-param> <!--这块注意了,关键来了,把使用DWR注释的类都要加在这里,2.0的DWR好像还不支持包扫描,希望以后能提供这个功能,3.0我还没注意有没有这个功能,现在还没出正式版--> <init-param> <param-name>classes</param-name> <param-value> org.relax.service.SectionManager, org.relax.service..entity.Section </param-value> </init-param> </servlet> <!--这块不用多说了吧,如果看不懂,哪凉快哪呆着去吧--> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping>
?
在这里再说明一下有的文章用的是uk.ltd.getahead.dwr.DWRServlet,其实他只是继承了一下org.directwebremoting.servlet.DwrServlet自己什么也没做,所以这两个类用哪个都行(这么做应该是为了兼容以前的版本,猜的,1.0我没用过)。
下面看具体的类吧。
@Service @RemoteProxy(creator = SpringCreator.class, name = "sectionManager", creatorParams = @Param(name = "beanName", value = "sectionManager")) public class SectionManager extends DefaultEntityManager<Section, Integer> { @Autowired OriginCollectDataManager originCollectDataManager; @RemoteMethod public Section get(Integer id) { return super.get(id); } @RemoteMethod public List<Section> getAll() { return super.getAll(); } }
?
我的测试环境里还用到了spring和hibernate,所以里面还掺杂了一些spring的注释标记,当然如果你没用也无所谓。
这里主要解释一下DWR的几个Annotations
@RemoteProxy标在类上的就是使类可以运程访问
@RemoteProxy(creator = SpringCreator.class, name = "sectionManager", creatorParams = @Param(name = "beanName", value = "sectionManager")),
上面因为使用了spring所以写的是springCreator.class, 其它还有BeanCreator, Ejb3Creator, JsfCreator, NewCreator, NullCreator, PageFlowCreator, ScriptedCreator, SingletonCreator, SpringCreator, StrutsCreator。看自己的具体需求。最常用的就是newCreator了吧。
@RemoteMethod标在方法上,不用多说可以使方法能远程访问
@DataTransferObject标在类上,注明需要转换的VO类了
@RemoteProperty标在类的属性上,标明哪些可以访问(我试了试不标,好像全都可以访问了)
常用的就这么多了,其它几个不太常用,如果用到的时候再研究吧。
还有什么要做的吗?好像就这么多了。DWR就是简单。如果标好了可以试试访问上下文路径加上/dwr来访问试试了。好像好用了哎。
看上去方法好像挺多,其实真正能访问用的只有用@RemoteMethod标注过的。
测试已经好用了下面就是加到页面了。那不就更简单了吗。按着上图收到JSP文件中。然后像调用普通javascript对象一样就可以了。咱不是做普及的,今天主要讲注释的用法。这部分就到这吧。
下面说反向调用了,这个还是挺复杂的,首先解释几个概念。
dwr的逆向ajax其实主要包括两种模式:主动模式和被动模式。其中主动模式包括Polling和Comet两种,被动模式只有Piggyback这一种。
??? 所谓的Piggyback指的是如果后台有什么内容需要推送到前台(即调用页面的js方法),是要等到那个页面进行下一次ajax请求的时候,将需要推送的内容附加在该次请求之后,传回到页面。
??? polling指的是由浏览器定时向服务端发送ajax请求,询问后台是否有什么内容需要推送,有的话就会由服务端返回推送内容。这种方式和我们直接在页面通过定时器发送ajax请求,然后查询后台是否有变化内容的实现是类似的。只不过用了dwr之后这部分工作由框架帮我们完成了。
??? comet模式指的的当服务端建立和浏览器的连接,将页