若是你还不了解如今的先后端分离,推荐阅读淘宝前端团队的先后端分离的思考与实践html
随着如今整个软件开发行业的发展,在开发模式上逐渐由之前的一我的完成服务端和前端web页面,演变为前端和后端逐渐分离的趋势。在安卓、IOS等移动设备开发基本已经成型,先后端达到了彻底分离。但是在web网站开发中,先后端依旧高耦合、难分离;后端开发人员难以像开发安卓、IOS等移动端同样,只须要面向接口编程,而不用关心web页面的逻辑设计。前端
网站开发在先后端的分离上也进行了一部分发展,好比出现了Vue.js,React.js等前端js框架,使用起来能够说是很方便。但不可忽视的是,使用js去渲染页面是把压力转移到了客户端,并且使用js渲染页面会致使SEO(搜索引擎爬取不到页面信息)等问题。java
因此,在服务端处理页面并返回视图也是如今另外一种流行的开发模式。在Java web开发中,出现了JSP动态页面,动态渲染页面并返回视图到浏览器客户端。随着发展,JSP现现在也被FreeMarker、Thymeleaf等更加轻量的模板引擎逐渐取代,逐渐成为主流。可是这种方式形成了后端开发人员难以摆脱HTML页面,如今的公司依旧有不少后端工程师去作这部分工做。node
综上所述,为了完全解决上面的两个问题,既能实现前端与后端的彻底分离,而又不须要使用js去渲染页面。咱们在服务端处理页面的基础上发明了一种改变传统网站开发模式的web服务器,解决web开发中先后端难分离的问题。linux
本发明能够把后端人员对页面的处理的工做交还给前端去作。后端人员只须要面向接口编程,而没必要接触前端HTML页面的实现。原来须要后端去写FreeMarker语法逻辑去渲染HTML页面的工做交由前端人员去作。本质上只是分离了这部分工做安排,而并无改变工做的内容。git
Jerry服务器是相似Tomcat的web服务器,帮助先后端彻底分离的工具,它能够帮助后端工程师只作后端,前端工程师只作前端。github
图1:在传统Java web开发中的运行流程图web
解释:此流程图中只有request部分是前端负责,其他均为后端负责。编程
图2:使用本发明以后的Java web运行流程图json
本项目的核心思想是代理服务器的角色,对于浏览器发起的请求,代理服务器接收后会提取请求中的相关信息,如GET或POST参数、Cookie,携带并转发至后端提供的接口。
对于后端来讲,就好像只收到了浏览器发出的请求,代理服务器彻底能够被后端人员忽略掉。
代理服务器收到后端的响应内容,提取响应头中的Set-Cookie值,并处理响应体(JSON),使用FreeMarker模板引擎渲染到HTML文件,携带Set-Cookie一块儿响应给浏览器,对于浏览器用户来讲,就好像只与服务端进行通讯。
前往Git仓库克隆/下载Zip压缩包到本地电脑。
解压后只需保留如下3个目录或文件,其它所有删除便可:
在控制台执行java -jar JerryServer-1.0.0-SNAPSHOT.jar
命令运行该jar包。Linux系统如使其在后台运行,在末尾加个&
便可。
访问http://localhost:8888出现以下界面(默认访问ROOT项目的index.html文件)
访问 http://localhost:8888/admin 并更改不一样参数,体验动态渲染。
安装成功!
Jerry 使用 FreeMarker 做为模板引擎。
例如,服务端接口:
{ "message": "响应成功", "state": { "message": "ok", }, "data": [{ "time": "2018-04-25 13:25:07", }, { "time": "2018-04-25 13:25:07", }] }
HTML页面:
message:${message}<br> com: ${com}<br> data[0].time:${data[0].time}
其它用法请参考FreeMarker学习网站:FreeMarker开发手册
监控系统对各个页面与文件的响应耗时与请求信息进行监控,监控频率能够在全局配置文件中进行自定义配置,默认为10s。
对于监控日志能够自定义输出目录,目录只支持相对路径(也就是只能在webapps目录下),监控日志格式为JSON。
默认提供的监控页面位于webapps/manage项目下。默认访问:http://localhost:8888/manage
后台监控页面预览:
对于FreeMarker页面的后端接口支持使用加权负载均衡。关于如何设置负载均衡,请参考接口配置。
全局配置文件位于config目录下,使用默认UTF-8编码进行读取。详细配置以下:
#开启端口 port=8888 #默认首页 index=index.html #默认项目 project=ROOT #全局404模板(webapps/) 404=/template/404.html #接口配置文件名,要求内容为Json config=page.json #接口配置文件的编码 js_charset=UTF-8 #解析接口响应的编码 jk_charset=UTF-8 #请求接口超时时间ms timeout=10000 #FreeMarker文件编码 fm_charset=UTF-8 #监控刷新频率(毫秒/ms) monitor=10000 #监控文件目录(webapps/) monitorLog=/manage/log.json #缓存:最大存储元素个数 maxElementsInMemory=10000 #缓存:最大发呆时间(秒/s) timeToIdleSeconds=120 #缓存:最大存活时间(秒/s) timeToLiveSeconds=600 #控制台日志级别INFO/DEBUG level=INFO
Jerry把全部的web项目与页面都放在了webapps下,服务器也只会响应webapps目录下的文件。
先看一下示范文件,下面进行讲解。
[ { "page": "index.html", "id": "je", "inter": [ { "link": "https://www.kuaidi100.com/query?type=shentong&postid=3374107234608&id=1", "weight": 1 }, { "link": "https://www.kuaidi100.com/query?type=yuantong&postid=801371015800473775&id=1", "weight": 2 } ] }, { "page": "admin/index.html", "id": "je", "inter": [ { "link": "https://www.kuaidi100.com/query?type=shentong&postid=3374107234608&id=1", "weight": 1 } ] } ]
属性 | 说明 |
---|---|
page | HTML文件路径。 |
id | ID名称。 |
inter | 后端接口对象,能够定义多个实现负载均衡。 |
link | 后端接口实际地址。 |
weight | 权重,用于负载均衡。 |
在Jerry正式版中,采用FreeMarker做为模板引擎,一个(FreeMarker)HTML文件只能有一个配置。
在Linux部署Jerry服务器,访问文件严格区分大小写。而在Windows对大小写不敏感。
举个例子,访问/ROOT和/ROOt时,在Windows是能够的,在Linux是失败的。
若是在使用中您还遇到了其它Bug,欢迎在个人Git或者博客给我留言。
全项目默认UTF-8,不过也提供配置支持自定义。
对于不须要语法处理的HTML文件来讲,不涉及编码问题。
对于须要语法处理的HTML文件,统一配置在config配置文件。
若出现乱码,请检查你的配置。
关于Node.Js,在作这个的时候我真的不知道它是干啥的。由于我是一名Java后端工程师。
如今了解了Node.Js后,感受Node.Js和个人这个web服务器的角色都是中间的代理服务器,从二者渲染HTML页面的方式上来看,本质仍是不一样的。Node.Js使用的JS进行编程式渲染,须要写代码逻辑,个人web服务器使用的FreeMarker模板引擎,直接在HTML上写表达式语法,相比较之下,个人web服务器更简单,更方便。非但如此,JerryServer服务器更符合服务拆分的思想。NodeJs虽然起到了先后端分离的做用,但也加大了前端人员的业务需求,许多后端的业务今后转为了前端。JerryServer轻量简单可分布式扩展,如何选择,还须要根据实际状况判断。
2018/9/8:修复接口数据为数组解析失败的BUG。
2018/9/9:升级改版,主要是把接口配置简化。实行一个页面一个接口配置的策略。
把接口和页面进行绑定。访问页面的method、header和body就是请求接口的method、header和body。
支持GET请求,POST请求等。
关于请求体类型,除了 multipart/form-data 格式,binary二进制流(图片等),其他格式都支持。默认UTF-8解码与编码。
2018/9/10:去掉JSOUP依赖,使用HttpURLConnection进行网络请求。
2018/9/18:修复URL路径问题,访问目录默认访问目录下index.html(可自定义)
2018/9/21: 改用线程池管理日志线程
若使用出现Bug等问题,请到如下地址留言评论,或者加入QQ群交流。