【问题标题】:useBean vs ServletContextListeneruseBean vs ServletContextListener
【发布时间】:2012-11-06 15:08:51
【问题描述】:

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

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

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

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 页面中的代码时,第二种方式可以更清楚地说明“菜单”对象的来源。

首选的方式是什么?为什么?

【问题讨论】:

    标签: java jsp jstl


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      相关资源
      最近更新 更多