一 创建工程
到网站
初始化一个Spring Boot的maven工程,需要选中web和Thymeleaf
选择Generate Project就会下载一个压缩包。
二 配置自签名证书
由于需要运行在https协议之上,所以我们创建一个自签名证书。
解压上面下载的压缩包,进入到目录
push-demosrcmainresources
运行命令:
keytool -genkey -alias demo -keyalg rsa -dname "CN= demo " -keystore demo.jks -storetype JKS
提示输入密码的时候输入password
三 编写代码
在IntellJ中导入该工程(也可以使用别的IDE)。
1.启用https的配置
修改application.properties文件,内容如下:
server.http2.enabled=true
server. ssl .key-store=classpath:demo.jks
server.ssl.key-password=password
server.ssl.key-alias=demo
server.ssl.key-store-type=JKS
该配置文件启用https,并且使用我们上一步配置的证书
2.静态文件
在template文件夹下创建文件push. html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Push Example</title> </head> <body> <h1>Hello World</h1> <img src="/img/spring5.png" alt="Spring 5"/> </body> </html>
在static/img目录下放置引用到的图片文件
3.编写Controller代码
在包com.example.pushdemo下创建类PushController. java ,代码内容如下
package com.example.pushdemo; import org.springframework.stereotype.Controller; import org.springframework.web.bind. annotation .GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import javax. servlet .http.PushBuilder; @Controller @RequestMapping("push") public class PushController { @GetMapping("with") public String demoWithPush(PushBuilder pushBuilder){ if(null!=pushBuilder){ pushBuilder.path("/img/spring5.png").push(); } return "push"; } @GetMapping("without") public String demoWithoutPush(){ return "push"; } }
至此代码编写完成。
四 测试
运行PushDemoApplication.java
打开浏览器分别测试两个URL
两个URL,一个没有用push,一个用服务端push
下面是有服务端推送效果的截图,可以看到chrome的开发者工具中显示push字样,并且Waterfall和没有推送的请求不一样。
这个简单的网页看不出多少推送的效果,如果网页比较复杂,内容比较多,服务端主动推送可以提升用户体验,加快网页加载速度。