listener中不能调用数据库操作吗?还是我的流程有问题?

发布于 2021-11-30 18:57:54 字数 1653 浏览 869 评论 6

web.xml:

<listener>
	<listener-class>com.fly.listener.SystemInitListener</listener-class>
</listener>



listener类:

package com.fly.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import com.fly.entity.User;

public class SystemInitListener implements ServletContextListener
{

  @Override
  public void contextDestroyed(ServletContextEvent arg0)
  {
    // TODO Auto-generated method stub

  }

  @Override
  public void contextInitialized(ServletContextEvent arg0)
  {
    System.out.println("listener开始.................");
    User u = User.me.findFirst("select * from user where id=2");
    System.out.println(u);
  }
}



在执行查询用户时就报空指针的错误。请问怎么解决?谢谢。

java.lang.NullPointerException
	at com.jfinal.plugin.activerecord.Model.find(Model.java:529)
	at com.jfinal.plugin.activerecord.Model.findFirst(Model.java:565)
	at com.fly.listener.SystemInitListener.contextInitialized(SystemInitListener.java:23)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4994)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5492)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)



如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

浅沫记忆 2021-12-04 02:40:52

其实是可以调用数据库操作的, 但是需要你自己写jdbc连接. 因为web.xml在初始化到listener的时候, 关于数据源的配置信息还没有加载. 所以不能通过配置的数据源进行数据库操作. 

嘦怹 2021-12-04 02:20:12

谢谢,波总辛苦了,我正在用jfinal试着做一个个人博客。 作为一个新手还有很多东西要学啊。

左岸枫 2021-12-03 23:08:54

     可以在任意地方使用 jfinal activerecord,在 listener中也可以,只不过要事先将 ActiveRecordPlugin 启动起来,具体方法可以参见 jfinal 2.0 手册有关 jfinal activerecord 有关章节。

天涯离梦残月幽梦 2021-12-03 22:20:06

加载顺序是这样的。context-param --> listener --> filter --> servlet。

南汐寒笙箫 2021-12-03 12:46:54

好吧,确实是。不能再listener中调用相关操作。必须的在JFinal加载完成后才能才能进行。

@Override
  public void afterJFinalStart()
  {
    System.out.println("afterJFinalStart.................");
    User u = User.me.findFirst("select * from user where id=2");
    System.out.println(u);
  }

这样就可以了。不过这样也方便不用自己配置listener了

晚风撩人 2021-12-01 05:16:29

我估计是不是一定要用JFinalConfig的afterJFinalStart()方法。文档中写的有,但是说的不是很明白。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文