亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

在SpringMVC中使用WebSocket

2019-11-10 17:19:38
字體:
來源:轉載
供稿:網友
SPRingMvc項目的搭建在這里就不做多解釋,要在Spring中實現 WebSocket 必須加上 spring-websocket和 spring-messaging兩個包,同樣,完整的pom.xml給出如下:<project xmlns="http://maven.apache.org/POM/4.0.0"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0    http://maven.apache.org/maven-v4_0_0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.656463</groupId>    <artifactId>demo-websocket</artifactId>    <packaging>war</packaging>    <name>demo-websocket Maven Webapp</name>    <version>0.0.1-SNAPSHOT</version>    <url>http://maven.apache.org</url>    <properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <spring.version>4.1.6.RELEASE</spring.version>    </properties>    <dependencies>        <!-- spring相關 -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-core</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-beans</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-aop</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context-support</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-jdbc</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-web</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-webmvc</artifactId>            <version>${spring.version}</version>        </dependency>        <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>        <dependency>            <groupId>org.aspectj</groupId>            <artifactId>aspectjweaver</artifactId>            <version>1.7.4</version>        </dependency>        <dependency>            <groupId>com.google.code.gson</groupId>            <artifactId>gson</artifactId>            <version>2.7</version>        </dependency>        <dependency>            <groupId>jstl</groupId>            <artifactId>jstl</artifactId>            <version>1.2</version>        </dependency>        <dependency>            <groupId>taglibs</groupId>            <artifactId>standard</artifactId>            <version>1.1.2</version>        </dependency>        <dependency>            <groupId>javax.websocket</groupId>            <artifactId>javax.websocket-api</artifactId>            <version>1.1</version>            <scope>provided</scope>        </dependency>        <dependency>            <groupId>javax</groupId>            <artifactId>javaee-api</artifactId>            <version>7.0</version>            <scope>provided</scope>        </dependency>    </dependencies>    <build>        <finalName>demo-websocket</finalName>        <plugins>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-compiler-plugin</artifactId>                <version>3.0</version>                <configuration>                    <source>1.7</source>                    <target>1.7</target>                </configuration>            </plugin>            <plugin>                <groupId>org.apache.tomcat.maven</groupId>                <artifactId>tomcat7-maven-plugin</artifactId>                <version>2.2</version>                <configuration>                    <port>8080</port>                    <path>/</path>                </configuration>            </plugin>        </plugins>    </build></project>定義一個簡單的WebSocket客戶端頁面,這里只有一個連接和發送消息的功能,這個示例和上個示例的功能類似<%@ page language="java" contentType="text/html; charset=UTF-8"         pageEncoding="UTF-8" %><!DOCTYPE html><html lang="en"><head>    <meta charset="utf-8">    <title></title>    <script type="text/Javascript" src="/static/js/jquery-1.9.1.js"></script>    <script type="text/javascript">        $(function () {            var websocket;            var target = "ws://192.168.56.101:8080/hello.htm";            if ('WebSocket' in window) {                websocket = new WebSocket(target);            } else if ('MozWebSocket' in window) {                websocket = new MozWebSocket(target);            } else {                alert('WebSocket is not supported by this browser.');                return;            }            websocket.onopen = function (evnt) {                $("#tou").html("鏈接服務器成功!")            };            websocket.onmessage = function (evnt) {                $("#msg").html($("#msg").html() + "<br/>" + evnt.data);            };            websocket.onerror = function (evnt) {            };            websocket.onclose = function (evnt) {                $("#tou").html("與服務器斷開了鏈接!")            }            $('#send').bind('click', function () {                send();            });            function send() {                if (websocket != null) {                    var message = document.getElementById('message').value;                    websocket.send(message);                } else {                    alert('未與服務器鏈接.');                }            }        });    </script></head><body><div id="tou"> webSocket及時聊天Demo程序</div><div id="msg"></div><input type="text" id="message"><button type="button" id="send"> 發送</button></body></html>創建握手攔截器的類 HandInterceptor ,此類實現 HandshakeInterceptor接口。此類的功能有點類似于使用原始J2EE實現的@OnOpen注解package com._656463.demo.websocket.spring;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;import javax.servlet.http.HttpServletRequest;import java.util.Map;/** * 攔截器(握手) */public class HandInterceptor implements HandshakeInterceptor {    @Override    public boolean beforeHandshake(ServerHttpRequest request,            ServerHttpResponse response, WebSocketHandler handler,            Map<String, Object> map) throws Exception {        if (request instanceof ServletServerHttpRequest) {            HttpServletRequest req = ((ServletServerHttpRequest) request).getServletRequest();            String userName = "default-user";            // 使用userName區分WebSocketHandler,以便定向發送消息            // String userName = (String)            // session.getAttribute("WEBSOCKET_USERNAME");            map.put("WEBSOCKET_USERNAME", userName);            req.getSession().setAttribute("WEBSOCKET_USERNAME", userName);        }        return true;    }    @Override    public void afterHandshake(ServerHttpRequest serverHttpRequest,            ServerHttpResponse serverHttpResponse,            WebSocketHandler webSocketHandler, Exception e) {    }}創建一個類 WebSocketHander,實現 WebSocketHandler接口,此類的主要功能是消息處理中心,相當于使用原始J2EE API實現中的@OnMessage和@OnClose注解功能package com._656463.demo.websocket.spring;import org.springframework.web.socket.*;import java.io.IOException;import java.util.ArrayList;import java.util.List;/** * 消息處理中心 */public class WebSocketHander implements WebSocketHandler {    private static final List<WebSocketSession> users = new ArrayList<WebSocketSession>();    /**     * 初次鏈接成功執行     *     * @param session     * @throws Exception     */    @Override    public void afterConnectionEstablished(WebSocketSession session) throws Exception {        System.out.println("鏈接成功......");        users.add(session);        String userName = (String) session.getAttributes().get("WEBSOCKET_USERNAME");        if (userName != null) {            //查詢未讀消息            int count = 5;            session.sendMessage(new TextMessage(count + ""));        }    }    /**     * 接受消息處理消息     *     * @param session     * @param message     * @throws Exception     */    @Override    public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {        sendMessageToUsers(new TextMessage(message.getPayload() + ""));    }    @Override    public void handleTransportError(WebSocketSession session, Throwable throwable) throws Exception {        if (session.isOpen()) {            session.close();        }        System.out.println("鏈接出錯,關閉鏈接......");        users.remove(session);    }    @Override    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {        System.out.println("鏈接關閉......" + status.toString());        users.remove(session);    }    @Override    public boolean supportsPartialMessages() {        return false;    }    /**     * 給所有在線用戶發送消息     *     * @param message     */    public void sendMessageToUsers(TextMessage message) {        for (WebSocketSession user : users) {            try {                if (user.isOpen()) {                    user.sendMessage(message);                }            } catch (IOException e) {                e.printStackTrace();            }        }    }    /**     * 給某個用戶發送消息     *     * @param userName     * @param message     */    public void sendMessageToUser(String userName, TextMessage message) {        for (WebSocketSession user : users) {            if (user.getAttributes().get("WEBSOCKET_USERNAME").equals(userName)) {                try {                    if (user.isOpen()) {                        user.sendMessage(message);                    }                } catch (IOException e) {                    e.printStackTrace();                }                break;            }        }    }}有了握手攔截器和消息處理中心之后,要開啟WebSocket,讓他工作起來。開啟WebSocket有兩種方式,一種是基于注解的方式,二是基本XML配置的方式 1、基于注解的方式在springmvc的配置文件中,配置掃描包<!-- websocket相關掃描,主要掃描:WebSocketConfig.java 這個類路徑 --><context:component-scan base-package="com._656463.demo.websocket.spring"/>創建WebSocketConfig,開啟WebSocket,并注冊WebSocket的請求路徑package com._656463.demo.websocket.spring;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import org.springframework.web.socket.config.annotation.EnableWebSocket;import org.springframework.web.socket.config.annotation.WebSocketConfigurer;import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;/** * EnableWebSocket 開啟websocket * * @EnableWebMvc //這個標注可以不加,如果有加,要extends WebMvcConfigurerAdapter */@Configuration@EnableWebSocketpublic class WebSocketConfig implements WebSocketConfigurer {    @Override    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {        // 支持websocket 的訪問鏈接        registry.addHandler(new WebSocketHander(), "/hello.htm")                .addInterceptors(new HandInterceptor());        // 不支持websocket的訪問鏈接        registry.addHandler(new WebSocketHander(), "/sockjs/hello.htm")                .addInterceptors(new HandInterceptor())                .withSockJS();    }}2、基于XML配置的方式在springmvc的配置文件中,通過websocket標簽配置WebSocket<!-- 可以在這里配置websocket的相關類,也可以用注解,詳細可以查看com._656463.demo.websocket.spring.WebSocketConfig --><bean id="websocket" class="com._656463.demo.websocket.spring.WebSocketHander"/><websocket:handlers>    <websocket:mapping path="/hello.htm" handler="websocket" />    <websocket:handshake-interceptors>        <bean class="com._656463.demo.websocket.spring.HandInterceptor"/>    </websocket:handshake-interceptors></websocket:handlers>本次基于Springmvc的WebSocket實例就講完了,本實例是書生參考網絡整理的,希望對你有所幫助
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩电影中文字幕| 欧美亚洲另类在线| 黑人巨大精品欧美一区二区一视频| 永久免费毛片在线播放不卡| 国产精品久久一| 色综合久久中文字幕综合网小说| 69av成年福利视频| 久久免费国产精品1| 国产精品精品视频一区二区三区| 国产精品高潮粉嫩av| 成人精品一区二区三区| 国产精品一二三视频| 97在线精品视频| 久久久久久中文字幕| 国产精品久久久久久久午夜| 久久综合久久美利坚合众国| 欧美日韩亚洲天堂| 色妞久久福利网| 欧美乱妇高清无乱码| 亚洲男人av在线| 性色av一区二区三区| 亚洲精品免费网站| 亚洲欧洲免费视频| 91午夜理伦私人影院| 91九色综合久久| 久久久精品2019中文字幕神马| 欧美极品少妇xxxxⅹ喷水| 国产精品免费网站| 亚洲成人av中文字幕| 午夜精品一区二区三区视频免费看| 97精品欧美一区二区三区| 精品国产欧美成人夜夜嗨| 自拍偷拍亚洲一区| 伦理中文字幕亚洲| 亚洲欧美日本精品| 国产91精品高潮白浆喷水| 日韩亚洲国产中文字幕| 亚洲成人在线视频播放| www.日韩免费| 九九久久久久99精品| 国产成人高清激情视频在线观看| 亚洲国产成人久久综合一区| 国产久一一精品| 日韩中文字幕在线| 欧美在线视频播放| 亚洲aⅴ男人的天堂在线观看| 美日韩精品免费观看视频| 秋霞午夜一区二区| 久久国产色av| 欧洲成人免费aa| 国产精品91久久| 伊人成人开心激情综合网| 精品视频在线播放免| 欧美日韩国产影院| 国产999在线| 国产日韩欧美电影在线观看| 影音先锋欧美精品| 欧美孕妇孕交黑巨大网站| 久久久亚洲欧洲日产国码aⅴ| www日韩中文字幕在线看| 91日本视频在线| 国产日韩精品在线观看| xvideos国产精品| 久久久久久久一| 欧美色道久久88综合亚洲精品| 久久精品电影网| 久久久国产视频91| 久久成人在线视频| 欧美二区乱c黑人| 亚洲最大av网站| 国产成人精品久久亚洲高清不卡| 欧美日韩国产色视频| 91在线无精精品一区二区| 久久精品国产一区二区三区| 蜜臀久久99精品久久久无需会员| 欧美午夜精品伦理| 日韩精品在线第一页| 国产精品久久电影观看| 日韩经典一区二区三区| 成人444kkkk在线观看| 97色在线视频观看| 国产日韩欧美日韩大片| 韩国三级日本三级少妇99| 欧美性生交大片免费| 国产精品成人播放| 高清欧美一区二区三区| 欧美日韩在线视频观看| 精品国产乱码久久久久久虫虫漫画| 欧美电影免费观看电视剧大全| 精品成人乱色一区二区| 亚洲丝袜一区在线| 国产精品一区二区三区成人| 久久欧美在线电影| 久久视频这里只有精品| 亚洲国内高清视频| 久久精品视频在线| 亚洲日本欧美日韩高观看| 日韩网站免费观看| 亚洲大胆人体av| 97国产精品视频人人做人人爱| 国产精品一香蕉国产线看观看| 精品久久久国产精品999| 欧美性猛交xxxxx水多| 欧美日韩中文字幕在线| 日韩性xxxx爱| 日韩中文字幕在线播放| 91精品在线影院| 成人两性免费视频| 日韩在线观看精品| 国产精品久久综合av爱欲tv| xx视频.9999.com| 91高清免费在线观看| 2019中文在线观看| 欧美老女人bb| 日韩精品在线视频观看| 欧美日韩不卡合集视频| 国产精品女主播| 一区二区亚洲精品国产| 国产亚洲人成网站在线观看| 亚洲欧洲中文天堂| 亚洲最大福利网站| 国产精品99久久久久久久久久久久| 久久精品国产欧美亚洲人人爽| 久久影院资源站| 欧日韩在线观看| 日韩精品福利网站| 欧美日韩福利电影| 91精品国产91久久久久久不卡| 日韩电影在线观看永久视频免费网站| 国产精品h在线观看| 欧美成人午夜影院| 国产精品久久久久久av福利软件| 91色中文字幕| 久久免费少妇高潮久久精品99| 亚洲欧美另类中文字幕| 在线观看欧美日韩国产| 另类美女黄大片| 国产精品高潮呻吟久久av黑人| 最近2019中文字幕大全第二页| 欧美成人精品在线视频| 日韩av中文字幕在线免费观看| 亚洲国产天堂网精品网站| 日韩精品中文字幕在线观看| 亚洲精品中文字幕女同| 久久久噜噜噜久噜久久| 一区二区成人av| 亚洲激情 国产| 久久伊人91精品综合网站| 国语自产精品视频在线看抢先版图片| 欧美夜福利tv在线| 欧美福利小视频| 久久久久久久国产精品视频| 九九九热精品免费视频观看网站| 亚洲一区亚洲二区亚洲三区| 中文字幕亚洲一区二区三区五十路| 91精品视频免费观看| 亚洲欧美在线磁力| 粗暴蹂躏中文一区二区三区| 亚洲一二三在线| 亚洲精品永久免费精品| 国产精品一区二区女厕厕| 欧美大片免费看| 亚洲国产精品va在线看黑人| 亚洲视频在线视频|