dynamic web project的ssm老项目如何逐步迁移到JFinal?

使用Jfinal框架,相比Spring,有一种项目架构自己掌握在手里的感觉。现在新项目我都用Jifnal弄了

但我有个老项目,是我没用maven时搭建的dynamic web project的老项目,用独立的tomcat部署,仿照一个开源成熟的SSM项目架构弄的,使用Spring+Spring mvc +mybatis+tk.mybatis组合,以Spring的xml配置文件为项目配置 ,其中对Service和Dao和Controller使用了扫描和注入,对entity和service和Dao,使用了泛型关联。

捕获1.JPG

捕获0.JPG

捕获2.JPG

捕获4.JPG

以上截图表明了,对User业务后端的实体,Service,Dao都采取的泛型关联。其他模块区域内的实体,Service,Dao也是这种情况

想以共存的方法逐步改成Jfinal,毕竟自己自定义的依赖多,其中定义了项目启动时,Spring会开始调指定的几个类的方法

当然不想改成maven项目,项目类型,还是dynamic web project为主,只不过MVC架构中增加了Jfinal,各位能提供一下有什么方案么?我还没想好先从哪里改起,是先从dao层改,还是先从Web,还是从Entity,已有模块的现成代码要怎么改动?

评论区

zzutligang

2020-05-08 10:52

这个工作量还是挺大的,我个人觉得:还不如从头创建一个项目,然后把业务代码复制过来,修改一下,这样可能还快点!

JFinal

2020-05-08 10:53

jfinal 是标准的 java web 项目,所以,只需要在 web.xml 中添加 JFinalFilter 就可以将 jfinal 集成到原有的 java web 项目中去了

不想改成 maven,可以在首页右侧下载 jfinal-4.8-all.zip ,里头有相应的 jar 包可以放到项目中使用

通过在 web.xml 中引入 jfinal, 相当于你现有的项目与 jfinal 是共存的,新功能就可以直接做到 jfinal 中去了,两头互不干扰

有一个问题需要注意,web.xml 中配置的 JFinalFilter 与其它的 Filter 在调用时有先后次序,先配置的先调用

所以,如果配置在前面的 Filter 要注意将 "不该自己处理" 的请求 "放行", 否则后续的 Filter 收不到请求

tctc4869

2020-05-08 12:56

@JFinal “不该自己处理”是什么设置?要在Jifnal那里设置一个Handler?这个里面写什么代码么?

JFinal

2020-05-08 17:39

@tctc4869 "不该自己处理" 的意思如下:
1:假定你老项目处理的请求的 url 格式为 /xxx/...
2:假定你让 jfinal 整合后处理的请求的 url 格式为 /yyy/...
3:在 web.xml 中先配置 JFinalFilter,后配置 spring 的 filter 或 servlet,那么请求会先到达 jfinal

那么,jfinal 的 JFinalFilter 会最先接管所有请求:
1:/xxx/... 这种原本该老项目处理的 url 也会被 jfinal 接管
2:接管以后,如果不 "放行" 的话,默认会返回 404 错误

所以,你需要用一个 jfinal 的 Handler 来跳过这些 "不该自己处理" 的 url 请求,handler 内部结构大致如下:
public MyHandler extends Handler {
public void handle(String target, HttpServletRequest req, HttpServletResponse resp,boolean[] isHandled) {
if (target.starts("/xxx/") {
// 这里要放行给 spring
return ;
} else {
next.handle(target, req, resp, isHandled);
}
}

最后配置一下这个 handler
me.add(new MyHandler());

更多 handler 的例子参考:
com.jfinal.ext.handler 包中的源码

tctc4869

2020-05-23 13:45

@JFinal enjoy模板引擎和ActiveRecord,能用于没有继承model的实体类渲染么?就是带传统的setget的实体,但算先替换持久层框架,但持久层和实体类绑定了,不可能一下替换,所以的话目前是先保留实体,先替换一些持久层访问方法

JFinal

2020-05-23 15:41

@tctc4869 enjoy 天然支持 setter getter 的类型,看一下文档中的 enjoy 表达式那一章

tctc4869

2020-05-23 16:53

@JFinal 有个问题,如果用Db调用,Db那里的Db.template方法。其中参数若是没有继承model的实体对象参数,那要怎么弄?我看了一下Db的方法,只有map和可变参数的object数组等形式参数,实体对象反射转成map?,除了这个还有其他方面么。

JFinal

2020-05-23 17:15

Db.template 方法中的参数与是否继承 Model 无关,因为用到的参数是: Map 或者 Object... 。这两种参数是最通用的

所以你的问题的前提就是不成立的,后面的回复也就不知道回复啥了