- 浏览: 183609 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
qja:
这个classpathContainersLast 是什么意思 ...
maven-eclipse-plugin 使用示例 -
litianqwe:
楼主 我是看着你的视频学习gwt的,觉得它好生硬,我有个问题想 ...
GWT开发游戏尝试--植物大战僵尸 -
litianqwe:
楼主 我现在有个问题 那我现在用GXT如果想对某一行增加一个双 ...
2.Listener 监听器系统 -
lxzh504:
简单明了,写的非常好。
scalable io in java学习 -
ocaicai:
很有研究能力,思维清晰!
GWT中对不同浏览器兼容性实现原理
web.xml中配置ContinuationFilter
GWT Service中的设置
处理Comet请求
<filter> <filter-name>jetty</filter-name> <filter-class>org.eclipse.jetty.continuation.ContinuationFilter</filter-class> <init-param > <param-name>faux</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>jetty</filter-name> <servlet-name>comet</servlet-name> </filter-mapping>
GWT Service中的设置
import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Queue; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import net.sf.hibernate4gwt.core.HibernateBeanManager; import net.sf.hibernate4gwt.gwt.HibernateRemoteService; import org.eclipse.jetty.continuation.Continuation; import org.eclipse.jetty.continuation.ContinuationThrowable; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import com.extjs.gxt.ui.client.data.BaseModelData; import com.extjs.gxt.ui.client.data.ModelData; import com.google.gwt.user.server.rpc.UnexpectedException; import com.single.desktopoa.client.event.CometEvents; import com.single.desktopoa.common.person.Person; import com.single.desktopoa.exception.RetryException; public class BaseService extends HibernateRemoteService { public static final String PAYLOAD = "com.google.gwt.payload"; public static final String PERSON = "person"; public static final String COMET_UTIL = "CometUtil"; public static final CometUtil cometUtil=new CometUtil(); protected Person person; protected WebApplicationContext springContext; @Override public void init(ServletConfig config) throws ServletException { super.init(config); springContext = WebApplicationContextUtils.getWebApplicationContext( config.getServletContext(), WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); setBeanManager((HibernateBeanManager) springContext .getBean("hibernateBeanManager")); } @Override protected String readContent(HttpServletRequest request) throws ServletException, IOException { String payload = (String) request.getAttribute(PAYLOAD); if (payload == null) { payload = super.readContent(request); request.setAttribute(PAYLOAD, payload); } return payload; } @Override protected void doUnexpectedFailure(Throwable e) { throwIfRetryRequest(e); super.doUnexpectedFailure(e); } //如果我们的异常不想被GWT捕获,在该方法中向上抛出 protected void throwIfRetryRequest(Throwable caught) { if (caught instanceof UnexpectedException) { caught = caught.getCause(); } //如果抛出的是自定义的,为了Hold request的异常,则继续往上抛出 ContinuationThrowable() //此ContinuationThrowable() 是一个Error,ContinuationFilter会捕获这个Error,为了能让Filter捕获,我手动向上抛出,很笨拙的方法,期待以后改进 if(caught instanceof RetryException){ throw new ContinuationThrowable(); } } @Override protected void onBeforeRequestDeserialized(String serializedRequest) { person = (Person) getThreadLocalRequest().getSession().getAttribute( PERSON); super.onBeforeRequestDeserialized(serializedRequest); } public class CometMember { public Person person; public Continuation continuation; public Queue<ModelData> queue = new LinkedList<ModelData>(); public void addEvent(String event,Object data) { boolean isContain = false; for (Iterator<ModelData> it = queue.iterator(); it.hasNext();) { if (it.next().get("event").equals(event)) { isContain = true; break; } } if (!isContain) { ModelData modeldata=new BaseModelData(); modeldata.set("event", event); if(data!=null) modeldata.set("data", data); queue.add(modeldata); } synchronized (this) { // if (continuation != null) { // continuation.resume(); // } } } } public static class CometUtil { protected HashMap<Long, CometMember> memberMap = new HashMap<Long, CometMember>(); public List<Person> getOnlineList(){ List<Person> onlines=new ArrayList<Person>(); for(CometMember member:memberMap.values()){ onlines.add(member.person); } return onlines; } public boolean addEvent(Person receiver, String event,Object data) { if (isContain(receiver)) { CometMember member = memberMap.get(receiver.getId()); member.addEvent(event,data); return true; } return false; } public void addMember(CometMember member) { for(Iterator<CometMember> it=memberMap.values().iterator();it.hasNext();){ CometMember mem=it.next(); mem.addEvent(CometEvents.WORKTALK_newlogin, null); } memberMap.put(member.person.getId(), member); //test member.addEvent(CometEvents.WORKTALK_newlogin, null); } private boolean isContain(Person receiver) { if (memberMap.get(receiver.getId()) == null) { return false; } return true; } } }
处理Comet请求
import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.continuation.Continuation; import org.eclipse.jetty.continuation.ContinuationSupport; import org.mortbay.jetty.RetryRequest; import com.extjs.gxt.ui.client.data.BaseModelData; import com.extjs.gxt.ui.client.data.ModelData; import com.single.desktopoa.exception.RetryException; import com.single.desktopoa.module.comet.CometService; import com.single.desktopoa.server.BaseService; public class CometServiceImpl extends BaseService implements CometService { public List<ModelData> getEvents() { HttpServletRequest request=getThreadLocalRequest(); HttpServletResponse response=getThreadLocalResponse(); CometMember member=(CometMember)request.getSession().getAttribute(MEMBER); if(member==null){ member=new CometMember(); member.person=person; request.getSession().setAttribute(MEMBER, member); cometUtil.addMember(member); } if(member.queue.size()>0){ List<ModelData> result=new ArrayList<ModelData>(); while(member.queue.size()>0){ result.add(member.queue.poll()); } return result; }else { Continuation continuation=ContinuationSupport.getContinuation(request); if(continuation.isInitial()){ //如果是新创建的 continuation.suspend(response); member.continuation=continuation; }else{ return new ArrayList<ModelData>(); } } //手动抛出异常,表明此请求需要Hold住,待以后唤醒 throw new RetryException(); } }
发表评论
-
关于GXT视频
2010-05-05 15:48 2254我在浪曦发布过视频,地址http://bbs.langsin. ... -
2.Listener 监听器系统
2010-04-30 15:01 1738GXT中的Listener采用观察者模式 因此在顶层就有一个接 ... -
1.1 BaseEvent
2010-04-30 14:36 946前面讲了EventType做为GXT中基本的事件。 下面介绍 ... -
1.Event 事件系统
2010-04-30 14:22 1782要说GXT里面的事件Event,就必须先了解一下GWT提供的事 ... -
GXT源码解析
2010-04-30 13:50 1299先列个目录 1.Event 事件系统 2.Listener ... -
GXT中对Cookie的操作
2010-01-08 15:50 1494在GXT中已经提供了相关的类,能够让我们很方便的操作cooki ... -
Registry的用途
2010-01-08 14:22 2073先贴上源代码: /* * Ext GWT - Ext ... -
GXT中的MVC(1)
2010-01-07 18:02 2060在GXT中,官方已经给了我们一个MVC设计模型。我们只需要了解 ... -
使用JSNI来调用JAVA方法
2009-10-12 16:47 1270静态方法的调用: public static void ... -
为HTML中的Element添加单击事件
2009-10-12 16:09 1246private native void addCl ... -
TreePanel上监听Double Click
2009-10-09 20:50 2178在TreePanel上监听双击事件,为:Events.OnDo ... -
GWT开源项目DesktopOA 桌面OA系统
2009-10-01 20:03 6543DesktopOA 桌面OA系统是基 ... -
在GWT中开启session
2009-09-12 02:24 1640GWT中默认不开启session 如需要使用session,要 ... -
GWT与Spring的整合
2009-09-10 11:07 1799在使用GWT的RPC时,我们一般会创建一个类继承RemoteS ... -
GXT与EXT-GWT GWT-EXT 以及收费问题
2009-08-16 14:32 7097很多人可能搞不太清楚这几个东西的区别 GWT-EXT是goo ...
相关推荐
里面东西很多,都是关于GWT-COMET的内容,实现gwt的服务器推技术,包括gwt-comet-examples-1.2.3:google官网上的Test实例;gwt-comet-1.2.3.jar:jar包,gwt-example:聊天实例源代码(.java的),gwt-event-source...
在Jetty中部署应用 部署管理器 部署绑定 热部署 Context提供者 如何部署web应用 webApp提供者 如何部署第三方产品 部署展开形式的web应用 使用Jetty进行开发 如何使用Jetty进行开发 如何编写Jetty中的Handlers 使用...
EXT-GWT2.0.1+API+DOC gwtdesigner Gwt-Ext基础-中级-进阶 GWT快速开发 GWT入门 GWT中文教程
Ajax技术是当前开发web应用的非常热门的技术,也是Web 2.0的一个重要的组成部分。然而如果用传统的方式Javascript进行Ajax开发的话,就会使得应用程序非常难以进行调试,从而降低了生产效率。Google最近推出的GWT...
Gwt中文手册,GWt入门Gwt中文手册,GWt入门Gwt中文手册,GWt入门
EXT-GWT2.0.1+API+DOC Gwt-Ext基础-中级-进阶GWT中文教程
GWT中文教程(入门进阶) 通过实例详细介绍GWT
gwt 开发
填《GWT揭秘》中8.1节中--GWT中的XMLHTTPRequest:请求动态数据的代码,
5. 在GWT中使用XML 6. GWT控件详解 7. 使用GWT控件 8. GWT-RPC 9. Ext GWT 10. (实战)俄罗斯方块游戏 11. (实战)费用申请审批流程 12. GWT与Flex整合 13. 图片缓存 CSS Sprite 14. 本地化 15. 其他高级功能
比较不错的关于GWT的技术文档。内容较基础~
vue-gwt, 在使用GWT的Java中,Vue.js 组件/自定义元素 在https开发 Vue使用 JsInterop 和 Elemental2将 Vue.js 与 GWT集成。 它允许你在Java中编写Vue组件。 特性用英镑为代价的Vue.js 组件,带有的Java控制器模板...
GWT技术介绍
gwt 练习gwt 练习gwt 练习gwt 练习
GWT 是一款后台java人员开发 的技术框架,无需前台开发工程师。
GoogleWebToolkit(GWT)是一个Java软件开发框架用于开发类似于GoogleMaps和Gmail的AJAX应用程序。GWT的设计参考JavaAWT包设计,类命名规则、接口...在 GWT框架中使用 Echarts 。 注意: 本项目jar包已删除,请新建项目。
gwt使用手册,详细介绍gwt使用手册和各种组件的调用配置
本书内容全面,不仅详细介绍了 GWT 的主要模块和控件、GWT 与 JavaScript 对象的交互、在 GWT 中使用 XML、开发自定义 GWT 控件、GWT-RPC 和 Ext GWT 等必备的基础知识,而且还深入讲解了 GWT 与 Flex整合、图片缓存...
1.gwt中实现tree状菜单,tree是一次性加载 2。其中还用源代码。