国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

在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實例就講完了,本實例是書生參考網絡整理的,希望對你有所幫助
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 高雄县| 宁阳县| 伊川县| 眉山市| 松溪县| 民乐县| 丹寨县| 石楼县| 南漳县| 偃师市| 水富县| 宜丰县| 辉县市| 安图县| 安国市| 化德县| 台东县| 阿瓦提县| 吴忠市| 莱芜市| 九龙县| 珲春市| 嘉义市| 阜阳市| 荔浦县| 绵阳市| 定安县| 皋兰县| 天祝| 旅游| 米泉市| 灌阳县| 灯塔市| 张家口市| 陆河县| 托克逊县| 宁城县| 喀喇| 建瓯市| 英德市| 蕉岭县|