首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >零java基础搞定微信Server_2_Servlet基础

零java基础搞定微信Server_2_Servlet基础

作者头像
twowinter
发布2020-04-17 11:50:25
发布2020-04-17 11:50:25
4580
举报
文章被收录于专栏:twowintertwowinter

本文作者twowinter,发布于2015年,如今整理重发。

Servlet

1 前言

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

代码语言:javascript
复制
/**
 * 微信回调请求处理
 */
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中可以配置虚拟目录。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Servlet
    • 1 前言
    • 2 Servlet与Tomcat的介绍
    • 3 Tomcat的安装
    • 4 Servlet接口
      • 虚拟目录
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档