当前位置: 首页 > news >正文

电脑经销部开具网站建设费网站内优化怎么做

电脑经销部开具网站建设费,网站内优化怎么做,镇江网站制作哪家便宜,湖南建筑信息一体化管理平台JSR 356 WebSockets是即将发布的JEE 7版本中令人兴奋的新功能之一#xff0c;并且在其参考实现中包括Server-和Client API。 这使其非常适合在客户端与JavaFX集成。 JacpFX是JavaFX之上的RCP框架#xff0c;它使用基于消息的方法与组件进行交互。 这种基于消息的方法使集成We… JSR 356 WebSockets是即将发布的JEE 7版本中令人兴奋的新功能之一并且在其参考实现中包括Server-和Client API。 这使其非常适合在客户端与JavaFX集成。 JacpFX是JavaFX之上的RCP框架它使用基于消息的方法与组件进行交互。 这种基于消息的方法使集成WebSocket-ClientEndpoints以及将传入消息传递到JavaFX / JacpFX应用程序变得容易。 下面的文章将向您展示如何在GlassFish 4上创建一个简单的Websocket-SeverEndpoint以及如何从JacpFX客户端联系该端点。 示例场景非常简单服务器端点可以创建与Twitter的连接它从客户端获取查询消息并将Twitter结果广播到所有已连接的用户 ClientEndpoints。 该示例将基于GlassFish b85和JacpFX 1.2。 maven示例项目可以在这里下载 第1部分创建服务器端点 示例项目是一个简单的JEE 7 maven项目。 该Web项目包含一个充当WebSocket-ServerEndpoint的POJO。 它接收查询请求并将结果广播到所有连接的客户端。 第二个POJO是一个无状态Bean它接收查询消息执行twitter搜索并将结果返回到Server-Endpoint。 为了避免处理文本或二进制消息我们创建了两个POJO它们充当WebSocket消息的编码器/解码器。 让我们从TwitterRepositoryBean开始这是一个简单的无状态bean Stateless(mappedName TwitterRepositoryBean)public class TwitterRepositoryBean {public TwitterResult getTwitterDataByQuery(Query query) {return parser.fromJson(getFeedData(query.getQuery()), TwitterResult.class);}private String getFeedData(String input) {final String searchURL http://search.twitter.com/search.json?q input rpp5include_entitiestrue with_twitter_user_idtrueresult_typemixed;final URL twitter new URL(searchURL);…return ;}} 接下来我们创建一个WebSocket-ServerEndpoint。 创建端点的最简单方法是编写一个POJO并使用ServerEndpoint“ path”对其进行注释。 端点可以具有以下生命周期注释 OnOpen OnClose OnError和一个或多个OnMessage。 请注意每种本机消息类型只允许使用一个OnMessage。 这些是文本二进制和傍。 这是什么意思 您可以有两种这样的方法 OnMessage login(Login lg); 和OnMessage message(Message m) 。 但是一个必须以文本形式传输另一个必须以二进制形式传输否则部署时会出现异常。 ServerEndpoint将如下所示 ServerEndpoint(value /twitter)public class TwitterEndpoint {Injectprivate TwitterRepositoryBean twitterRepo;OnMessagepublic void handleChatMessage(Query query, Session session) {TwitterResult result twitterRepo.getTwitterDataByQuery(query);broadcastMessage(result,session);}private void broadcastMessage(TwitterResult result, Session session) {for (Session s : session.getOpenSessions()) {s.getBasicRemote().sendObject(result);}}} 现在我们创建了ServerEndpoint问题是如何使用Query和TwitterResult类的类型进行处理因为本机消息格式为二进制和文本。 解决方案是消息“编码器/解码器”。 因此我们需要一个将二进制消息转换为Query解码器以及一个将TwitterResult编码为二进制的编码器。 public class QueryDecoder implements Decoder.BinaryQuery {public Query decode(ByteBuffer byteBuffer) throws DecodeException {return (Query) SerializationUtils.deserialize(byteBuffer.array());}public boolean willDecode(ByteBuffer byteBuffer) {Object message SerializationUtils.deserialize(byteBuffer.array());if (message null) return false;return message instanceof Query;}} 和编码器 public class TwitterResultEncoder implements Encoder.BinaryTwitterResult {public ByteBuffer encode(TwitterResult message) throws EncodeException {return ByteBuffer.wrap(SerializationUtils.serialize(message));}} 为了使编码器/解码器可用于端点我们扩展ServerEndpoint注释如下所示 ServerEndpoint(value /twitter, decoders {QueryDecoder.class},encoders {TwitterResultEncoder.class}) 因此现在我们有一个完整的ServerEndpoint示例您可以将其部署在任何符合JEE 7的应用服务器上。 第2部分创建JacpFX客户端和ClientEndpoint 从JacpFX开始的最简单方法是使用提供的Maven原型。 它生成一个示例客户端其中包括JacpFX的每个有趣方面。 因此您可以立即使用工作台两个透视图fxml和JavaFX两个UI组件和两个非UI组件。 因此我们只需使用它并通过WebSocket-Endpoints对其进行扩展。 如果您有 Java7u6和maven则只需键入 mvn archetype:generate -DarchetypeGroupIdorg.jacp -DarchetypeArtifactIdJacpFX-quickstart-archetype -DarchetypeVersion1.2 -DarchetypeRepositoryhttp://developer.ahcp.de/nexus/content/repositories/jacp 创建一个JacpFX项目。 要获取WebSocket-Client API的依赖关系您需要在pom.xml中添加以下依赖关系 dependencygroupIdorg.glassfish.tyrus/groupIdartifactIdtyrus-client/artifactIdversion1.0-rc1/versionscopecompile/scope/dependencydependencygroupIdorg.glassfish.tyrus/groupIdartifactIdtyrus-container-grizzly/artifactIdversion1.0-rc1/versionscopecompile/scope/dependency 并添加以下存储库 repositoryidjava.net-promoted/idurlhttps://maven.java.net/content/groups/promoted//url/repository 现在的基本思想是我们使用创建的有状态组件并将其用作WebSocket- ClientEndpoint。 每次收到新的TwitterReult 我们都会将其传递到JacpFX消息总线并将其委托给一个UI组件该组件将结果呈现在表中。 另一方面我们将TextField的输入委托给有状态组件该组件将查询请求发送到ServerEndpoint。 因此如下更改有状态组件 id003 类级别的注释ClientEndpoint将此组件标记为WebSocket-Endpoint而CallbackComponent包含此无状态组件的JacpFX元数据。 OnStart init(..)方法包含用于连接到WebSocket-ServerEndpoint并将有状态组件的实例作为ClientEndpoint传递的代码。 OnStart是JacpFX生命周期注释将在激活组件时执行。 当组件从UI收到Query消息时将执行“handleAction”方法。 在这里我们称为“sendQuery”并使用WebSocket-Session将Query对象发送到服务器端点。 当服务器执行Query并从Twitter接收结果时他TwitterResult广播到所有连接的客户端因此OnMessage onTwitterMessage(…)方法将在客户端执行。 在这里我们调用组件的actionListener并将结果传递给ID为“ id001”的组件以呈现结果。 像之前的ServerEndpoint一样我们需要一个“编码器/解码器”来处理消息类型“ Query和TwitterResult ”。 因此以相同的方式创建编码器/解码器然后像这样在ClientEndpoint上注册它们 ClientEndpoint(decoders {TwitterResultDecoder.class}, encoders {QueryEncoder.class})第3部分更改示例客户端以显示Query-和TableView 最后一步是将示例JacpFX客户端中的UI组件更改为具有查询视图和表视图。 您基本上可以自由地使用输入字段和表来创建一个组件以呈现结果。 更好的方法是为此创建单独的组件。 在开始之前您可以删除PerspectiveTwo.java ComponentFXMLRight.java和ComponentFXMLBottom.java 。 还要删除resources/main.xml的引用并将componentTop的引用添加到PerspectiveOne bean idperspectiveOne classorg.jacp.client.perspectives.PerspectiveOneproperty namesubcomponentslistref beancomponentLeft /ref beancomponentTop /ref beanstatefulCallback /ref beanstatelessCallback //list/property/bean 第一个JacpFX透视图perspectiveOne通过FXML声明其UI并充当两个组件的容器。 它已经是一个SplitPane 我们只需更改代码即可垂直拆分视图。 因此打开resources/fxml/perspectiveOne.fxml并在SplitPane元素上添加属性orientationVERTICAL 并将dividerPositions更改为0.30。 现在打开PerspectiveOne.java并将组件的注册目标名称更改为 perspectiveLayout.registerTargetLayoutComponent(QueryView,this.gridPaneLeft);perspectiveLayout.registerTargetLayoutComponent(TableView,this.gridPaneRight); 我们要做的是为我们的组件设置新的目标布局。 组件现在可以注册到这些目标布局之一然后将在其中进行渲染。 这种注册机制使您可以在透视图中定义任何复杂的UI结构并为组件定义渲染点。 现在我们更改要在“QueryView”目标中呈现的ComponentTop 。 为此我们只需像这样更改Component的defaultExecutionTarget属性的值即可 Component(defaultExecutionTarget QueryView, id id006, name componentTop, active true, resourceBundleLocation bundles.languageBundle, localeID en_US) 这个组件已经包含一个TextField和一个Button 因此我们只需要更改Button的EventHandler即可传递TextFiled的值。 private EventHandlerEvent getEventHandler() {return new EventHandlerEvent() {Overridepublic void handle(final Event arg0) {getActionListener(id01.id003,textField.getText()).performAction(arg0);}};} getActionListener(“id01.id003”…只是在透视图“ id01”中定义了带有“ id003”的组件有状态组件作为此消息的目标。接下来我们将ComponentLeft.java更改为TableView 。我们将默认的executionTarget更改为“TableView”还更改了createUI()方法以显示TableView并更新了postHandleAction来处理TwitterResults并将它们传递给表最终的解决方案如下所示 Component(defaultExecutionTarget TableView , id id001, name componentLeft, active true, resourceBundleLocation bundles.languageBundle, localeID en_US)public class ComponentLeft extends AFXComponent {private AnchorPane pane;private ObservableListTweet tweets FXCollections.observableArrayList();Override/*** The handleAction method always runs outside the main application thread. You can create new nodes, execute long running tasks but you are not allowed to manipulate existing nodes here.*/public Node handleAction(final IActionEvent, Object action) {// runs in worker threadif (action.getLastMessage().equals(MessageUtil.INIT)) {return this.createUI();}return null;}Override/*** The postHandleAction method runs always in the main application thread.*/public Node postHandleAction(final Node arg0,final IActionEvent, Object action) {// runs in FX application threadif (action.getLastMessage().equals(MessageUtil.INIT)) {this.pane (AnchorPane) arg0;} else if (action.getLastMessage() instanceof TwitterResult) {tweets.clear();TwitterResult result (TwitterResult) action.getLastMessage();if (!result.getResults().isEmpty()) {tweets.addAll(result.getResults());Collections.sort(tweets);}}return this.pane;}/*** create the UI on first call** return*/private Node createUI() {final AnchorPane anchor AnchorPaneBuilder.create().styleClass(roundedAnchorPaneFX).build();TableView table new TableView();table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);table.getColumns().addAll(createColumns());table.setItems(tweets);AnchorPane.setTopAnchor(table, 25.0);AnchorPane.setRightAnchor(table, 25.0);AnchorPane.setLeftAnchor(table, 25.0);anchor.getChildren().addAll(table);GridPane.setHgrow(anchor, Priority.ALWAYS);GridPane.setVgrow(anchor, Priority.ALWAYS);return anchor;}private ListTableColumn createColumns() {…return Arrays.asList(imageView, nameView, messageView);} JacpFX UI组件具有定义的生命周期每条消息首先通过handleAction(..)传递然后通过postHandleAction(…)方法postHandleAction(…) 。 handleAction(..)始终在工作线程中执行因此您可以执行任何复杂且耗时的计算而不会阻塞UI。 在这里您可以自由创建新的UI节点并返回它们。 但是您不能更改任何现有节点因为您不在JavaFX Application Thread上。 然后返回的Node将被传递到在应用程序线程上运行的postHandleAction(…) 。 您可以在此处看到完整的生命周期 在postHandleAction(…)我们检查TwitterResult消息并将Twitter条目添加到Table 。 现在我们完成了您可以在GlassFish 4实例上部署ServerEndpoint并运行该应用程序。 如果启动许多实例则TwitterResult将传递给所有连接的客户端。 您可以在项目Wiki的此处找到JacpFX的完整文档。 有关JSR 356的更多信息请访问项目页面和Arun Gupta的博客。 资源资源 https://blogs.oracle.com/arungupta/ https://java.net/projects/tyrus https://code.google.com/p/jacp/wiki/文档 http://www.javacodegeeks.com/2012/03/building-rich-clients-with-jacpfx-and.html 参考 通过我们的W4G合作伙伴 Andy Moncsek 将JacpFX客户端与JSR 356 WebSocket 一起使用 。 翻译自: https://www.javacodegeeks.com/2013/04/using-jacpfx-clients-with-jsr-356-websockets.html
http://www.yutouwan.com/news/130377/

相关文章:

  • 网站开发无形资产各种网址大全
  • 用软件做的网站权限管理济源网络推广
  • 基于wordpress学校网站建筑方案设计收费标准
  • 辽宁鲲鹏建设集团网站手机wap支付
  • 文学网站开发设计报告蓝天下品牌运营业务展示
  • 忻州网络公司网站建设dt模板网
  • 外包网站建设哪家好企业做网站的必要性
  • 网站推广服务费会计分录怎么做做网站哪种编程语言最好
  • 杭州建网站哪家口碑好wordpress卡片阴影
  • 手机移动端网站建设邢台网站建设哪家专业
  • 网站建设后的团队总结wordpress 申请
  • 网站用户体验设计传奇类游戏网站
  • 西宁整站优化电商网站建设收费
  • asp网站开发教程入门上海网站制作公司
  • 实木餐桌椅移动网站建设山西省诚信建设网站
  • 蚂蚁中国网站建设建筑工程包括哪些项目
  • 科技网站建设分析网站建设如何交税
  • 网站首页 关键词兰州建设局网站公告
  • 做公司的网站的需求有哪些内容前端开发常用网站
  • 广州市建设工程招标管理办公室网站高端建筑材料有哪些
  • 网站备案平台的服务简介做的好的电商网站项目
  • 网站建设dw实训总结陕西网站建设设计
  • 无代码快速搭建网站网页制作代码html制作一个网页
  • 网站整体设计流程国际人才网招聘网
  • tp5.1做的网站云南个旧建设局网站
  • 团购网站自个做国内国际新闻最新消息10条
  • 汉阴网站建设电商到底是什么
  • 北京网站建设项目腾讯云服务器12元一年
  • 营销策略从哪几个方面分析seo内容优化方法
  • 一般去哪个网站做写手wordpress图片尺寸