您的位置:首页 > 移动开发 > 微信开发

零java基础搞定微信Server_2_Servlet基础

2016-09-16 16:06 337 查看
本文作者twowinter,发布于2015年,如今整理重发。

Servlet

1 前言

Servlet是整个javaweb的基石,在微信bluelight的DEMO中,CallbackServlet就是整个web处理的入口,所有的消息都是从这边进入的。

/**
* 微信回调请求处理
*/
public class CallbackServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

private CallbackService service = new CallbackService();

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
try {
// 开发者接入验证
String timestamp = req.getParameter("timestamp");
String nonce = req.getParameter("nonce");
String signature = req.getParameter("signature");
String echostr = req.getParameter("echostr");

if (signature.equals(SHA1.gen(WxConfig.TOKEN, timestamp, nonce))) {
out(echostr, resp);
} else {
out("", resp);
}
} catch (Throwable e) {
e.printStackTrace();
out("", resp);
}
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
try {
// 编码格式
req.setCharacterEncoding("UTF-8");

// 验证签名
String timestamp = req.getParameter("timestamp");
String nonce = req.getParameter("nonce");
String signature = req.getParameter("signature");
if (!signature.equals(SHA1.gen(WxConfig.TOKEN, timestamp, nonce))) {
out("", resp);
return;
}

// 解析xml
Map<String, String> reqMap = parseXml(req.getInputStream());
System.out.println("reqMap=" + reqMap);

// 处理请求
String xmlStr = service.handle(reqMap);

System.out.println("xmlStr=" + xmlStr);

// null 转为空字符串
xmlStr = xmlStr == null ? "" : xmlStr;

out(xmlStr, resp);
} catch (Throwable e) {
e.printStackTrace();
// 异常时响应空串
out("", resp);
}
}
。。。。。。
}


这篇文章还是学习孙鑫《JavaWeb开发详解》,消化理解,提炼出知识要点。

2 Servlet与Tomcat的介绍

在java中,给我们提供了编写服务器拓展功能的技术-Servlet。它是基于java技术的Web组件,运行在服务器端,由Servlet容器所管理,用于生成动态的内容。

常见的Servlet容器是tomcat。

下面是Tomcat服务器接受客户请求并做出响应的图例。



3 Tomcat的安装

tomcat是一个开源的面向java的web服务器,http://tomcat.apache.org/,安装JDK之后,再下载安装添加环境变量JAVA_HOME即可。

启动tomcat后,打开浏览器确认安装完成。



4 Servlet接口

Tomcat提供了Servlet接口供大家编写自己的Servlet,但我们没必要自己造轮子,已经有很多具体的实现类:如公共类GenericServlet,如针对Http协议的HttpServlet。HttpServlet是继承于GenericServlet。

针对HTTP1.1中定义的7种请求方法Get、Post、Head、Put、Delete、Trace和Option,HttpServlet分别提供了7种doXXX()处理方法。

结合微信的例子来看,它就是继承了HttpServlet,内部用了doGet和doPost两个处理。

虚拟目录

在conf/server.xml中可以配置虚拟目录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: