背景:在电商中,如果搞活动,会发信息通知用户,这样短时间内会有大量用户访问某个页面,导致服务器的压力剧增
此时的逻辑是:
1.前端访问后台某个url,后台返回信息,前端拿到后台的数据渲染
如果后台的数据要查询很多个微服务才能得到,这样大批量用户同时访问的话,压力巨大
使用静态页的思路如下:
1.模仿浏览器去访问某个活动页a.html-->得到html信息
2.上传到阿里云的oss服务器,如上传到web/act/static/目录上,前端访问时,访问的是
web/act/static/这个目录下的静态文件,所以性能比较高
3.当后台内容变更时,就重新去生成一份a.html上传到web/act/static/覆盖原来的文件
这种方式需要跟前端配置联调,调节对应的css和js进行支持
引入依赖: <dependency> <groupId>net.sourceforge.htmlunit</groupId> <artifactId>htmlunit</artifactId> </dependency> OutputStream outputStream=null; try { String url="https://www.taobao.com/"; WebClient webClient = new WebClient(BrowserVersion.CHROME); webClient.getOptions().setJavaScriptEnabled(false); webClient.getOptions().setCssEnabled(false); webClient.setAjaxController(new NicelyResynchronizingAjaxController()); webClient.getOptions().setTimeout(30000); webClient.getOptions().setThrowExceptionOnScriptError(false); webClient.addRequestHeader("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3192.0 Safari/537.36"); HtmlPage page = webClient.getPage(url); String htmlStr = page.asXml(); //这里拿到了页面信息,上传到服务器指位置,例如可以上传到阿里云oss图片服务器,在上面创建一个文件夹web/static,前端直接访问该路径就行了 //这里演示下载到我本地电脑 outputStream = new FileOutputStream("F:\test.html"); outputStream.write(htmlStr.getBytes()); }catch (Exception ex){ }finally { if(null!=outputStream){ try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }
如期url得到html的方式有很多种,可以通过流直接读取,或者JSoup工具去读取