`

发布一个开源的java微信公众号开发MVC框架(jwx)

阅读更多
近期在github上开源了一个Java微信公众号MVC开发框架,地址为:https://github.com/jweixin/jwx
jwx(java微信公众号开发MVC框架)

    jwx是开源的java公众号开发MVC框架,基于spring配置文件和微信消息或事件注解,通过微信上下文处理一个或多个微信公众号服务请求。目的主要有两个,其一生封装微信请求xml消息为java实体对象,将返回对象转换为xml响应消息;其二是封装微信接口为java服务。微信公众号采用web服务作为消息与第三方平台发生交互,数据格式主要是xml和json,普通的web请求响应机制采用xml数据格式交互,微信接口服务采用json数据格式。jwx主要对这两个方面做了封装处理,另外借鉴springmvc的请求处理方式,以WeixinDispatcherServlet类作为消息分发控制器,通过消息组装工厂生成请求消息或事件实体,根据消息或事件类型,在消息策略处理工厂查找处理策略,获取相应的微信处理方法,Servlet获取到处理方法后,请求线程池获取线程调用微信方法,根据微信方法的返回值,生成请求的xml响应。本说明文档将分章节说明jwx框架的特征、快速入门、配置、扩展等各个方面。

一、特征

    消息重排自动处理,提供消息重排缓存接口
    明文/加密模式无感知切换
    常用的微信接口服务封装
    提供线程池执行微信方法,方法调用线程池大小可配置
    长任务消息推送
    通过微信上下文配置支持多个微信公众号处理
    提供统一的异常处理机制
    提供access_token自动更新机制
    请求消息组装
    灵活的响应消息类型

二、快速入门

本章教材提供一个最简单的例子,用户在微信公众号发一条foo的文本请求消息,公众号响应一条bar的文本响应消息。
1、maven配置文件

通过maven生成一个webapp项目,例如项目名为weixin,在maven配置文件pom.xml中添加jwx依赖,jwx的1.0.0jar包已经提交到maven中心仓库,通过中心仓库搜索jwx关键字可以获取jar包依赖配置。

<dependency>
    <groupId>com.github.jweixin</groupId>
    <artifactId>jwx</artifactId>
    <version>1.0.0</version>
</dependency>

2、web.xml文件配置

web.xml是web应用的配置文件,jwx从spring配置文件中获取配置信息,所以必须配置spring上下文环境;另外,需要配置微信消息处理分发Servlet(WeixinDispatcherServlet),用于处理微信送过来的请求消息或事件。jwx对springmvc没有依赖关系,web mvc框架可以根据实际需要配置。

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>weixin</servlet-name>
    <servlet-class>com.github.jweixin.jwx.servlet.WeixinDispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>weixin</servlet-name>
    <url-pattern>/wx/*</url-pattern>
</servlet-mapping>

    load-on-startup表示Servlet在web应用启动阶段加载,数字代表了启动次序,如果项目使用了springmvc框架,可以调整该数字为2,放到springmvc框架后面启动加载,但实际上Servlet的启动次序并没有太大的关系。
    spring配置是jwx必须的,如果没有配置spring上下文,jwx在启动阶段会报错。
    url-pattern模式匹配微信公众号平台服务器配置的URL配置,如果需要处理多个微信公众号,可以配置多个servlet-mapping或者使用路径通配符匹配多个url链接。

3、spring配置文件

spring配置文件applicationContext.xml里面需要配置WeixinConfigurer,这是jwx唯一必须配置项,如果没有配置,启动阶段会报错。

<context:component-scan base-package="com.github.jweixin.jwx.weixin.service" />

<bean class="com.github.jweixin.jwx.config.WeixinConfigurer">
    <property name="packages">
        <list>
            <value>com.telecomjs.yc.controller</value>
        </list>
    </property>
</bean>

    component-scan配置了微信接口服务类,里面包含常用的微信公众号接口服务,例如菜单管理、消息服务、二维码服务、用户管理、微信网页授权、素材管理等服务内容,在web应用控制器类和微信控制器类里面可以通过@Autowired注解来注入服务。本配置并不是必须项。
    WeixinConfigurer是唯一需要配置的部分,packages属性必须配置,里面是微信控制器包路径列表,WeixinDispatcherServlet在启动阶段会扫描包路径及其下面的子包路径,如果类拥有@Weixin注解,则该类会被当作微信控制器类加载到微信上下文。
    除了packages属性是必须配置的,其他配置都有缺省值,包括消息缓存、微信方法线程池的大小、微信方法调用超时阀值等,这部分内容放在配置部分说明了。

4、编写微信控制器类

当配置完上面的3个部分,所有的配置文件就结束了,是不是很简单呢。下面我们只需要写微信控制器类就能让我们的微信公众号活起来了。微信控制器类是用@Weixin注解的普通类,与sprngmvc里面的controller很类似,方法的执行也很类似。我们在com.telecomjs.yc.controller包下建一个java类WeixinController,如下:

package com.telecomjs.yc.controller;

import com.github.jweixin.jwx.context.Weixin;
import com.github.jweixin.jwx.message.annotation.TextMsg;

@Weixin(value="/wx/coreServlet",
   appID="xxx",
   appSecret="xxx",
   encodingAESKey="xxx",
   token="xxx")
public class WeixinController {

    @TextMsg("foo")
    public String foo(){
        return "bar";
    }
}

    @Weixin需要配置value值,这个实际就是微信服务器配置里面URL最后的部分,当然不包含域名和web应用的上下文,切记,不能包含web应用上下文,其他4个部分配置内容也是公众号配置内容,我们只需要登录到公众号看下填进去就行了。如果没有配置encodingAESKey,那么是不能处理加密消息的,如果有log4j的配置文件,启动阶段会给出告警信息的。

    同一个公众号可以配置多个@Weixin注解控制器类,其中只需要一个有其他4项配置就可以了,如果多个控制器类配置了其他4个配置项,如果相对应的配置项值不相同,启动阶段会报错。

    不同微信公众号是通过@Weixin的value值区分的,该值同时是微信上下文的查找关键字。

    foo方法上面有@TextMsg注解,是定义的微信方法,在Servlet启动时通过包扫描加载到微信上下文对象中。jwx针对微信消息或事件类型设计了一组微信注解,基本涵盖了微信公众号定义的消息和事件类型。

    @TextMsg是文本消息注解,代表请求类型的是文本消息,value值是发送的文本消息内容。处理文本适配模式,@TextMsg还支持正则表达式适配模式,这部分内容在配置部分说明。

    本例中微信方法并没有设置参数,实际可以灵活设置参数,例如我们可以在方法中设置HttpServletRequest request,HttpServletResponse response,InMessage in, WeixinContext context等参数,这部分内容也放在配置部分说明。

    本例中方法的返回类型是String,代表响应的消息内容是文本消息,jwx提供了丰富的返回值类型,这部分内容会在配置部分详细说明。
    5、启动web应用

    上面就是这个最简单例子的全部内容,让我们启动web应用,进入到我们的公众号,输入foo文本提交,看看返回的是不是bar这个内容了,如果是,恭喜你,你已经初步掌握了jwx的使用方法。下面更多的内容等着你呢!
分享到:
评论

相关推荐

    java微信公众号MVC开发框架

    jwx是开源的java公众号开发MVC框架,基于spring配置文件和微信消息或事件注解,通过微信上下文处理一个或多个微信公众号服务请求。目的主要有两个,其一生封装微信请求xml消息为java实体对象,将返回对象转换为xml...

    jwx! - wxWidgets for Java-开源

    `jwx` 是一个基于 Java 的开源项目,它为 Java 开发者提供了对 `wxWidgets` GUI 工具箱的访问和使用。`wxWidgets` 是一个跨平台的 C++ 库,它允许开发者使用单一的代码库创建原生外观的应用程序,支持 Windows、...

    jwx_for_project

    注册页面sys_path路径添加 从static复制register.html 到...在 user/vies.py 写视图 from django.shortcuts import render # user/register def register(request): ... return render(request,' 在user/url.py 配置地址

    webService五个实现方式

    通常,这种实现可能是一个基于Java的轻量级框架,用于创建和消费Web服务,它可能强调简单性和易用性,以便开发者能快速地构建Web服务解决方案。 4. **JDK原生支持**: Java SE 5及更高版本开始,JDK本身就包含了对...

    jwx:各种JWx(Javascript对象签名和加密)技术的实现

    我的目标是编写一个大量使用JWK和JWT的服务器。 乍一看,已经存在的库似乎足够了,但是不久我意识到为了完全实现协议,我需要整个JWT,JWK,JWS,JWE(必要时还有JWA)。 现有的大多数库仅处理实现其特定需求所必需...

    jwx0925.github.com:我的博客

    该存储库跟踪 2 个项目: Jekyll-Bootstrap 框架。 用户应该在其上克隆和构建博客的框架在 master 分支中可用。 要为框架做出贡献,请确保根据jb-development检查您的分支! 这非常重要,因为它允许我接受您的拉取...

    由 PostgreSQL 支持的带有 JWT 身份验证的 Go RESTful API 样板.zip

    这个锅炉的目标是拥有一个坚固且结构化的基础。欢迎并高度赞赏任何反馈和请求。欢迎随意打开问题以进行评论和讨论。特征以下功能集是典型 Web API 要求的最小选择使用viper进行配置使用cobra 的CLI 功能PostgreSQL ...

    随机信号分析基础课件:1_6 随机变量的特征函数.ppt

    随机信号分析的基础中,特征函数是一个非常重要的概念,它在概率论和统计学中用于描述随机变量的特性。特征函数不仅能够捕捉随机变量的概率分布的关键信息,还与随机变量的各种统计性质有着紧密的联系。 首先,特征...

    TW-2自动化驼峰施工室内模拟调试方法.pdf

    对于TW-2型驼峰自动化控制系统而言,室内模拟调试作为其开发和维护过程中的一个重要环节,对于保障系统功能的正确性和稳定性具有不可忽视的作用。在不借助实际室外设备的情况下,如何通过模拟条件对室内设备进行精确...

    JewelCAD.Pro.v2.2.2.Bilingual.part2

    JewelCAD Pro 是JewelCAD 的第二代最新软件,拥有全新开发程式核心,大大增强日后革新速度及扩充能力,包含更丰富、强大、实用的软件功能。现有JewelCAD 数据档可输入JewelCAD Pro 继续运作。 维持原有JewelCAD ...

    JewelCAD.Pro.v2.2.2.Bilingual.part1

    JewelCAD Pro 是JewelCAD 的第二代最新软件,拥有全新开发程式核心,大大增强日后革新速度及扩充能力,包含更丰富、强大、实用的软件功能。现有JewelCAD 数据档可输入JewelCAD Pro 继续运作。 维持原有JewelCAD ...

    MagicISO Maker(镜像编辑工具) V5.502绿色中文版

    Magic ISO Maker 是一个功能非常强大而且非常容易使用的CD/DVD镜像文件编辑工具,程序可以帮助你快速的创建,编辑,释放ISO光盘镜像文件,可以帮助你将光盘或者硬盘上面的文件直接制作为ISO光盘镜像文件,可直接创建可...

    三角网格化

    GTK,全称GIMP Toolkit,是一个用于创建图形用户界面的开源库,支持多种操作系统,如Unix、Linux、Windows等。它提供了丰富的控件和布局管理器,使得开发者可以方便地构建交互式的图形界面。 程序还引用了"unix ...

    云学习资料文件

    - **Nginx Module**:Nginx模块中的多个过滤模块可以构成一个链表结构,顺序触发,以处理不同的请求过滤和数据处理逻辑(选项B)。 - **带宽与延迟**:题目中提到的“带宽越大,延迟越小”的观点并不完全正确(选项...

    Jewelcad v5.19

    JewelCAD Pro 是JewelCAD 的第二代最新软件,拥有全新开发程式核心,大大增强日后革新速度及扩充能力,包含更丰富、强大、实用的软件功能。现有JewelCAD 数据档可输入JewelCAD Pro 继续运作。 维持原有JewelCAD ...

    matlab三维网格化图像源码

    在描述中提到的“物体三维框架的搭建”,这可能指的是构建三维模型的骨架,即通过分析点云数据,找出其中的线性和曲线特征,形成一个支撑整个模型的骨架结构。这通常需要对点云数据进行聚类、边缘检测和骨架提取等...

    操作Excel工具类,导出Excel方法,读取Excel中的数据

    操作Excel工具类,导出Excel方法,读取Excel中的数据,导入导出采用excel2003 版本

    JewelCAD 5.19

    JewelCAD 5.19,一款专用于珠宝首饰起版设计的软件, JewelCAD Pro专业级别的珠宝设计软件,JewelCAD Pro中文版可输出大部份快速成型机可接受的切片式SLC及stl文件格式,广泛应用於CNC机器制造,Roland JWX-10 珠宝...

    JSBXC-850型半导体时间继电器电路故障分析与处理.pdf

    JSBXC-850型半导体时间继电器的结构由时间控制单元和JWX C-370/480型无极继电器组成,时间控制单元安装在印制电路板上,位于继电器上方,这种设计虽然提高了继电器的集成度,但也使得其检修工作变得更加复杂。...

    jwtauth:用于Go HTTP服务的JWT身份验证中间件

    jwtauth-HTTP服务的JWT身份验证中间件 jwtauth http中间件软件包提供了一种简单的方法来验证来自http请求的JWT令牌,并将结果发送到请求上下文( context.Context )。 请注意, jwtauth可与任何Go http路由器一起...

Global site tag (gtag.js) - Google Analytics