codecat是一款http 服务器中间件,模仿tomcat的功能,目前实现了 热部署
, 热卸载
, 路由转发
功能。
bin
目录 cp codecat-api.jar /home/xxx/your project将bin下的 codecat-api.jar引入你的项目,注意项目在打包的时候命好名,因为这个名字将是你这个项目的根目录名字。 新建一个类,让其继承 BasicHttpHandler
这个类,并实现 service
方法,该方法的返回值会输出到页面上,并在该类上加注解 @Path("/xxx")
,表示该类处理的请求路径。代码如下:
@Path("/timer") public class TimerHandler extends BasicHttpHandler { @Override public Object service(Object msg) { String timestamp = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss").format(new Date()); return "<h1>"+timestamp+"</h1>"; } }
这里我写了一个获得当前系统时间的类。
讲jar包放入 codecat/apps 下,这里有个小问题,第一次放可能会失败,删除再放一次就好假设你的jar包叫 index.jar
,此时访问 localhost:8080/index/timer ,即可看到当前系统时间。
tomcat的热部署 是无法再被卸载的,因此**codecat**引入了 热卸载
的概念,codecat内部使用一个代理,启动的时候默认代理一个server,每当用户向 codecat/apps
中放入一个新的jar包后,**codecat**会读取jar包内相应的类,启动一个新的端口并注册到代理,启动之前把新的类加载到新的server 以jar包的名字作为项目根目录,从而达到一个jar包对应一个realserver端口的效果。用户的直接感受就是访问的端口没有变过。当用户卸载(删除)jar时,**codecat**会根据所删除jar包名字,将映射的端口关闭,从而达到用户无法访问该jar包的功能的效果,来达到卸载的目的。
感谢 李敖 大牛提供的技术思路 andilylia