项目起源于一个实际需求,在线编辑器中,需要实现一个粘贴控件,可以将用户复制的Word文档内容直接插入到编辑器中。 但是由于前端读取不了Word文档中的图片,因为RTF格式的图片数据是这样的:
file://C:\xxx\roming\example.jpg
而且,这些XHTML数据往往dom规模很大,前端承受不住......
于是乎,一个伟大的想法诞生了,它最开始叫做本地化服务器解决方案。 但是问题来了,我并不会cpp,更别提qt了,怎么去实现呢?
Java原生无疑是极好的。问题就在于,如何把信息传给前端呢。我们很容易想到用mvc框架! 关键是spring mvc,它太大了,还拖家带口的......
于是乎,我选择了这样一款小巧的框架:spark
需要注意的是,此spark非彼spark,或许你搜索一下spark mvc
,浩如烟海的搜索内容中,还残存着它一丝身影。
生态还蛮齐全的,而且不拖家带口,包体小到1M都没有......这简直是求之不得的mvc最优解决方案。
接下来,既然我们已经可以和前端通信了,那么我们肯定要送佛送到西,顺带把拿出来的dom规模优化一下。 这一部分详见代码咯!
编译器里直接运行main
方法即可。
一定要把依赖打进去!没有使用spring以后,最容易犯这个毛病,详细看pom
文件配置
这一步参考使用exe4j,跟着走就行。需要注意的是,本项目没有界面,那么到选择项目类型的时候一定要注意,
选择桌面程序
而不是Java服务
,前者可以巧妙地通过没有窗口输出骗过操作系统,直接窗口显示错误,程序静默报错
但是不会退出,用户根本感知不到。后者会有一个命令行黑框,退出之后服务跟着退出,一定不要选错。
这一块自行解决,网上有签名相关解决方案。
我这边使用的是inno setup
,相关步骤指示如下:
- 编写iss脚本
- 配置签名工具(需要先自签名一套pvk,或者去网上买好)
- 运行脚本进行联合签名
- 如果是自签名证书,请先安装自签名证书到Windows根证书目录下,并设置可信任,以使得项目可以正常写入注册表和开机自启动
- 安装程序
- 随便复制一段RTF文本,访问http://127.0.0.1:10086/clip
这一步在上述打包的时候完成,在脚本内写入协议即可。
前端在使用时通过判断剪切板文本是否是正常文本,不正常就访问接口就行了,去拿rtf格式文本
v1.1版本
前端反映如果在JB系列编译器里边复制,会绕过前端校验访问,但是又不是rtf格式文本,我在插件里边修复了这个问题,并且新增了复制控制台数据的能力。