欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java微信開發(fā)第二步 獲取消息和回復(fù)消息

 更新時間:2016年05月18日 15:59:34   作者:剩菜剩飯  
這篇文章主要為大家分享java微信開發(fā)的第二步,如何獲取消息和回復(fù)消息,感興趣的小伙伴們可以參考一下

接著上一篇java微信開發(fā)API第一步 服務(wù)器接入進行學(xué)習(xí),下面介紹java微信開發(fā)第二步:獲取消息和回復(fù)消息,具體內(nèi)容如下

* 本示例根據(jù)微信開發(fā)文檔:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/2016 5:34:36 PM )進行開發(fā)演示。
* 編輯平臺:myeclipse10.7+win32+jdk1.7+tomcat7.0 
* 服務(wù)器:阿里云 windows server 2008 64bits
* 平臺要求:servlet使用注解方式,平臺要求:j2ee6.0+、jdk6.0+、tomcat7.0+
* 演示更加注重于api解析。
* 為了便于測試說明,每個測試用例為獨立,不依賴于其它方法。對于封裝,不多加考慮。
* 演示盡可能按照API要求進行,目的:了解文檔使用方式,達到舉一反三的效果。
* 知識要求:牢固的java基礎(chǔ)、了解http網(wǎng)絡(luò)通信知識、對于javaweb有足夠了解、json解析
* 在每篇文章結(jié)束會給出該部分演示源碼。在分析完API之后,會以源碼包的形式給出所有演示源碼。
* 當前時間:4/3/2016 5:32:57 PM ,以該時間為準。

一、文檔原文-消息管理(摘要)

文檔地址:http://mp.weixin.qq.com/wiki/17/f298879f8fb29ab98b2f2971d42552fd.html
消息管理
接收消息-接收普通消息
接收消息-接收事件推送
發(fā)送消息-被動回復(fù)消息
發(fā)送消息-被動回復(fù)時的加解密
發(fā)送消息-客服消息
發(fā)送消息-群發(fā)接口
發(fā)送消息-模板消息接口
發(fā)送消息-模板消息運營規(guī)范
獲取公眾號自動回復(fù)配置

二、文檔理解

1、接收消息

文檔這樣解釋:​當普通微信用戶向公眾賬號發(fā)消息時,微信服務(wù)器將POST消息的XML數(shù)據(jù)包到開發(fā)者填寫的URL上。
理解:微信服務(wù)器將用戶發(fā)送的消息通過Post流的形式返回給req。當我們想要獲取用戶發(fā)送的消息時,可以通過req.getInputStream()獲取。當然,我們可以根據(jù)文檔上關(guān)于消息的返回的xml格式,進行必要的解析。
實現(xiàn):

/*
 * 該部分我們獲取用戶發(fā)送的信息,并且解析成<K,V>的形式進行顯示
 */
// 解析用戶發(fā)送過來的信息
InputStream is = req.getInputStream();// 拿取請求流
// 將解析結(jié)果存儲在HashMap中
Map<String, String> map = new HashMap<String, String>();
// 解析xml,將獲取到的返回結(jié)果xml進行解析成我們習(xí)慣的文字信息
SAXReader reader = new SAXReader();// 第三方j(luò)ar:dom4j【百度:saxreader解析xml】
Document document = null;
try {
 document = reader.read(is);
} catch (DocumentException e1) {
 // TODO Auto-generated catch block
 e1.printStackTrace();
}
// 得到xml根元素
Element root = document.getRootElement();
// 得到根元素的所有子節(jié)點
List<Element> elementList = root.elements();

// 遍歷所有子節(jié)點
for (Element e : elementList)
 map.put(e.getName(), e.getText());

// 測試輸出
Set<String> keySet = map.keySet();
// 測試輸出解析后用戶發(fā)過來的信息
System.out.println(TAG + ":解析用戶發(fā)送過來的信息開始");
for (String key : keySet) {
 System.out.println(key + ":" + map.get(key));
}
System.out.println(TAG + ":解析用戶發(fā)送過來的信息結(jié)束");  

2、發(fā)送消息

文檔這樣解釋:​當用戶發(fā)送消息給公眾號時(或某些特定的用戶操作引發(fā)的事件推送時),會產(chǎn)生一個POST請求,開發(fā)者可以在響應(yīng)包(Get)中返回特定XML結(jié)構(gòu),來對該消息進行響應(yīng)(現(xiàn)支持回復(fù)文本、圖片、圖文、語音、視頻、音樂)。嚴格來說,發(fā)送被動響應(yīng)消息其實并不是一種接口,而是對微信服務(wù)器發(fā)過來消息的一次回復(fù)。
理解:用戶發(fā)送請求,會產(chǎn)生一個POST請求,我們可以通過Respone進行回復(fù)消息。但是,回復(fù)的內(nèi)容有嚴格的格式要求,只有滿足格式要求,微信服務(wù)器才會進行處理返回給用戶。通過查看文檔“消息管理”模塊,我們可以看到微信中有各種各樣的消息,每類消息都有自己特定的格式要求,我們必須按照要求才可以正常的給用戶返回特定的信息。我們嘗試按照文檔的要求格式給用戶回復(fù)文本信息、圖文消息。重點:按照文檔要求構(gòu)造需要的參數(shù)。特別注意:參數(shù)區(qū)分大小寫。
1)、實現(xiàn)1-回復(fù)普通文本消息:

//實例1:發(fā)送普通文本消息,請查看文檔關(guān)于“回復(fù)文本消息”的xml格式

// 第一步:按照回復(fù)文本信息構(gòu)造需要的參數(shù)
TextMsg textMsg = new TextMsg();
textMsg.setToUserName(map.get("FromUserName"));// 發(fā)送和接收信息“User”剛好相反
textMsg.setFromUserName(map.get("ToUserName"));
textMsg.setCreateTime(new Date().getTime());// 消息創(chuàng)建時間 (整型)
textMsg.setMsgType("text");// 文本類型消息
textMsg.setContent("我是服務(wù)器回復(fù)給用戶的信息");

// // 第二步,將構(gòu)造的信息轉(zhuǎn)化為微信識別的xml格式【百度:xstream bean轉(zhuǎn)xml】
XStream xStream = new XStream();
xStream.alias("xml", textMsg.getClass());
String textMsg2Xml = xStream.toXML(textMsg);
System.out.println(textMsg2Xml);

// // 第三步,發(fā)送xml的格式信息給微信服務(wù)器,服務(wù)器轉(zhuǎn)發(fā)給用戶
PrintWriter printWriter = resp.getWriter();
printWriter.print(textMsg2Xml);

2)、實現(xiàn)2-回復(fù)圖文消息:

//實例2,發(fā)送圖文消息。請查看文檔關(guān)于“回復(fù)圖文消息”的xml格式

// 第一步:按照回復(fù)圖文信息構(gòu)造需要的參數(shù)
List<Article> articles = new ArrayList<Article>();
Article a = new Article();
a.setTitle("我是圖片標題");
a.setUrl("www.baidu.com");// 該地址是點擊圖片跳轉(zhuǎn)后
a.setPicUrl("http://b.hiphotos.baidu.com/image/pic/item/08f790529822720ea5d058ba7ccb0a46f21fab50.jpg");// 該地址是一個有效的圖片地址
a.setDescription("我是圖片的描述");
articles.add(a);
PicAndTextMsg picAndTextMsg = new PicAndTextMsg();
picAndTextMsg.setToUserName(map.get("FromUserName"));// 發(fā)送和接收信息“User”剛好相反
picAndTextMsg.setFromUserName(map.get("ToUserName"));
picAndTextMsg.setCreateTime(new Date().getTime());// 消息創(chuàng)建時間 (整型)
picAndTextMsg.setMsgType("news");// 圖文類型消息
picAndTextMsg.setArticleCount(1);
picAndTextMsg.setArticles(articles);
// 第二步,將構(gòu)造的信息轉(zhuǎn)化為微信識別的xml格式【百度:xstream bean轉(zhuǎn)xml】
XStream xStream = new XStream();
xStream.alias("xml", picAndTextMsg.getClass());
xStream.alias("item", a.getClass());
String picAndTextMsg2Xml = xStream.toXML(picAndTextMsg);
System.out.println(picAndTextMsg2Xml);
// 第三步,發(fā)送xml的格式信息給微信服務(wù)器,服務(wù)器轉(zhuǎn)發(fā)給用戶
PrintWriter printWriter = resp.getWriter();
printWriter.print(picAndTextMsg2Xml);

該部分所有操作源碼,可以直接使用

CoreServlet.java(包括服務(wù)器接入、接收用戶發(fā)送消息、回復(fù)普通文字消息、回復(fù)圖文消息。需要第三方j(luò)ar:dom4j、xstream)

package com.gist.servlet;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import com.gist.bean.Article;
import com.gist.bean.PicAndTextMsg;
import com.thoughtworks.xstream.XStream;

/**
 * @author 高遠</n> 郵箱:wgyscsf@163.com</n> 博客 http://blog.csdn.net/wgyscsf</n>
 *   編寫時期 2016-4-3 下午4:34:05
 */
@WebServlet("/CoreServlet")
public class CoreServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
 String TAG = "CoreServlet";

 /*
  * 第二步:驗證服務(wù)器地址的有效性 開發(fā)者提交信息后,微信服務(wù)器將發(fā)送GET請求到填寫的服務(wù)器地址URL上,
  * GET請求攜帶四個參數(shù):signature、timestamp、nonce、echostr
  * 開發(fā)者通過檢驗signature對請求進行校驗(下面有校驗方式)。 若確認此次GET請求來自微信服務(wù)器,請原樣返回echostr參數(shù)內(nèi)容,
  * 則接入生效, 成為開發(fā)者成功,否則接入失敗。
  * 
  * 加密/校驗流程如下: 1. 將token、timestamp、nonce三個參數(shù)進行字典序排序 2.
  * 將三個參數(shù)字符串拼接成一個字符串進行sha1加密 3. 開發(fā)者獲得加密后的字符串可與signature對比,標識該請求來源于微信
  */
 /*
  * 字典排序(lexicographical
  * order)是一種對于隨機變量形成序列的排序方法。其方法是,按照字母順序,或者數(shù)字小大順序,由小到大的形成序列。
  */
 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {

  // 設(shè)置編碼
  req.setCharacterEncoding("utf-8");
  resp.setContentType("html/text;charset=utf-8");
  resp.setCharacterEncoding("utf-8");
  // 獲取輸出流
  PrintWriter printWriter = resp.getWriter();

  // 設(shè)置一個全局的token,開發(fā)者自己設(shè)置。api這樣解釋:Token可由開發(fā)者可以任意填寫,
  // 用作生成簽名(該Token會和接口URL中包含的Token進行比對,從而驗證安全性)
  String token = "wgyscsf";
  // 根據(jù)api說明,獲取上述四個參數(shù)
  String signature = req.getParameter("signature");
  String timestamp = req.getParameter("timestamp");
  String nonce = req.getParameter("nonce");
  String echostr = req.getParameter("echostr");
  // // temp:臨時打印,觀看返回參數(shù)情況
  // System.out.println(TAG + ":signature:" + signature + ",timestamp:"
  // + timestamp + ",nonce:" + nonce + ",echostr:" + echostr);
  // 根據(jù)api所說的“加密/校驗流程”進行接入。共計三步

  // 第一步:將token、timestamp、nonce三個參數(shù)進行字典序排序
  String[] parms = new String[] { token, timestamp, nonce };// 將需要字典序排列的字符串放到數(shù)組中
  Arrays.sort(parms);// 按照api要求進行字典序排序
  // 第二步:將三個參數(shù)字符串拼接成一個字符串進行sha1加密
  // 拼接字符串
  String parmsString = "";// 注意,此處不能=null。
  for (int i = 0; i < parms.length; i++) {
   parmsString += parms[i];
  }
  // sha1加密
  String mParms = null;// 加密后的結(jié)果
  MessageDigest digest = null;
  try {
   digest = java.security.MessageDigest.getInstance("SHA");
  } catch (NoSuchAlgorithmException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  digest.update(parmsString.getBytes());
  byte messageDigest[] = digest.digest();
  // Create Hex String
  StringBuffer hexString = new StringBuffer();
  // 字節(jié)數(shù)組轉(zhuǎn)換為 十六進制 數(shù)
  for (int i = 0; i < messageDigest.length; i++) {
   String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
   if (shaHex.length() < 2) {
    hexString.append(0);
   }
   hexString.append(shaHex);
  }
  mParms = hexString.toString();// 加密結(jié)果

  /*
   * api要求: 若確認此次GET請求來自微信服務(wù)器,請原樣返回echostr參數(shù)內(nèi)容, 則接入生效, 成為開發(fā)者成功,否則接入失敗。
   */
  // 第三步: 開發(fā)者獲得加密后的字符串可與signature對比,標識該請求來源于微信接入成功。
  // System.out.println(TAG + ":" + mParms + "---->" + signature);
  if (mParms.equals(signature)) {
   // System.out.println(TAG + ":" + mParms + "---->" + signature);
   printWriter.write(echostr);
  } else {
   // 接入失敗,不用回寫
   // System.out.println(TAG + "接入失敗");
  }
 }

 /*
  * 查看api文檔關(guān)于收發(fā)消息推送的消息格式基本一致。 如以下格式: <xml>
  * <ToUserName><![CDATA[toUser]]></ToUserName>
  * <FromUserName><![CDATA[fromUser]]></FromUserName>
  * <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType>
  * <Content><![CDATA[this is a test]]></Content>
  * <MsgId>1234567890123456</MsgId> </xml> 那么,我們就可以進行統(tǒng)一處理。
  */
 /*
  * 我們先獲取輸入流,看輸入流里面的信息。通過測試打印輸出流,我們可以看到每次用戶請求,都會收到req請求,請求格式是xml格式,該信息在文檔中有說明。
  */
 /*
  * 特別注意,req.getInputStream()只能獲取一次,并且只能讀取一次。如果想要多次讀取,需要另外想辦法。為了簡單起見,
  * 我們只獲取一次req.getInputStream(),不再打印輸出流信息。直接打印解析后的信息。
  */
 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  // 設(shè)置編碼
  req.setCharacterEncoding("utf-8");
  resp.setContentType("html/text;charset=utf-8");
  resp.setCharacterEncoding("utf-8");

  /*
   * 該部分我們獲取用戶發(fā)送的信息,并且解析成<K,V>的形式進行顯示
   */
  // 解析用戶發(fā)送過來的信息
  InputStream is = req.getInputStream();// 拿取請求流
  // 將解析結(jié)果存儲在HashMap中
  Map<String, String> map = new HashMap<String, String>();
  // 解析xml,將獲取到的返回結(jié)果xml進行解析成我們習(xí)慣的文字信息
  SAXReader reader = new SAXReader();// 第三方j(luò)ar:dom4j【百度:saxreader解析xml】
  Document document = null;
  try {
   document = reader.read(is);
  } catch (DocumentException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  }
  // 得到xml根元素
  Element root = document.getRootElement();
  // 得到根元素的所有子節(jié)點
  List<Element> elementList = root.elements();

  // 遍歷所有子節(jié)點
  for (Element e : elementList)
   map.put(e.getName(), e.getText());

  // 測試輸出
  Set<String> keySet = map.keySet();
  // 測試輸出解析后用戶發(fā)過來的信息
  System.out.println(TAG + ":解析用戶發(fā)送過來的信息開始");
  for (String key : keySet) {
   System.out.println(key + ":" + map.get(key));
  }
  System.out.println(TAG + ":解析用戶發(fā)送過來的信息結(jié)束");

  /*
   * 該部分我們嘗試按照文檔的要求格式給用戶回復(fù)文本信息、圖文消息。重點:按照文檔要求構(gòu)造需要的參數(shù)。特別注意:參數(shù)區(qū)分大小寫。
   */

  // //實例1:發(fā)送普通文本消息,請查看文檔關(guān)于“回復(fù)文本消息”的xml格式
  //
  // // 第一步:按照回復(fù)文本信息構(gòu)造需要的參數(shù)
  // TextMsg textMsg = new TextMsg();
  // textMsg.setToUserName(map.get("FromUserName"));// 發(fā)送和接收信息“User”剛好相反
  // textMsg.setFromUserName(map.get("ToUserName"));
  // textMsg.setCreateTime(new Date().getTime());// 消息創(chuàng)建時間 (整型)
  // textMsg.setMsgType("text");// 文本類型消息
  // textMsg.setContent("我是服務(wù)器回復(fù)給用戶的信息");
  //
  // // // 第二步,將構(gòu)造的信息轉(zhuǎn)化為微信識別的xml格式【百度:xstream bean轉(zhuǎn)xml】
  // XStream xStream = new XStream();
  // xStream.alias("xml", textMsg.getClass());
  // String textMsg2Xml = xStream.toXML(textMsg);
  // System.out.println(textMsg2Xml);
  //
  // // // 第三步,發(fā)送xml的格式信息給微信服務(wù)器,服務(wù)器轉(zhuǎn)發(fā)給用戶
  // PrintWriter printWriter = resp.getWriter();
  // printWriter.print(textMsg2Xml);

  // //實例2,發(fā)送圖文消息。請查看文檔關(guān)于“回復(fù)圖文消息”的xml格式

  // 第一步:按照回復(fù)圖文信息構(gòu)造需要的參數(shù)
  List<Article> articles = new ArrayList<Article>();
  Article a = new Article();
  a.setTitle("我是圖片標題");
  a.setUrl("www.baidu.com");// 該地址是點擊圖片跳轉(zhuǎn)后
  a.setPicUrl("http://b.hiphotos.baidu.com/image/pic/item/08f790529822720ea5d058ba7ccb0a46f21fab50.jpg");// 該地址是一個有效的圖片地址
  a.setDescription("我是圖片的描述");
  articles.add(a);
  PicAndTextMsg picAndTextMsg = new PicAndTextMsg();
  picAndTextMsg.setToUserName(map.get("FromUserName"));// 發(fā)送和接收信息“User”剛好相反
  picAndTextMsg.setFromUserName(map.get("ToUserName"));
  picAndTextMsg.setCreateTime(new Date().getTime());// 消息創(chuàng)建時間 (整型)
  picAndTextMsg.setMsgType("news");// 圖文類型消息
  picAndTextMsg.setArticleCount(1);
  picAndTextMsg.setArticles(articles);
  // 第二步,將構(gòu)造的信息轉(zhuǎn)化為微信識別的xml格式【百度:xstream bean轉(zhuǎn)xml】
  XStream xStream = new XStream();
  xStream.alias("xml", picAndTextMsg.getClass());
  xStream.alias("item", a.getClass());
  String picAndTextMsg2Xml = xStream.toXML(picAndTextMsg);
  System.out.println(picAndTextMsg2Xml);
  // 第三步,發(fā)送xml的格式信息給微信服務(wù)器,服務(wù)器轉(zhuǎn)發(fā)給用戶
  PrintWriter printWriter = resp.getWriter();
  printWriter.print(picAndTextMsg2Xml);
 }
}

TestMsg.java(普通文字消息bean)

package com.gist.bean;

/**
 * @author 高遠</n> 郵箱:wgyscsf@163.com</n> 博客 http://blog.csdn.net/wgyscsf</n>
 *   編寫時期 2016-4-4 下午2:09:27
 */
public class TextMsg {
 private String ToUserName;
 private String FromUserName;
 private long CreateTime;
 private String MsgType;

 @Override
 public String toString() {
  return "TextMsg [ToUserName=" + ToUserName + ", FromUserName="
    + FromUserName + ", CreateTime=" + CreateTime + ", MsgType="
    + MsgType + ", Content=" + Content + "]";
 }

 private String Content;

 public TextMsg(String toUserName, String fromUserName, long createTime,
   String msgType, String content) {
  super();
  ToUserName = toUserName;
  FromUserName = fromUserName;
  CreateTime = createTime;
  MsgType = msgType;
  Content = content;
 }

 public TextMsg() {
  super();
 }

 public String getToUserName() {
  return ToUserName;
 }

 public void setToUserName(String toUserName) {
  ToUserName = toUserName;
 }

 public String getFromUserName() {
  return FromUserName;
 }

 public void setFromUserName(String fromUserName) {
  FromUserName = fromUserName;
 }

 public long getCreateTime() {
  return CreateTime;
 }

 public void setCreateTime(long createTime) {
  CreateTime = createTime;
 }

 public String getMsgType() {
  return MsgType;
 }

 public void setMsgType(String msgType) {
  MsgType = msgType;
 }

 public String getContent() {
  return Content;
 }

 public void setContent(String content) {
  Content = content;
 }
}

Article.java(圖文消息內(nèi)部Article bean)

package com.gist.bean;

/**
 * @author 高遠</n> 郵箱:wgyscsf@163.com</n> 博客 http://blog.csdn.net/wgyscsf</n>
 *   編寫時期 2016-4-4 下午2:47:08
 */
public class Article {
 private String Title;

 @Override
 public String toString() {
  return "item [Title=" + Title + ", Description=" + Description
    + ", PicUrl=" + PicUrl + ", Url=" + Url + "]";
 }

 public String getTitle() {
  return Title;
 }

 public void setTitle(String title) {
  Title = title;
 }

 public String getDescription() {
  return Description;
 }

 public void setDescription(String description) {
  Description = description;
 }

 public String getPicUrl() {
  return PicUrl;
 }

 public void setPicUrl(String picUrl) {
  PicUrl = picUrl;
 }

 public String getUrl() {
  return Url;
 }

 public void setUrl(String url) {
  Url = url;
 }

 private String Description;
 private String PicUrl;
 private String Url;

}

PicAndTextMsg.java(圖文消息 bean)

package com.gist.bean;

import java.util.List;

/**
 * @author 高遠</n> 郵箱:wgyscsf@163.com</n> 博客 http://blog.csdn.net/wgyscsf</n>
 *   編寫時期 2016-4-4 下午2:47:08
 */
public class PicAndTextMsg {
 private String ToUserName;
 private String FromUserName;
 private long CreateTime;
 private String MsgType;
 private int ArticleCount;
 private List<Article> Articles;

 @Override
 public String toString() {
  return "PicAndTextMsg [ToUserName=" + ToUserName + ", FromUserName="
    + FromUserName + ", CreateTime=" + CreateTime + ", MsgType="
    + MsgType + ", ArticleCount=" + ArticleCount + ", Articles="
    + Articles + "]";
 }

 public String getToUserName() {
  return ToUserName;
 }

 public void setToUserName(String toUserName) {
  ToUserName = toUserName;
 }

 public String getFromUserName() {
  return FromUserName;
 }

 public void setFromUserName(String fromUserName) {
  FromUserName = fromUserName;
 }

 public long getCreateTime() {
  return CreateTime;
 }

 public void setCreateTime(long createTime) {
  CreateTime = createTime;
 }

 public String getMsgType() {
  return MsgType;
 }

 public void setMsgType(String msgType) {
  MsgType = msgType;
 }

 public int getArticleCount() {
  return ArticleCount;
 }

 public void setArticleCount(int articleCount) {
  ArticleCount = articleCount;
 }

 public List<Article> getArticles() {
  return Articles;
 }

 public void setArticles(List<Article> articles) {
  Articles = articles;
 }

}

更多精彩內(nèi)容請點擊《Android微信開發(fā)教程匯總》,《java微信開發(fā)教程匯總》歡迎大家學(xué)習(xí)閱讀。

以上就是本文的全部內(nèi)容,希望對大家學(xué)習(xí)開java微信API有所幫助,也希望大家繼續(xù)關(guān)注新內(nèi)容的更新,不要錯過哦!

相關(guān)文章

  • spring boot整合spring-kafka實現(xiàn)發(fā)送接收消息實例代碼

    spring boot整合spring-kafka實現(xiàn)發(fā)送接收消息實例代碼

    這篇文章主要給大家介紹了關(guān)于spring-boot整合spring-kafka實現(xiàn)發(fā)送接收消息的相關(guān)資料,文中介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編一起來看看吧。
    2017-06-06
  • Java創(chuàng)建線程池為什么一定要用ThreadPoolExecutor

    Java創(chuàng)建線程池為什么一定要用ThreadPoolExecutor

    本文介紹了Java創(chuàng)建線程池為什么一定要用ThreadPoolExecutor,手動方式使用ThreadPoolExecutor創(chuàng)建線程池和使用Executors執(zhí)行器自動創(chuàng)建線程池,下文更多相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-05-05
  • Java.SE數(shù)組的一些常見練習(xí)題

    Java.SE數(shù)組的一些常見練習(xí)題

    數(shù)組可以看成是相同類型元素的一個集合,在內(nèi)存中是一段連續(xù)的空間,這篇文章主要給大家介紹了關(guān)于Java.SE數(shù)組的一些常見練習(xí)題,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-02-02
  • spring?Cloud微服務(wù)阿里開源TTL身份信息的線程間復(fù)用

    spring?Cloud微服務(wù)阿里開源TTL身份信息的線程間復(fù)用

    這篇文章主要為大家介紹了spring?Cloud微服務(wù)中使用阿里開源TTL身份信息的線程間復(fù)用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 詳解Java中的迭代迭代器Iterator與枚舉器Enumeration

    詳解Java中的迭代迭代器Iterator與枚舉器Enumeration

    Iterator與Enumeration分別是實現(xiàn)迭代器和枚舉器類的接口,下面就帶大家來詳解Java中的迭代迭代器Iterator與枚舉器Enumeration,以及它們之間的區(qū)別.
    2016-05-05
  • Spring?Boot?如何正確讀取配置文件屬性

    Spring?Boot?如何正確讀取配置文件屬性

    這篇文章主要介紹了Spring?Boot?如何正確讀取配置文件屬性,項目中經(jīng)常會經(jīng)常讀取配置文件中的屬性的值,Spring?Boot提供了很多注解讀取配置文件屬性,那么如何正確使用呢,下文一起來參考下面文章內(nèi)容吧
    2022-04-04
  • SSH結(jié)合jquery實現(xiàn)三級聯(lián)動效果

    SSH結(jié)合jquery實現(xiàn)三級聯(lián)動效果

    這篇文章主要為大家詳細介紹了SSH結(jié)合jquery實現(xiàn)三級聯(lián)動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • JVM工作原理和工作流程簡述

    JVM工作原理和工作流程簡述

    這篇文章主要介紹了關(guān)于JVM工作原理簡述,主要弄清楚jvm運行的來龍去脈,感興趣的可以一起來了解一下
    2020-07-07
  • 使用Filter實現(xiàn)登錄權(quán)限驗證

    使用Filter實現(xiàn)登錄權(quán)限驗證

    這篇文章主要為大家詳細介紹了使用Filter實現(xiàn)登錄權(quán)限驗證,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • HttpClient基礎(chǔ)解析

    HttpClient基礎(chǔ)解析

    這篇文章主要介紹了HttpClient基礎(chǔ)知識,算是比較詳細地對知識點和相關(guān)實例進行解釋,需要的朋友可以參考下
    2017-09-09

最新評論