菜鸡最近要写数据结构课设,要写个简单的haffman编码译码系统,数据结构是用c教的,但是菜鸡很想写web,所以用java写了,以下小记一下开发的过程。
点击我跳转到应用:http://inhann.top:25555/haffman/
点击我跳转到源码:https://github.com/1nhann/haffman-encoder-decoder
应用功能简介
哈夫曼编码
哈夫曼编码是什么?众所周知,一个字符在计算机中对应一个01序列。一个字符集中,每个字符有不同的权重(通常以在文本中出现的频率为权重),而为了使得$\sum l_i w_i (01序列的长度和字符权重的乘积之和 )$最小,于是使用哈夫曼编码算法,根据字符的权重,计算出每个字符对应的01序列。理论上,使用经哈夫曼编码后的01序列传递信息,可以使得总数据传输量最小。
应用
使用默认权重
点击
use default weights
,自动填充权重(权重参考自wiki百科)使用自定义权重
直接写就行。注意格式为
(字符,小数/整数),(字符,小数/整数)
编码(encode)
字符 —> 01序列
在左边的框,输入字符,点击
Encode
,在右边的框中,就能得到对应的01序列解码(decode)
01序列 —> 字符
在右边的框,输入01序列,点击
Decode
,在左边的框中,就能得到对应的字符,同时还能看到一个简单的哈夫曼树
开发
概要
用Java写的后端,用到maven开发,因为是数据结构课设,所以每个用到的数据结构都是自己实现的,包括但不限于BinTree(二叉树),ComplBinTree(完全二叉树),Map(哈希表),PQueue(优先队列),Deque(双端队列),List(链表),Vector(向量),Entry(项)
用的MVC 模式,因为简单,所以用JSP-Servlet开发,前端写在JSP中,里面有必要的javascript代码,html代码,也写了必要的css文件
写完的代码最后打成 war 包,放菜鸡服务器上的一个配备了tomcat的docker 容器当中,并映射到了宿主机的端口,使得可以远程访问(http://inhann.top:25555/haffman/)
Java后端
代码量还是很多的,毕竟每个数据结构都得自己写,心血来潮把不必要的功能也写了,所以代码量更多了
前端
就一页jsp,很简单,顺便把前端巩固了一遍,javascript用得更熟练了
encode的时候展示树这个功能,参考了xieranmaya的博客
部署
部署到菜鸡服务器的docker里面,这一步菜鸡研究了好久,对docker 的使用有了更深的理解。
实际上也很简单
pull 最新的tomcat的容器
docker pull tomcat
把文件复制到服务器中
菜鸡把
haffman.war
文件,放到了haffman
这个文件夹下面运行一个容器,把haffman.war映射进去
docker run -d -p 25555:8080 --name tom -v /home/inhann/haffman:/usr/local/tomcat/webapps tomcat
好了,浏览器访问
总结
这个web应用,算是菜鸡第一个正经开发的web了,这个过程学到了很多。