blog

様々なメッセージの受信と応答の公開開発

メッセージを受け取る場所の明確化\n\nメッセージの受信、処理、応答\nまず、私が書いたコード全体を見てみましょう:\nパッケージ\n\nインポート java...

Jun 30, 2025 · 10 min. read
シェア

メッセージ受信先の明確化

メッセージの受信、処理、応答

ここで、私がすでに書いたCoreServletの完全なコードを最初に見てみましょう:

package org.liufeng.course.servlet; 
 
import java.io.IOException; 
import java.io.PrintWriter; 
 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
 
import org.liufeng.course.service.CoreService; 
import org.liufeng.course.util.SignUtil; 
 
/** 
 * コア・リクエスト処理クラス 
 *  
 * 
 * 
 */ 
public class CoreServlet extends HttpServlet { 
    private static final long serialVersionUID = 4440739483644821986L; 
 
    /** 
     * リクエストがサーバーから来たことを確認する 
     */ 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
        // 暗号化された署名 
        String signature = request.getParameter("signature"); 
        // タイムスタンプ 
        String timestamp = request.getParameter("timestamp"); 
        // 乱数 
        String nonce = request.getParameter("nonce"); 
        // ランダム文字列 
        String echostr = request.getParameter("echostr"); 
 
        PrintWriter out = response.getWriter(); 
        // 検証要求の署名をチェックすることで、検証が成功すれば、そのままechostrを返し、アクセスが成功したことを示し、そうでなければアクセス失敗を示す 
        if (SignUtil.checkSignature(signature, timestamp, nonce)) { 
            out.print(echostr); 
        } 
        out.close(); 
        out = null; 
    } 
 
    /** 
     * サーバーからのメッセージを処理する 
     */ 
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
        // リクエストとレスポンスのエンコーディングをUTF-8に設定する。 
        request.setCharacterEncoding("UTF-8"); 
        response.setCharacterEncoding("UTF-8"); 
 
        // コア・ビジネス・クラスを呼び出してメッセージを受信し、メッセージを処理する。 
        String respMessage = CoreService.processRequest(request); 
         
        // 応答メッセージ 
        PrintWriter out = response.getWriter(); 
        out.print(respMessage); 
        out.close(); 
    } 
 
} 

コードの説明

2) 52行目のコード:メッセージに応答して、エンコード方式もUTF-8に設定します;

3) 54行目のコード:CoreServiceクラスのprocessRequestメソッドを呼び出し、メッセージを受信して処理し、結果を取得します;

4) 57~59行目:response.getWriter().write()メソッドを呼び出し、メッセージの処理結果をユーザーに返します。

doPostメソッドの実装から見ることができる、それはCoreServiceクラスのprocessRequestメソッドを呼び出して受信し、メッセージを処理することで、そうすることの目的は、結合を解除することです、つまり、ビジネス関連の操作は、サーブレットでは処理されませんが、完全にコアビジネスクラスCoreServiceで行うことです。以下は、CoreServiceクラスのコードの実装を見てください:

package org.liufeng.course.service; 
 
import java.util.Date; 
import java.util.Map; 
import javax.servlet.http.HttpServletRequest; 
import org.liufeng.course.message.resp.TextMessage; 
import org.liufeng.course.util.MessageUtil; 
 
/** 
 * コア・サービス・クラス 
 *  
 * 
 * 
 */ 
public class CoreService { 
    /** 
     * 受信リクエストの処理 
     *  
     * @param request 
     * @return 
     */ 
    public static String processRequest(HttpServletRequest request) { 
        String respMessage = null; 
        try { 
            // デフォルトのリターン・テキスト・メッセージの内容 
            String respContent = "リクエスト処理の例外、試行するまでお待ちください!"; 
 
            // xmlリクエストの解析 
            Map<String, String> requestMap = MessageUtil.parseXml(request); 
 
            // 送信者アカウント(オープン)_id) 
            String fromUserName = requestMap.get("FromUserName"); 
            //  
            String toUserName = requestMap.get("ToUserName"); 
            // メッセージの種類 
            String msgType = requestMap.get("MsgType"); 
 
            // テキストメッセージを返信する 
            TextMessage textMessage = new TextMessage(); 
            textMessage.setToUserName(fromUserName); 
            textMessage.setFromUserName(toUserName); 
            textMessage.setCreateTime(new Date().getTime()); 
            textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT); 
            textMessage.setFuncFlag(0); 
 
            // テキスト・メッセージ 
            if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) { 
                respContent = "テキストメッセージを送信しています!"; 
            } 
            // イメージメッセージ 
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)) { 
                respContent = "イメージメッセージを送信しています!"; 
            } 
            // 地理的位置メッセージ 
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)) { 
                respContent = "ジオロケーション・メッセージを送信しています!"; 
            } 
            // リンクメッセージ 
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)) { 
                respContent = "リンク・メッセージを送信しています!"; 
            } 
            // 音声メッセージ 
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)) { 
                respContent = "音声メッセージを送信しています!"; 
            } 
            // イベント・プッシュ 
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) { 
                // イベントタイプ 
                String eventType = requestMap.get("Event"); 
                //   
                if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) { 
                    respContent = "注目してくれてありがとう; 
                } 
                // 配信停止 
                else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) { 
                    // TODO サブスクリプションをキャンセルすると、ユーザーは送信されたメッセージを受信できなくなるので、メッセージに返信する必要はない。 
                } 
                // カスタムメニュークリックイベント 
                else if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK)) { 
                    // TODO メニューをカスタマイズする権利は開かれておらず、このタイプのメッセージは当面扱われない。 
                } 
            } 
 
            textMessage.setContent(respContent); 
            respMessage = MessageUtil.textMessageToXml(textMessage); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
 
        return respMessage; 
    } 
} 

コードの説明

2) 32~36行目:HashMapからメッセージのフィールドを取り出します;

3) 39~44行目、84行目:返すテキストメッセージオブジェクトを組み立てます;

(5) 85行目:メッセージツールクラスのMessageUtilを呼び出し、テキストメッセージオブジェクトTextMessageをxml形式の文字列に変換して返します;

イベントプッシュについて

テキストメッセージ、イメージメッセージ、ジオロケーションメッセージ、リンクメッセージや音声メッセージのようなメッセージの種類の判断のために、比較的よく理解されている、ちょうどイベントプッシュメッセージと接触している友人の多くは、メッセージの用途が何であるかを把握することはできません、またはユーザーの注目のメッセージを判断する方法が明確ではありません。次に、具体的にイベントプッシュを見て、次の図は、イベントプッシュの説明に関する公式メッセージインターフェイスのドキュメントです:

Read next

Windows 8.1 アップデート成功のアップグレードには抽選運が必要?

Windows 8.1 Updateが正式にリリースされ、多くのWindows 8.1ユーザーは、現在正常にWindows 8.1 Updateをインストールすることができないことを反映しています。それはあなたがWindows 8.1 Updateをアップグレードできるかどうかも文字のために戦う必要があるようですが、あなたは成功しましたか?

Jun 30, 2025 · 4 min read