위 챗 애플 릿 웹 소켓 SpringMVC+Spring+Mybatis 구현

위 챗 애플 릿 웹 소켓 절차 구현:
배경:

 1.   maven  
 2.     
 3.      
 4. spring  (xml   javabean        )
위 챗 애플 릿:

 1.     
자바 배경
1.maven 의존 도 추가

 <!-- websocket -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-websocket</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-messaging</artifactId>
    <version>${spring.version}</version>
  </dependency>

  <!--   spring   -->
  <!--   spring      4     -->
  <spring.version>4.3.7.RELEASE</spring.version>

2.악수 만 들 기

package com.ahutshop.websocket;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.server.HandshakeInterceptor;

/**
 *                websocket  
 */
public class MyWebSocketInterceptor implements HandshakeInterceptor {

  @Override
  public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse arg1, WebSocketHandler arg2,
      Map<String, Object> arg3) throws Exception {
    //  ServerHttpRequest   request      ,    request       
    if (request instanceof ServletServerHttpRequest) {
      ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
      HttpServletRequest httpRequest = servletRequest.getServletRequest();

    }

    System.out.println("     ");

    return true;
  }

  @Override
  public void afterHandshake(ServerHttpRequest arg0, ServerHttpResponse arg1, WebSocketHandler arg2, Exception arg3) {
    // TODO Auto-generated method stub

  }

}

3.프로세서 만 들 기

package com.ahutshop.websocket;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketMessage;
import org.springframework.web.socket.WebSocketSession;

public class WebSocketPushHandler implements WebSocketHandler {
  private static final List<WebSocketSession> users = new ArrayList<>();

  //         
  @Override
  public void afterConnectionEstablished(WebSocketSession session) throws Exception {
    System.out.println("       。。。");
    users.add(session);

    sendMessagesToUsers(new TextMessage("         ,   "));
  }

  //
  @Override
  public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
    //        ,      json  ,                ,     json              TextMessage,
    //          ,          {from:xxxx,to:xxxxx,msg:xxxxx},    ,    ,      
    // TextMessage msg = (TextMessage)message.getPayload();
    //          
    //sendMessagesToUsers(msg);
    //          
    //sendMessageToUser(userId, msg);

  }

  //           
  @Override
  public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {

  }

  //         ,      ,       websocket session remove ,            ,         
  @Override
  public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
    if (session.isOpen()) {
      session.close();
    }
    users.remove(session);
    System.out.println("       ");

  }

  @Override
  public boolean supportsPartialMessages() {
    return false;
  }

  /**
   *           
   */
  public void sendMessagesToUsers(TextMessage message) {
    for (WebSocketSession user : users) {
      try {
        // isOpen()     
        if (user.isOpen()) {
          user.sendMessage(message);
        }
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }

  /**
   *           
   */
  public void sendMessageToUser(String userId, TextMessage message) {
    for (WebSocketSession user : users) {
      if (user.getAttributes().get("").equals(userId)) {
        try {
          // isOpen()     
          if (user.isOpen()) {
            user.sendMessage(message);
          }
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
  }
}

4.spring 설정

javabean    (  )

package com.ahutshop.websocket;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;

@Configuration
@EnableWebSocket
public class WebSocketConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer {
  @Override
  public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {

    registry.addHandler(WebSocketPushHandler(), "/webSocketServer.action").addInterceptors(new MyWebSocketInterceptor()).setAllowedOrigins("*");
    registry.addHandler(WebSocketPushHandler(), "/sockjs/webSocketServer.action")
        .addInterceptors(new MyWebSocketInterceptor()).withSockJS();
  }

  @Bean
  public WebSocketHandler WebSocketPushHandler() {
    return new WebSocketPushHandler();
  }

}

spring.xml      
<!--     -->
<context:component-scan base-package="com.ahutshop.websocket" />

주의:
1./webSocketserver.action 에.action 접 두 사 를 붙 이 는 이 유 는 웹.xmlk 에 차단 접두사 이름 이.action 이 설정 되 어 있 기 때 문 입 니 다.

<!-- springmvc   -->
<servlet>
  <servlet-name>DispatcherServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:springmvc.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
  <!--      -->
  <async-supported>true</async-supported>
</servlet>
<servlet-mapping>
  <servlet-name>DispatcherServlet</servlet-name>
  <url-pattern>*.action</url-pattern> 
</servlet-mapping>
2.setAllowedOrigins("*")의*는 합 법 적 인 요청 도 메 인 이름 을 대표 합 니 다.이 방법 은 가 변 배열 을 매개 변수 로 받 아들 이 고 설정 해 야 합 니 다.그렇지 않 으 면 요청 할 때 403 이 나타 납 니 다.
xml 방식 설정(생략)
위 챗 애플 릿
1.websocket.wxml

<!--pages/websocket/websocket.wxml-->
<view class="page">
 <view class="page__hd">
 </view>
 <view class="page__bd">

 <button bindtap="connectWebsocket" type="primary">  websocket</button>

 </view>
</view>

2.websocket.js

// pages/websocket/websocket.js
Page({

 /**
  *        
  */
 data: {

 },
 connectWebsocket: function () {
  wx.connectSocket({
   url: 'ws://localhost:8080/AhutShop/webSocketServer.action',
   data: {
   },
   header: {
    'content-type': 'application/json'
   },
   method: "GET"
  })
  wx.onSocketOpen(function (res) {
   console.log('WebSocket     !')
  })
  wx.onSocketError(function (res) {
   console.log('WebSocket      ,   !')
  })
  wx.onSocketMessage(function (res) {
   console.log('       :' + res.data)
  })
 }
})

실행 효과

이상 은 바로 위 챗 애플 릿 백 스테이지 의 구축 입 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주시 거나 본 사이트 의 커 뮤 니 티 에 가서 토론 을 교류 하 십시오.본 사이트 에 위 챗 애플 릿 에 관 한 글 이 아직 많 습 니 다.많이 찾 아 보 세 요.읽 어 주 셔 서 감사합니다. 여러분 께 도움 이 되 었 으 면 좋 겠 습 니 다.본 사이트 에 대한 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기