微信小程序+java后端整合笔记

简介: 用到的工具和技术. 1.微信web开发工具小程序版 2.Myeclipse 2014 3.WebSocket 4.Maven 3.3.9 5.Tomcat 7 步骤 1.安装配置Maven,使用Myeclipse创建web project 使用Maven项目结构.

用到的工具和技术.

1.微信web开发工具小程序版

2.Myeclipse 2014

3.WebSocket

4.Maven 3.3.9

5.Tomcat 7

步骤

   1.安装配置Maven,使用Myeclipse创建web project 使用Maven项目结构. 具体步骤:点击打开链接

   2.打开微信web开发工具,由于是内部开发测试,故不要填写 appID, 创建新项目,把项目放在Maven项目目录下  src/main/webapp/项目名

   3.创建Websocket 实现握手通信.

以下代码均来自网络资料.

java服务器端:

 

[javascript] view plain copy
  1. package websocketTest;  
  2.   
  3. import java.io.IOException;  
  4. import java.util.concurrent.CopyOnWriteArraySet;  
  5.   
  6. import javax.websocket.*;  
  7. import javax.websocket.server.ServerEndpoint;  
  8.   
  9. /** 
  10.  * @ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端, 
  11.  * 注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端 
  12.  */  
  13. @ServerEndpoint("/websocket")  
  14. public class TestWebSocket {  
  15.     //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。  
  16.     private static int onlineCount = 0;  
  17.   
  18.     //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识  
  19.     private static CopyOnWriteArraySet<TestWebSocket> webSocketSet = new CopyOnWriteArraySet<TestWebSocket>();  
  20.   
  21.     //与某个客户端的连接会话,需要通过它来给客户端发送数据  
  22.     private Session session;  
  23.   
  24.     /** 
  25.      * 连接建立成功调用的方法 
  26.      * @param session  可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据 
  27.      */  
  28.     @OnOpen  
  29.     public void onOpen(Session session){  
  30.         this.session = session;  
  31.         webSocketSet.add(this);     //加入set中  
  32.         addOnlineCount();           //在线数加1  
  33.         System.out.println("有新连接加入!当前在线人数为" + getOnlineCount());  
  34.     }  
  35.   
  36.     /** 
  37.      * 连接关闭调用的方法 
  38.      */  
  39.     @OnClose  
  40.     public void onClose(){  
  41.         webSocketSet.remove(this);  //从set中删除  
  42.         subOnlineCount();           //在线数减1  
  43.         System.out.println("有一连接关闭!当前在线人数为" + getOnlineCount());  
  44.     }  
  45.   
  46.     /** 
  47.      * 收到客户端消息后调用的方法 
  48.      * @param message 客户端发送过来的消息 
  49.      * @param session 可选的参数 
  50.      */  
  51.     @OnMessage  
  52.     public void onMessage(String message, Session session) {  
  53.         System.out.println("来自客户端的消息:" + message);  
  54.         //群发消息  
  55.         for(TestWebSocket item: webSocketSet){  
  56.             try {  
  57.                 item.sendMessage(message);  
  58.             } catch (IOException e) {  
  59.                 e.printStackTrace();  
  60.                 continue;  
  61.             }  
  62.         }  
  63.     }  
  64.   
  65.     /** 
  66.      * 发生错误时调用 
  67.      * @param session 
  68.      * @param error 
  69.      */  
  70.     @OnError  
  71.     public void onError(Session session, Throwable error){  
  72.         System.out.println("发生错误");  
  73.         error.printStackTrace();  
  74.     }  
  75.   
  76.     /** 
  77.      * 这个方法与上面几个方法不一样。没有用注解,是根据自己需要添加的方法。 
  78.      * @param message 
  79.      * @throws IOException 
  80.      */  
  81.     public void sendMessage(String message) throws IOException{  
  82.         this.session.getBasicRemote().sendText(message);  
  83.         //this.session.getAsyncRemote().sendText(message);  
  84.     }  
  85.   
  86.     public static synchronized int getOnlineCount() {  
  87.         return onlineCount;  
  88.     }  
  89.   
  90.     public static synchronized void addOnlineCount() {  
  91.         TestWebSocket.onlineCount++;  
  92.     }  
  93.   
  94.     public static synchronized void subOnlineCount() {  
  95.         TestWebSocket.onlineCount--;  
  96.     }  
  97. }  
[javascript] view plain copy
  1. 微信小程序客户端:  
[javascript] view plain copy
  1.   <pre name="code" class="javascript">var app = getApp()  
  2. Page({  
  3.   onLoad:function(){  
  4.   
  5.     wx.connectSocket({  
  6.       url: "ws://localhost:8080/TestYMG/websocket",  
  7.     })  
  8.     wx.onSocketOpen(function() {  
  9.       console.log('WebSocket连接已经打开!')  
  10.     wx.sendSocketMessage({  
  11.       data: 'HELLO,WORLD'+Math.random()*0XFFFFFF.toString()  
  12.     })  
  13.     });  
  14.    wx.onSocketMessage(function(data) {  
  15.      console.log(data);  
  16.    });</pre><pre name="code" class="javascript">     //监听是否关闭  
  17.    wx.onSocketClose(function() {  
  18.      console.log('WebSocket连接已经关闭!')  
  19.    });  
  20.   },</pre><pre name="code" class="javascript">    //手动关闭连接  
  21.   setclose:function(e){  
  22.     console.log('WebSocket连接正在关闭!')  
  23.     wx.closeSocket();  
  24.   
  25.   }  
  26.   
  27.     
  28. })  
  29. </pre><br>  
  30. <p></p>  
  31. <pre></pre>  
  32. <p></p>  
  33.                       
原文地址http://www.bieryun.com/671.html
相关文章
|
12天前
|
Java
Java基础—笔记—static篇
`static`关键字用于声明静态变量和方法,在类加载时初始化,只有一份共享内存。静态变量可通过类名或对象访问,但推荐使用类名。静态方法无`this`,不能访问实例成员,常用于工具类。静态代码块在类加载时执行一次,用于初始化静态成员。
10 0
|
12天前
|
Java API 索引
Java基础—笔记—String篇
本文介绍了Java中的`String`类、包的管理和API文档的使用。包用于分类管理Java程序,同包下类无需导包,不同包需导入。使用API时,可按类名搜索、查看包、介绍、构造器和方法。方法命名能暗示其功能,注意参数和返回值。`String`创建有两种方式:双引号创建(常量池,共享)和构造器`new`(每次新建对象)。此外,列举了`String`的常用方法,如`length()`、`charAt()`、`equals()`、`substring()`等。
14 0
|
15天前
|
前端开发 小程序 Java
uniapp上传图片 前端以及java后端代码实现
uniapp上传图片 前端以及java后端代码实现
29 0
|
1月前
|
弹性计算 前端开发 小程序
微信小程序上传文件至阿里云OSS直传(java后端签名+前端直传)
当前的通用文件上传方式是通过前端上传到服务器,再由服务器转存至对象存储。这种方式在处理小文件时效率尚可,但大文件上传因受限于服务器带宽,速度较慢。例如,一个100MB的文件在5Mbps带宽的阿里云ECS上上传至服务器需160秒。为解决此问题,可以采用后端签名的方式,使微信小程序直接上传文件到阿里云OSS,绕过服务器中转。具体操作包括在JAVA后端引入相关依赖,生成签名,并在微信小程序前端使用这个签名进行文件上传,注意设置正确的请求头和formData参数。这样能提高大文件上传的速度。
|
4天前
|
小程序 开发者
体验版小程序为何无法访问云端服务器后端接口(请求失败...(已完美解决附加图片))?
体验版小程序为何无法访问云端服务器后端接口(请求失败...(已完美解决附加图片))?
12 0
|
11天前
|
小程序 前端开发 JavaScript
小程序全栈开发:前端与后端的完美结合
【4月更文挑战第12天】本文介绍了小程序全栈开发,涵盖前端和后端的关键点。前端使用WXML和WXSS进行页面结构和样式设计,JavaScript处理逻辑及组件使用;后端采用Node.js等语言处理业务逻辑、数据库设计和API接口开发。前端与后端通过数据交互实现结合,采用前后端分离模式,支持跨平台运行。调试测试后,提交微信审核并上线运营。掌握前端后端结合是小程序成功的关键。
|
12天前
|
Java API
Java基础—笔记—内部类、枚举、泛型篇
本文介绍了Java编程中的内部类、枚举和泛型概念。匿名内部类用于简化类的创建,常作为方法参数,其原理是生成一个隐含的子类。枚举用于表示有限的固定数量的值,常用于系统配置或switch语句中。泛型则用来在编译时增强类型安全性,接收特定数据类型,包括泛型类、泛型接口和泛型方法。
9 0
|
26天前
|
SQL 前端开发 Java
Java后端进阶之路: JavaWeb(四)
Java后端进阶之路: JavaWeb
33 1
|
XML SQL Java
Java后端进阶之路: JavaWeb(三)
Java后端进阶之路: JavaWeb
30 1
|
1月前
|
存储 缓存 监控
微信团队分享:微信后端海量数据查询从1000ms降到100ms的技术实践
针对大数据量带来的查询性能问题,微信团队对数据层查询接口进行了针对性的优化,将平均查询速度从1000ms+优化到了100ms级别。本文为各位分享优化过程,希望对你有用!
32 2

热门文章

最新文章