欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    最新jfinal技术框架解析.docx

    • 资源ID:10532027       资源大小:24.05KB        全文页数:16页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    最新jfinal技术框架解析.docx

    1、最新jfinal技术框架解析JFinal技术架构浅析1.1 空间架构框架采用微内核全方位扩展架构,全方位是指其扩展方式在空间上的表现形式。整个空间架构由Handler、Interceptor、Controller、Render、Plugin五大部分组成。每个部分都是基于接口实现的,支持完整的自定义,使用灵活,扩展性强。空间架构图。HandlerInterceptorControllerRenderPlugin1.2 逻辑架构框架的逻辑架构非常简单,就是一个经典的 MVC 模式演化、大致分成以下 6 个步骤:1.2.1 Http包括HttpServletRequest、HttpServletRe

    2、sponse,即客户端请求与响应1.2.2 Filter所有请求的拦截器,相当于是一个闸口1.2.3 Handler请求处理器,是对所有请求的公共处理,在这里我们可以做权限控制、安全验证等。它是一个责任 链模式变种, 由初始配置的 Handler 以及框架默认的 ActionHandler构成一个链条,依次执行。1.2.4 Action动作处理器,它是一个 AOP + Command 模式变种。由ActionInvocation 进行调度,先执行拦截器,最后执行具体方法。1.2.5 Model模型层。在这个层面包括实体模型的定义、DB+ActiveRecord 模式数据库操作的支持、从请求中解

    3、析出对应参数构造 Model 实例,可以把它看成是 DAO。1.2.6 Render渲染层。负责将服务端的数据组装成客户端需要的数据格式,然后 response 到客户端。支持多种视图的渲染:FreeMark、Jsp、VELOCITY 以及自定义。HttpServletRequestHttpServletResponseJFinalFilter(所有请求的拦截器)Interceptorn(拦截器)Method(具体的方法)Action ActionInvocation(动作调度器)ActionHandler(动作处理器)Handler(处理器 )HandlerModelInjector (模型

    4、构造器)Model(模型定义)DB(数据库操作工具)Render(渲染器)JSP FreeMark VeloCity 自定义 View1.3 代码架构1.3.1 包结构1.3.2 包简介Aop:拦截器Config:通用配置Core:核心处理,主要是 Controller 的调度Ext:扩展包Handler:全局处理器 I18N:国际化util:一些工具类Log:日志类Plugin:插件处理Render:渲染处理,比如对于 FreeMark 的支持Server:服务器Token:令牌Upload:文件上传处理Validate:验证处理,主要是数据持久化时的验证1.4 运作原理我们从一次新增页面的

    5、 add操作请求来看:1. 首先是客户端点击新增按钮,提交一个新增请求,请求中会带上服务端处理地址 url2. 所有请求都会被JFinalFilter 拦截,然后调用 Handler进行详细处理3. Handler 是 一个 链 条 形 式 的 调 用 , 包 括 0-n 个 自 定 义 Handler , 以 及最 后 一 个ActionHandler,依次执行,当然可以自定义跳出。4. 进入 ActionHandler 后,首先会根据请求的 target从缓存的 ActionMapping中映射获取 到具体操作对应的 Action 对象,这个对象里面封装了方法名、方法上面的拦截器,方法所在

    6、的 Controller, controller 上面的拦截器等。 然后根据 Action 以及 Controller 实例构造出 ActionInvocation。5. 接下来通过 ActionInvocation 的invoke 进行具体处理,这是一个明显的 Command 模式的实现。首先是拦截器的调用,拦截器调用中会重新回调 ActionInvocation 的 invoke, 当拦截器调用完毕后,会调用当前操 作的 method6. 当进入具体 controller 的新增方法时, 调用基类getModel(Systemparam.class); 这个方法会从 request 中解析

    7、出所需要的数据,通过反射设置给具体的 Model 实体类,最终通过 ActiveRecord 来进行数据存储 .7. 最后是页面渲染 render核心代码简介我们还是从一次新增请求的流程来看涉及到的核心类有哪些本身就是一个 Http 的过滤器,主要有 3 个方法2.1.1 init(初始化)在服务器启动时执行一次,负责初始化框架的全局配置2.1.2 destory(销毁)在服务器停止时运行一次,负责销毁框架的全局配置2.1.3 doFilter(拦截)拦截所有的客户端请求,处理具体逻辑2.2 JFinalConfig是一个 API 引导式配置接口,供使用者自定义实现。里面主要配置常量、配置路由

    8、、配置处理器、配置插件、配置拦截器。2.2.1 Config自定义配置执行的调度器2.3 JFinal初始化框架全局配置的调度器, 由它来负责调用各个组件的初始化接口。 包括path、 Handler、 Action、Render、ActiveRecord、Const、i18n 等。 另外它还提供了启动内置服务器 Jetty 的 api2.4 Action即一个具体的动作,比如新增、修改、删除等,你也可以称之为方法。它包含以下内容:controllerClass、controllerKey、actionKey、method、methodName、interceptors、 viewPath2.

    9、4.1 ActionMapping初始化请求 url 与 Action 的映射关系,是 Controller 的解析器,最终的产出物是生成一个个 actionKey 以及与之对应的 Action 对象。2.4.2 ActionInvocation动作调度器,负责调用各个拦截器以及具体的方法2.4.3 ActionKey自定义的注解,用于自定义 action 的路由规则2.5 Handler通用的全局处理器2.5.1 ActionHandler动作处理器,负责分析请求,找到对应的 Action 并执行2.5.2 HandlerFactory全局 Handelr 的工厂,负责生成一个 handle

    10、r 链2.6 Render渲染器2.6.1 RenderFactory渲染器的工厂类,负责构造出各种视图的渲染器2.6.1.1 FreeMarkerRenderFactoryFreeMarkerRender2.6.1.2JspRenderFactoryJspRender2.6.1.3VelocityRenderFactoryVelocityRender2.7 Iplugin插件2.7.1 C3p0Plugin、DruidPlugin数据源插件2.7.2 EhCachePlugin缓存插件2.7.3 ActiveRecordPluginmodel 初始化插件2.7.3.1 AutoTableBi

    11、ndPlugin自动绑定 model 与数据库表的插件2.7.3.2 TableInfoBuilder负责初始化 model 与数据库表的映射关系2.7.3.2.1 TableInfo存储的即映射关系,包括 tableName、primaryKey、columnTypeMap2.7.3.3 Model所有 Model 的基类,封装了通用的数据库操作的方法2.7.3.3.1 ModelInjector从请求中构造出 model 实例的工具类2.7.3.4 Db、DbKit通用的数据库操作工具类2.7.4 SpringPlugin负责与 spring 框架进行集成2.7.5 QuartzPlugi

    12、n、Cron4jPlugin任务调度插件2.7.6 ConfigPlugin配置文件插件2.8 Routes路由规则2.8.1 MyRoutesUtil自动绑定 Controller 的工具类2.9 Controller所有 Controller 的基类,封装了通用的方法2.10拦截器Interceptor2.10.1 Before自定义拦截器的注解,配合拦截器实现类使用,实现热插拔拦截的功能2.10.2 Tx事务处理的拦截器2.11Validator服务端的校验器,供用户自定义实现2.12服务器接口IServer2.12.1 JettyServer内置的 jetty 服务器实现2.13Mul

    13、tipartRequest对于文件上传的处理3.详细介绍这里暂时只介绍几个核心的内容3.1 初始化初始化在服务器启动时进行,入口即在 JFinalFilter 中,下面讲最重要的 2 项初始化过程3.1.1 控制器的初始化控制器的初始化包括 2 个方面,1 个是路由,1 个是 action。路由仅仅是初始化得到一个pathControllerClass 的映射。Action 的初始化则是将 Controller 中每个方法进行封装。Action 的初始化依靠 ActionMapping 的 buildActionMapping 方法实现,下面是实现过程, 当然我们首先得明白 actioin 初

    14、始化目标是方法:1. 获取不需要初始化的方法的名称,主要是基类 Controller 里面封装的一些通用方法2. 获取全局拦截器3. 遍历前面初始化好的路由,也就是每个自己写的业务 Controller4. 解析每个 Controller 的拦截器5. 反射获取到每个 Controller 里面的所有方法,进行遍历6. 排除掉不需要的,剩下的方法首先解析出方法上面的拦截器7. 进行 Action 的构造 new Action(controllerKey, actionKey, controllerClass, method, methodName, actionInters, routes.g

    15、etViewPath(controllerKey);8. 最后用一个 actionKey 与 Action 进行映射,然后全局缓存住,这个 actionKey 即为客户 端调用这个方法的唯一钥匙从上面可以看出, jfinal 中实际上是不保留对于 Controller 的初始化信息的,它的单位只有 1 个,就是 Action (动作 or 方法)。在我看来,这样的组织有点不合理,个人觉得应该是 Controller 保留,Action 依附在 Controller 中,这样才是最合理的,而且全局的和类的成员 将不需要重复出现在每个 Action 中。 客户端请求过来之后,应该首先执行全局方法,

    16、再获取到 Controller,执行类方法,最后获取 对应 Action,执行具体动作。3.1.2 Model 初始化对于 model 的初始化,最终结果就是获取 TableInfo 对象 这个对象里面包含表名、主键名、实体名以及 1 个 columnTypeMap,这个 map 里面存放的是数据库列名与该列数据类型 Class 的映射入口也是 JfinalFilter 的 init 方法这里的 TableInfo 的 list 就是我们使用 Jfinal 的 config 需要初始配置的,3.1.3 自动初始化实体的实现编写了一个 AutoTableBindPlugin 插件类,通过查询出所

    17、有继承自 Model 的实体类,然后通过解析 TableBind 这个自定义注解,获取表名以及主键名3.2 Jdbc 是如何与连接池插件集成的比如我们原先使用的 proxool, hibernate 就支持与之整合。 亦或者 spring 中默认使用的 c3p0。 连接池, 说白了就是用来管理数据库连接的, 比如最大允许多少连接数, 最长连接时间等等, 那么我们自己写的 jdbc, 怎么来整合它获得它所提供的功能呢?其实和简单, 我们只需要将 数据库连接交由连接池去托管即可:1. 自定义一个类,比如叫 C3p0Plugin,它负责与连接池的整合衔接,其实就是根据数据库的配置,生成一个 java

    18、x.sql.DataSource 即可,这个 DataSource 对象必须是连接池的, 比如要整合 C3p0,那么就必须 DataSource dataSource = new ComboPooledDataSource(); dataSource.setJdbcUrl(jdbcUrl); dataSource.setUser(user); dataSource.setPassword(password);。 。2. 所有需要使用到数据库 Connection 的地方,全部通过 C3p0Plugin 中的 DataSource 获取,获取方法为 dataSource.getConnectio

    19、n()。 这样就完成了将数据库连接纳入连接池的工作3.3 声明式事务是如何实现的框架的事务是通过注解来支持的,spring 也是如此,即在需要事务的方法上面加上事务特有的注解,比如 这就是所谓的声明式事务。要讲它是如何实现的,那么就必须先明白注解是怎么起作用 的。1. 注解的意义 注解的诞生就是为了解放 xml 的冗繁,从这一点可以看出,其实它最核心的功能就 是为了配置。当然它还有其他一些作用,比如功能聚簇。实体的映射 xml 文件其实就应该 与实体在一起的。2. 自定义注解 自己定义一些需要使用到的注解,这个简单的应用还是比较简单的,这里不多说3. 注解解析注解的核心作用既然是配置,那么肯定

    20、是需要解析的,而且这种固定式的配置,显 然只需要解析一次即可。Jfinal 中是在 Filter 的 init 方法中进行注解的解析工作的。 它会将方法以及方法上面的注解的映射关系都解析好缓存起来 4. 注解应用 当调用到具体该方法时,首先会从缓存中获取该方法上面的注解,然后根据具体的 注解内容进行相关的处理,比如这里的 Tx.class,就是一个事务处理的拦截器,那么 就会调用事务处理的操作。 这里是一个递归调用方式:ActionInvocation 调用 invoke 方法 Invoke 方法中调用各个拦截器的拦截方法 intercept Intercept 方法中会通过传入的 Actio

    21、nInvocation 对象回调 invoke 方法继续处理 这样如下的事务操作就可以囊括整个方法的执行了,这就是个命令模式。3.4DB+ActiveRecordDB 的话很简单明了,就是一个数据库操作工具类, ActiveRecord 说白了就是在我们 的 model 中加入了数据库操作的能力。 比如 add、 remove、 update。 这些通用的处理, JFinal 在 中统一交由最上层的基类 Model 进行,我们的实体类继承自 Model,就拥有了该能力。3.5表单数据自动绑定是怎么实现的Jfinal 中一个表单的新增,后台只需要写如下代码即可完成,它是如何实现的1. 表单页面首

    22、先我们看下这个表单页面,注意 3 个输入域的 name 属性,都是 blog.xxx,这里 实际上就是设置了值与实体属性之间的映射关系了 2. 服务端从 request 中获取到所有的值,过滤出其中 blog 属性,缓存到 Model 基类 的 attrs 这个 map 中 3. 最后通过 Record 的 add 方法进行新增。3.6 关于路由3.6.1 ioc这里的路由就相当于我们原先 seam 框架的 ioc 了, 不过它功能更简单一些, 需要在初始 的时候进行配置,也就是页面与 Controller 之间的映射关系。3.6.2 如何去除路由配置很简单,使用我们原先的注解的方式即可。自定

    23、义一个 Controller 的注解,比如 Name,然 后解析初始化到全局配置中即可。3.6.3 自动绑定 controller 的实现原理与我们原先猜想的一样1. 自定义了一个 RouteBind 注解,然后每个 Controller 进行绑定2. 编写了一个工具类 MyRoutesUtil该工具类将 webinf/classes 目录下面所有的.class 二进制文件查找出来,然后通过反射 和解析注解生成 jfinal 的 Routes3. 在服务器启动的时候进行初始化即可3.7 拦截器Jfinal 中所有的拦截都通过 Interceptor 实现,根据位置大致可以分成以下几种3.7.1

    24、 全局拦截器在 config 中进行注册3.7.2 类拦截器在类上面通过注解注册3.7.3 方法拦截器在方法上面通过注解注册3.8 插件机制插件的机制主要就是一个基于接口动态扩展实现的架构,最顶层是一个 IPlugin。其实说白了,它就是一个全局性配置的扩展实现。3.8.1 插件的注册在自定义实现的 JfinalConfig 中进行配置3.8.2 插件运行所有插件的运行都是在服务器启动的时候进行一次,具体是在 Config 类中的如下方法:3.8.3 插件停止停止即在服务器关闭时 JfinalFiler 的 destroy 中进行3.9 缓存3.9.1 EcachePlugin框架本身内置了

    25、Ecache 这个插件,可以直接使用,只需要在 JfinalConfig 中进行注册即可3.9.2 MemcachedClient另外还有 1 个分布式缓存的实现,具体可以参照 MemcacheTool4如何使用4.1 拦截器参照上面的 3.74.2 控制器编写一个普通 java 类,继承 Controller,类上面使用注解进行路由绑定RouteBind(path = /power) public class PowerContraller extends BaseController4.2.1 调用 controller 的方法1. 页面进来的时候默认会走 index 方法,这个实现在 A

    26、ctionMapping2. 调用指定方法 默认调用 controller 中方法的方式为/controllername/methodname 比如上面的路径,power 为 controller 的路由注解、list 即为方法名字。 但是也可以通过 ActionKey 这个注解来进行自定义,比如如下就将 list 方法名改成了 hello。 ActionKey(value=hello)public void list() 4.3 数据库操作Jfinal 中数据库的增删改查都可以通过 Db 这个工具类或者实体对象进行。也就是所谓的 DB+ActiveRecord 方式。里面的数据库方法基本涵盖

    27、了所有需要的,而且它支持 POJO 形式 的操作。4.4 参数获取后台获取请求中的参数,都是通过基类 Controller 中封装好的 getPara方法进行。4.5 如何实现事务框架的事务是方法级别的,在需要实现事务的方法上面使用注解BeforeTx.class,加上事 务 Tx 的拦截器即可。4.6 如何实现文件上传前端用一个 js 上传控件,后台有通用的 FileController 支持处理 比如前端用的 swf 的上传控件后端:5 后续扩展改进5.1 懒加载主要是针对 Model 以及 Controller 的初始化, 使其支持懒加载的实现, 最后可以通过 devMode 参数来进行

    28、控制5.2 带参数方法的支持在前端需要能够调用服务端带参数的方法,参数能够直接绑定到方法上面5.3 如何实现多数据源多数据源的实现主要在于事务的控制上面,大家看下这个事务拦截器的实现:秘诀:好市口个性经营这里 DbKit.getDataSource 获取到的是一个静态的全局框架性数据源的定义,显然是唯一的。 但是我们可以对其进行改造, 只需要这里事务可以从当前使用的数据源进行控制即可达到目 的。小饰品店往往会给人零乱的感觉,采用开架陈列就会免掉这个麻烦。“漂亮女生”像是个小超市,同一款商品色彩丰富地挂了几十个任你挑,拿上东西再到收银台付款。这也符合女孩子精挑细选的天性,更保持了店堂长盛不衰的人

    29、气。5.4 集群与负载均衡在大学生对DIY手工艺品价位调查中,发现有46% 的女生认为在十元以下的价位是可以接受;48% 的认为在10-15元;6% 的则认为50-100元能接受。如图1-2所示10、如果学校开设一家DIY手工艺制品店,你希望Session 的信息可以采用分布式的 memcache 来支持共享。而无状态的框架架构可以支持集 群与负载均衡的实现(二)创业弱势分析3、你是否购买过DIY手工艺制品?5.5 前端的技术选型培养动手能力 学一门手艺 打发时间 兴趣爱好而手工艺制品是一种价格适中,不仅能锻炼同学们的动手能力,同时在制作过程中也能体会一下我国传统工艺的文化。无论是送给朋友还是

    30、亲人都能让人体会到一份浓厚的情谊。它的价值是不用金钱去估价而是用你一颗真诚而又温暖的心去体会的。更能让学生家长所接受。目前 js 控件库准备采用 jQuery-eazyUI 与 dwz 中的一个,模板则使用 freeMark 或者 jsp 来进 行,具体情况需要等到实际尝试测试后确定我们认为:创业是一个整合的过程,它需要合作、互助。大学生创业“独木难支”。在知识经济时代,事业的成功来自于合作,团队精神。创业更能培养了我们的团队精神。我们一个集体的智慧、力量一定能够展示我们当代大学生的耐心.勇气和坚强的毅力。能够努力克服自身的弱点,取得创业的成功。5.6 Webservice 支持可见“体验化消费” 广受大学生的欢迎、喜欢,这是我们创业项目是否成功的关键,必须引起足够的注意。restful 方式,还是传统的 webservice。这个个人觉得可以放到后面去考虑,实现肯定不是问 题的。


    注意事项

    本文(最新jfinal技术框架解析.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开