在上次开发的基础上(链接在这里:https://www.cnblogs.com/segho/p/11654719.html)
我们来对用户发送过来的消息进行解析:
需要用到dom4j.jar,自行百度下载资源 我们将xml文件解析文map键值对,
将其直观的反映在console控制台上
WxService中的parseRequest方法代码如下:
1 public static Map<String, String> parseRequest(InputStream is) { 2 Map<String,String> map=new HashMap(); 3 SAXReader reader=new SAXReader(); 4 try { 5 Document document=reader.read(is); 6 Element root=document.getRootElement(); 7 //root如下:[email protected] [Element: <xml attributes: []/>] 8 List<Element> elements=root.elements(); 9 //elements中的内容包括请求道的xml数据包内容 10 for(Element e:elements) { 11 map.put(e.getName(), e.getStringValue()); 12 } 13 } catch (DocumentException e) { 14 // TODO Auto-generated catch block 15 e.printStackTrace(); 16 } 17 return map; 18 } 19 }
?
解析xml数据包我们需要用到SAXReader这个帮助类,所属包为dom4j.jar
/SAXReader中的read方法可以将文件流读取为Document接口类对象 Document是用于文本的容器,用作挥杆文本组件的模型。 该接口的目标是从非常简单的需求(纯文本字段)扩展到复杂的需求(例如,HTML或XML文档)/
我们通过Element定义一个root来获取document.getRootElement中的xml数据(这是root中有所有xml数据包中的内容) 然后通过list集合获取所有xml元素到elements中 通过变量e来get值来获取所有值并将name属性和value属性放入map
由文件流到map对象历程如下:is被SAXReader读取,获得Document对象, 通过Document中document.getRootElementu获取xml数据Element对象element 通过List集合返回文档所有属性对象为elements。 通过便利elements中的属性
weixinServlet代码如下:
1 package servlet; 2 ? 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 import java.util.Map; 6 ? 7 import javax.servlet.ServletException; 8 import javax.servlet.ServletInputStream; 9 import javax.servlet.ServletOutputStream; 10 import javax.servlet.annotation.WebServlet; 11 import javax.servlet.http.HttpServlet; 12 import javax.servlet.http.HttpServletRequest; 13 import javax.servlet.http.HttpServletResponse; 14 ? 15 import service.WxService; 16 ? 17 /** 18 * Servlet implementation class weixinServlet 19 */ 20 @WebServlet("/wx") 21 public class weixinServlet extends HttpServlet { 22 private static final long serialVersionUID = 1L; 23 public weixinServlet() { 24 // TODO Auto-generated constructor stub 25 } 26 ? 27 /** 28 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 29 */ 30 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 31 String signature=request.getParameter("signature"); 32 String timestamp=request.getParameter("timestamp"); 33 String nonce=request.getParameter("nonce"); 34 String echostr=request.getParameter("echostr"); 35 36 if(WxService.check(timestamp,nonce,signature)) { 37 System.out.println("connect success"); 38 PrintWriter out=response.getWriter(); 39 out.print(echostr); 40 out.flush(); 41 out.close(); 42 } 43 else 44 { 45 System.out.println("connect fail"); 46 } 47 } 48 /** 49 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 50 */ 51 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 52 Map<String,String>requestMap=WxService.parseRequest(request.getInputStream()); 53 System.out.println(requestMap); 54 } 55 }
本人也是初次进行微信的java开发,分享一些我正在看的资料希望能帮到想要学习微信开发的小伙伴们
罗召勇java开发:https://www.bilibili.com/video/av35042298
微信开发帮助文档:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html
微信公众号测试号申请入口:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
ps:所有文章用于个人学习,仅代表个人理解。
原文地址:https://www.cnblogs.com/segho/p/11669798.html