useBean vs ServletContextListener

时间:2012-11-06 15:08:51

标签: java jsp jstl

我需要在我的JSP应用程序中通过应用程序提供一个对象。该对象必须实例化一次,然后应该在应用程序的生命周期中使用相同的实例。

我只是jsp的初学者,所以我看到了两种方法来实现这个目标:

我有一个MyMenu类,它是一个bean - 有setter / getters,没有参数构造函数。

1)在web.xml中使用监听器我设置了这样一个类:

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

public class Config implements ServletContextListener {

    public void contextInitialized(ServletContextEvent event) {
        // Do stuff during webapp's startup.
        MyMenu appmenu = new MyMenu();
        event.getServletContext().setAttribute("appmenu", appmenu);

    }

    public void contextDestroyed(ServletContextEvent event) {
        // Do stuff during webapp's shutdown.
        MyMenu appmenu = (MyMenu)event.getServletContext().getAttribute("appmenu");
        appmenu.clear();
    }

}

2)不使用jsp:useBean的侦听器,如下所示:

<jsp:useBean id="menu" class="net.myjsp1.MyMenu"
    scope="application" />

两者都会导致$ {menu}或$ {appmenu}对象在我的jsp页面中可用。

我认为当您查看jsp页面中的代码时,第二种方式可以更清楚地显示“menu”对象的来源。

什么是优先方式?为什么?

1 个答案:

答案 0 :(得分:0)

像useBean这样的JSP操作是过去的事情,不应再使用了。 JSP的角色是一个视图,它根据控制器准备的数据生成标记。创建菜单不是它的责任。听众方法应该是首选。