微信公众平台java开发详解(工程代码+解析)

来源:互联网 发布:动态加载数据js 编辑:程序博客网 时间:2024/05/29 07:39

说明:
本次的教程主要是对微信公众平台开发者模式的讲解,网络上很多类似文章,但很多都让初学微信开发的人一头雾水,所以总结自己的微信开发经验,将微信开发的整个过程系统的列出,并对主要代码进行讲解分析,让初学者尽快上手。

在阅读本文之前,应对微信公众平台的官方开发文档有所了解,知道接收和发送的都是xml格式的数据。另外,在做内容回复时用到了图灵机器人的api接口,这是一个自然语言解析的开放平台,可以帮我们解决整个微信开发过程中最困难的问题,此处不多讲,下面会有其详细的调用方式。

抄写代码出现的问题:
1.OutputStream os=response.getOutputStream()这样写是错的,不能转换,但是我看视频里这样写就没错啊,求解答

你在头上导入OutputStream的包就可以了
import java.io.OutputStream;
ServletOutputStream是OutputStream 的子类
我今天也遇到了这个问题 ,解决了 ,因为你先写的response.getOutputStream();所以他会先判断后面的错误,你在写前面的OutputStream的时候他会先报后面的问题 ,让你转换成ServletOutputStream os = response.getOutputStream();

添加jar包的两种方法

1. 手动添加

  1. 在工程下创建一个Folder(目录),叫lib,把dom4j的包复制、粘贴进来。
  2. 右击工程,点击“Build Path” - “Configure Build Path” - “Libraries”,点击“Add JARs”,浏览到工程\lib\dom4j*.jar,“OK”,再“OK”
  3. 然后在.java里import org.dom4j.io.SAXReader;

2. 通过MAVEN添加jar包

带写

通过上述方法,浏览不到新建lib文件夹,Add Extenal jar,可以添加。
作者已经把源码包上传,可直接下载,不用自己再找jar包。

Java中文注释显示乱码

需要设置MyEclipse编码格式(修改成UTF8):
1. windows->Preferences…打开”首选项”对话框, 左侧导航树,导航到general->Workspace,右侧 Text file encoding,选择Other,改变为UTF-8,以后新建立工程其属性对话框中的Text file encoding即为UTF-8。
2. windows->Preferences…打开”首选项”对话框,左侧导航树,导航到general->Content Types,右侧Context Types树,点开Text,选择Java Source File,在下面的Default encoding输入框中输入UTF-8,点Update,则设置Java文件编码为UTF-8。其他java应用开发相关的文件 如:properties、XML等已经由MyEclipse缺省指定,分别为ISO8859-1,UTF-8,如开发中确需改变编码格式则可以在此指 定。
3. 经过上述两步,新建java文件即为UTF-8编码,MyEclipse编译、运行、调试都没问题,但是做RCP应用的Product输 出时、或者插件输出时,则总是出错,要么不能编译通过(输出时要重新compile)、要么输出的插件运行时中文显示乱码。此时需要再RCP应用、或插件 Plugin工程的build.properties中增加一行,javacDefaultEncoding.. = UTF-8。让输出时编译知道java源文件时UTF-8编码。这个设置需要保证所有的java源文件时UTF-8编码格式,如果不全是,可以参考 MyEclipse帮中(Plug-in Development Environment Guide > Reference > Feature and Plug-in Build configuration),建议全部java源文件是UTF-8编码。

搭建服务器

1. 服务器环境搭建
为方便起见,服务器端搭建在新浪SAE,每天10云豆租金(0.1元),省去了环境搭建的问题。

2. 原代码管理代码
SAE支持两种代码上传方式,打包上传和Git。见于Git是目前最强大,方便,流行的开发方式,并且可以用来写书,决定采用Git方式管理代码。
Git托管方有最正宗的GitHub,但是公司网络把22端口关了,同时也上不去GitHub网络。决定使用OSChina码云,功能是一样的,速度更快。
由于Git分布式系统的原理,需要在本地有客户端程序来管理本地仓库,本项目采用msysgit(Windows客户端。)

  1. 在码云创建仓库,步骤不描述。
  2. 使用Git-scm在项目所在文件夹,初始化,使项目新建本地仓库。
  3. 建立SSH
    SSH key 可以让你在你的电脑和 Git @ OSC 之间建立安全的加密连接。

    • 生成key
      $ ssh-keygen -t rsa -C “xxxxx@xxxxx.com”# Creates a new ssh key using the provided email
    • 验证连接成功
      $ ssh -T git@git.oschina.net
      输入yes
      若返回Welcome to Git@OSC, yourname! 则证明添加成功。

实在太沮丧了,git上传代码到码云没问题,上传sae总是报错:

remote: Exporting git code…
remote: Uploading…
—–> Unable to select a buildpack
remote: {“Code”:1,”Error”:”build image failed: exit status 1.”}
remote: 错误:构建镜像失败
remote: error: hook declined to update refs/heads/1
To https://git.sinacloud.com/wechatserver1
! [remote rejected] master -> 1 (hook declined)
error: failed to push some refs to ‘https://git.sinacloud.com/

参考同样帖子,问题也没有解决
http://saebbs.com/forum.php?mod=viewthread&tid=38734

通过再一次创建SAE应用才发现,通过git提交代码,根目录下需要有pom.xml文件。

3. 通过上传包文件管理源代码
sae还可以通过上传源码包的方式,上传源代码。
Eclipse制作war包过程:

  1. 利用Eclipse生成
    file->export->web->war 文件 //该方法没有成功,作者的MyEclipse下没有web选项,不知道是不是因为项目不是web类的。。。带确认。
  2. 工具用不成,原生态jar命令生成
    打开cmd,切换文件的项目根目录下 、
    cd /d e://workspace/wechatserver1
    jar -cvf wechatserver1.war *.*
  3. 坑,第二种方法好像只能添加文件进去,文件夹内容不能添加,不懂啊
    杀手锏
    利用winrar压缩,我们已经说过JAR包与ZIP包主要区别就是JAR包中多一个META-INF的目录,META-INF目录下有一个manifest.mf文件,我们只要建立好相关的目录一压缩就可以了。
    直接利用winrar软件压缩webroot根目录文件,然后修改后缀为war,上传服务器,即可。

4. Iterator(迭代器)的一般用法
  迭代器(Iterator)是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。
  Java中的Iterator功能比较简单,并且只能单向移动:

  1. 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
  2. 使用next()获得序列中的下一个元素。
  3. 使用hasNext()检查序列中是否还有元素。
  4. 使用remove()将迭代器新返回的元素删除。

Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。

迭代器应用:
list l = new ArrayList();
l.add(“aa”);
l.add(“bb”);
l.add(“cc”);
for (Iterator iter = l.iterator(); iter.hasNext();) {
String str = (String)iter.next();
System.out.println(str);
}
/*迭代器用于while循环
Iterator iter = l.iterator();
while(iter.hasNext()){
String str = (String) iter.next();
System.out.println(str);
}
*/

1 0
原创粉丝点击