目录
一: 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