2021SC@SDUSC
目录
web.handler包下有JPressHandler类和AttachmentHandlerKit类,AttachmentHandlerKit类是服务于JPressHandler类的附件处理工具类。JPressHandler类继承了Handler类,是JPress内部的一个伪静态处理器。其作用大致如下:
安全拦截。不让前端访问 插件目录 下的 .html、 .sql 文件 和 WEB-INF 目录下的任何文件,不让访问 模板目录 下的 .html 文件。
兼容 v3 的模板。
处理附件目录。
启用伪静态。
JPressCoreFunctions类是JPress的core.web包下的函数库,内置了许多方法协助其他包处理拦截器和控制器的业务。例如:
public static String escape(String html) { if (html == null || html.trim().length() == 0) { return ""; } return StrUtil.escapeHtml(html); }
为html的包装函数。
public static String para(String key, String defaultValue) { return JbootControllerContext.get().get(key, defaultValue); }
为获取Controller参数的函数。
Render为core.web下的负责渲染视图的包,有两个类:JPressRenderFactory和TemplateRender。
jfinal 提供了 RenderFactory 来定制 Controller.render 所有 render 方法的实现类,TemplateRender是定制 Controller.render(String view) 实现类的一个渲染类。
TemplateRender代码中 render() 方法重写了父类 Render.render() 方法,将切换掉 Controller.render(String view) 的实现类。Controller 中所有 render 方法的实现类都可以通过这种方式来切换到自己的实现类上去,极度方便灵活。
除了重写 render() 外,JPress自带的渲染器还添加了renderHtml()来渲染html视图。
除了这些方法外,TemplateRender类还有其他方法用于渲染时的状态、参数、格式、模板等处理。
JPressRenderFactory的继承关系如下,其父类的父类为JFinal的RenderFactory。
父类 RenderFactory.getRender(...) 方法,可以切换掉 Controller.render(String view) 的实现类。同理,可以通过覆盖掉 getXXXXRender() 来切换掉 Controller.getXXXXRender(),十分灵活。
在JPressRenderFactory中重写了getErrorRender()方法,渲染了特定的404页面。除了重写,还新增了getTemplateRender()方法,为JPress定制的模板类定制了渲染的方法。
以上为JPress的core包下负责处理消息队列、提供核心函数库、定制JPress模板渲染的三个核心文件的分析。