如何随服务器启动时同时启动action?

servlet可以通过在web.xml中配置或者注记的方式实现随服务器启动时一起启动,jfinal框架中的action如何实现这样的功能?

评论区

JFinal

2018-04-04 21:57

在 YourJFinalStart 中添加下面这样的一个方法:
public void afterJFinalStart() {
这里写上你的随机启动代码
}

上面的 afterJFinalstart() 方法会在 jfinal 启动完成后回调一次

libofei

2018-04-04 22:14

@JFinal 您说的是JFinalConfig里的afterJFinalStart方法吗,如果需要Controller在启动时初始化一些东西怎么办呢?

JFinal

2018-04-04 22:22

@libofei 用拦截器

libofei

2018-04-04 22:39

@JFinal 好的,明白了

JFinal

2018-04-04 22:44

@libofei 你是老用户了啊,理应这些应该都熟悉的

libofei

2018-04-04 22:59

@JFinal 有些功能很久没用,有些忘了

libofei

2018-04-04 23:20

@JFinal 刚才没有表达清楚,拦截器是在每个Controller方法调用前后做拦截,我想实现的效果是,tomcat启动时,Controller可以自动初始化一些过程。

JFinal

2018-04-04 23:32

@libofei controller 是被请求触发的,而 tomcat 启动时无法触达 controller

不知道你的需求什么? 感觉这个问题的方向就有问题

JFinal

2018-04-04 23:34

@libofei 在 Controller 的构造方法中添加初始化代码可否?

还是说对于一个 controller 类来说,只执行一次一次初始化操作,那么添加 staitc 块就可以解决,例如:
public IndexController extends Controller {
static {
这里是要初始化的代码;
}
}

libofei

2018-04-04 23:40

@JFinal 因为过去在servlet编程中,有时会遇到,servlet里有些过程必须在tomcat启动时就完成预处理,servlet调用时就直接取用过程处理的结果了,而并非在servlet调用时再执行。controller初始化时做能解决一部分问题,但还是跟tomcat启动时处理不太一样,毕竟那属于预处理过程。

JFinal

2018-04-04 23:46

@libofei 在 controller 中添加 init() 这种预处理方法,然后用一个全局拦截器调用一下就可以

本质就是一个回调的问题,servlet 也是容器回调的它的预处理方法

libofei

2018-04-04 23:57

@JFinal 没太理解,全局拦截器不只是拦截的范围变大了吗,触发拦截器不是还得靠调用controller的方法?init()在哪里调呢?

libofei

2018-04-05 11:13

@JFinal 我希望的效果是能自动触发,不止是在controller执行前触发

JFinal

2018-04-05 16:32

@libofei serlvet 的 init() 方法也是需要被某个东东回调的,前面介绍的拦截器调用 Controller 的 init() 没有本质区别

现在你最需要说清楚的是这个 Controller 中的 init() 是要调用几次? 是对每个 Controller 对象创建时调用一次,还是对所有同一个 Controller 所以生成的对象只调用一次?

这个决定了拦截器回调的策略,初始化回调的问题没有多少可研究的,找个合适的办法回调一下就好

libofei

2018-04-05 17:22

@JFinal init()调用一次就行,对一个 Controller对象调一次就行,不过希望Controller对象可以在tomcat启动时就创建

热门反馈

扫码入社