关于web服务的几种实现方式

目录

一: websocket

二:webservice

三:JAX-RS 

四:springmvc 的方式


一: websocket

第一次听说 websocket 是在一次面试中。当然,第一次听说 肯定是 不知道。

后来 就开始 百度 websocket。如果不知道它是什么,就自行百度一下。反正,它就是一个协议,可以完成 全双工 通信,也就是 客户端 服务端 可以同时互相 发消息,比如 你进入了一个 推销 产品的页面,突然弹个 框出来 问你要不要 买什么什么的,那个 就是 用 websocket 来实现的 由服务器主动推送消息到浏览器。

大多浏览器 已经 实现了 websocket 协议。

web容器,像 tomcat ,高版本的 也是 实现了。

如果百度之后,还是不懂 websocket 是什么,那么 来一个 小例子,应该就知道了,至少能看到 一个真正存在的。

在你的 web 项目中,加入以下代码:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;

@ServerEndpoint(value="/wsTest")
public class WSTest {
    private Logger logger = LoggerFactory.getLogger(WSTest.class);
    @OnMessage
    public void onMessage(String msg,Session session) throws IOException {
        session.getBasicRemote().sendText("收到 消息 " + msg);

        new Thread(()->{
            try{
                int i=0;
                while (true) {
                    // 业务处理逻辑
                    Thread.sleep(1000 * 3);

                    // 向客户端 推送消息
                    session.getBasicRemote().sendText("有新消息了。。。");
                    i++;
                    if (i==10){
                        // 服务端主动关闭连接
                        session.close();
                        logger.info("close...");
                    }
                }
            }catch (Exception e){

            }
        }).start();
    }


}

需要引入jar

		<dependency>
			<groupId>javax.websocket</groupId>
			<artifactId>javax.websocket-api</artifactId>
			<version>1.1</version>
			<!--            <scope>provided</scope>-->
		</dependency>

启动 tomcat 服务,启动成功后,在线websocket测试-在线工具-postjson 通过这个地址来测试:

ws://localhost:8080/demon/wsTest

二:webservice

webservice 的 例子:

第一步:编写服务端代码

// 使用 jdk 自带的 注解

package wxj.test.wwss;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;

@WebService
public class WWSService {

    @WebMethod
    public void sayHi(String name){
        System.out.printf("hi " + name);
    }

    public static void main(String[] args) {
        Endpoint.publish("http://localhost:12345/hello",new WWSService());
    }
}

第二步:通常是 第三方使用者 需要使用 服务端的服务,就用这种方式 来生成客户端代码

// 启动服务端后,使用 wsimport 生成客户端的java代码
wsimport -s E:\pro\cal\src\main\java -p wxj.test.wwssimport -keep  http://localhost:12345/hello?wsdl

执行上述命令后,会生成一些 .java 文件 和 .class 文件:

第三步:通常是 第三方使用者,生成了客户端代码后,对客户端 代码的调用,来访问服务端

// 这里是 使用 wsimport 生成的客户端 来访问 服务端
package wxj.test;

import wxj.test.wwssimport.WWSService;
import wxj.test.wwssimport.WWSServiceService;

public class WWSSClient {
    public static void main(String[] args) {

        WWSServiceService factory = new WWSServiceService();
        WWSService wservice = factory.getWWSServicePort();

        wservice.sayHi("lili");
    }
}

通过以上三个步骤,就完成了 webservice 的快速实现。

三:JAX-RS 

jax-rs 是一种规范,规范文档

JAX-RS 全称 Java API for RESTful Services

jax-rs 实现之一 jersey 的使用:

引入依赖jar:

<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.1.1</version>
</dependency>


<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-client</artifactId>
    <version>3.0.3</version>
</dependency>



web.xml 配置监听器:

    <servlet>
		<servlet-name>Jersey REST Service</servlet-name>
		<servlet-class>
			com.sun.jersey.spi.container.servlet.ServletContainer
		</servlet-class>
		<init-param>
			<param-name>
				com.sun.jersey.config.property.packages
			</param-name>
			<param-value>com.eviac.blog.restws</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

四:springmvc 的方式

spring 自己实现的一种 restfull 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值