Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java useBean vs ServletContextListener_Java_Jsp_Jstl - Fatal编程技术网

Java useBean vs ServletContextListener

Java useBean vs ServletContextListener,java,jsp,jstl,Java,Jsp,Jstl,我需要通过JSP应用程序中的应用程序提供一个对象。对象必须实例化一次,然后在应用程序的生命周期中使用相同的实例 我只是jsp的初学者,所以我看到了两种实现方法: 我有一个类MyMenu,它是一个bean,有setters/getter,没有参数构造函数 1) 使用web.xml中的listener,我设置了如下类: import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; pub

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

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

我有一个类MyMenu,它是一个bean,有setters/getter,没有参数构造函数

1) 使用web.xml中的listener,我设置了如下类:

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();
    }

}
<jsp:useBean id="menu" class="net.myjsp1.MyMenu"
    scope="application" />
2) 不使用jsp:useBean的侦听器,如下所示:

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();
    }

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

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

我认为第二种方式可以让您在查看jsp页面中的代码时更清楚地了解“menu”对象的来源


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

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