零java基础搞定微信Server_2_Servlet基础

本文作者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中可以配置虚拟目录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值