websocket与webservice

9.websocket简单实例

9.1添加jar:

	<!-- 使用spring websocket依赖的jar包 -->
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-websocket</artifactId>
				<version>${org.springframework-version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-messaging</artifactId>
				<version>${org.springframework-version}</version>
			</dependency>

9.2配置:继承 WebSocketConfigurer

@Configuration
@EnableWebSocket
public class WebSocketConfig  implements WebSocketConfigurer {
    //指定拦截路径和处理消息类
	@Override
	public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
		registry.addHandler(webSocketHandler(), "/websocket/queryOrder");
	}

    //自定义的处理消息类
	@Bean
	public TextWebSocketHandler webSocketHandler(){
		return new SpringWebSocketHandler();
	}

}

9.3处理消息类,只是简单的把发送过来的数据做处理,其他方法可自行添加实现

public class SpringWebSocketHandler extends TextWebSocketHandler {
    private static final Logger logger = LoggerFactory.getLogger(SpringWebSocketHandler.class);
    @Autowired
    private TestService testService;
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        logger.info("Received message: " + message.getPayload());
        String payload  = message.getPayload();
        Query query = ParseJson.parseObject(payload,Query.class);
        Result<TestResult> result = testService.queryOrder(query );
        session.sendMessage(new TextMessage(ParseJson.toJSONString(result)));
    }
}

9.4前端发送消息时需转为json

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title></title>
    <!--
	<link rel="stylesheet" href="/css/style.css"/>
    -->
    <script src="${pageContext.request.contextPath}/api/resources/js/jquery-2.0.3.js"></script>
    <script type="text/javascript">
        var websocket = new WebSocket("ws://localhost:8080/api/websocket/queryOrder");
        websocket.onopen = onOpen;
        websocket.onmessage = onMessage;
        websocket.onerror = onError;
        websocket.onclose = onClose;

        function onOpen(openEvt) {
            alert(openEvt.Data);
        }

        function onMessage(evt) {
            alert(evt.data);
        }
        function onError() {}
        function onClose() {}

        function doSendUser() {
            if (websocket.readyState == websocket.OPEN) {
                //var msg = document.getElementById("inputMsg").value;
                var query = '{"name":"3333","code":"12333"}';
                var str = JSON.stringify(query);
                websocket.send(str);//调用后台handleTextMessage方法
                alert("发送成功!");
            } else {
                alert("连接失败!");
            }
        }
        function doSendUsers() {
            if (websocket.readyState == websocket.OPEN) {
                var msg = document.getElementById("inputMsg").value;
                websocket.send("#everyone#"+msg);//调用后台handleTextMessage方法
                alert("发送成功!");
            } else {
                alert("连接失败!");
            }
        }
        window.close=function()
        {
            websocket.onclose();
        }
    </script>
</head>
<body>

请输入:<textarea rows="5" cols="10" id="inputMsg" name="inputMsg"></textarea>
<button onclick="doSendUser();">发送</button>
<button onclick="doSendUsers();">群发</button>
</body>
</html>

9.5如果有nginx代理,需添加

 proxy_set_header Upgrade $http_upgrade;
 proxy_set_header Connection  "upgrade";

10.cxf 开发webservice

10.1jar

<!-- 添加CXF 依赖 -->
			<dependency>
				<groupId>org.apache.cxf</groupId>
				<artifactId>cxf-core</artifactId>
				<version>${cxf.version}</version>
			</dependency>
			<dependency>
				<groupId>org.apache.cxf</groupId>
				<artifactId>cxf-rt-frontend-jaxws</artifactId>
				<version>${cxf.version}</version>
			</dependency>
			<dependency>
				<groupId>org.apache.cxf</groupId>
				<artifactId>cxf-rt-transports-http</artifactId>
				<version>${cxf.version}</version>
			</dependency>

10.2.web.xml添加

	<servlet>
		<servlet-name>cxf</servlet-name>
		<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>cxf</servlet-name>
		<url-pattern>/webservice/*</url-pattern>
	</servlet-mapping>

10.3.配置文件,spring-cxf.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:jaxws="http://cxf.apache.org/jaxws"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://cxf.apache.org/jaxws
        http://cxf.apache.org/schemas/jaxws.xsd">

        <!--其中id是自己定义的,implementor是接口实现类,address就是访问的地址 -->
        <!-- 相当于Endpoint.publish("http://localhost:8080/service", newHelloServiceImp()); -->
    <jaxws:endpoint id="helloService" implementor="com.xx.service.impl.HelloServiceImp" address="/hello"/>
</beans>

10.4接口及其实现类

import javax.jws.WebService;

/**
 */
@WebService
public interface HelloService {
    public String sayHello(String name);
}
public class HelloServiceImp implements HelloService {
    @Override
    public String sayHello(String name) {
        return "大家好,我是"+name;
    }



}

10.5访问:http://localhost:8081/webservice/hello成功,则webservice搭建成功

10.6生成客户端java文件

wsimport -s D:\\test\\TheClient\\src -p com.ws.client -keep http://localhost:8081/webservice/hello?wsdl
--如果上面命令不能识别则手动设置下java环境
set java_home=C:\Program Files\Java\jdk1.8.0_111
set classpath=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar
set path=%JAVA_HOME%\bin

10.7拷贝到客户端,调取使用

 发送数据

public class Test {
    public static void main(String[] args) {
        HelloService service=new HelloServiceImpService().getHelloServiceImpPort();
        System.out.println(service.sayHello("CXF111"));
    }
}

 10.6.1 根据接口信息, 创建客户端接口HelloService用JaxWsProxyFactoryBean直接调用

        String url = "http://localhost:8081/webservice/hello";
		//创建工厂
		JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
		//对工厂对象附加属性,服务端地址,客户端接口
		factory.setServiceClass(HelloService.class);
		factory.setAddress(url);
		//通过工厂方法创建具体实现的实例,也就是上面定义的接口
		HelloService service = (HelloService) factory.create();
        String result = service.sayHello("1222");

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值