我需要在我的 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 页面中的代码时,第二种方式可以更清楚地说明“菜单”对象的来源。
首选方式是什么,为什么?