useBean срещу ServletContextListener

Трябва да имам достъпен обект чрез приложението в моето JSP приложение. Обектът трябва да бъде инстанциран веднъж и след това същият екземпляр трябва да се използва за живота на приложението.

Аз съм просто начинаещ в jsp, така че видях 2 начина да постигна това:

Имам клас MyMenu, който е bean - има сетери/гетери и няма конструктор на аргументи.

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 страниците.

Какъв е предпочитаният начин и защо?


person Wil    schedule 06.11.2012    source източник


Отговори (1)


JSP действия като useBean са нещо от миналото, което не трябва да се използва повече. Ролята на JSP е да бъде изглед, който генерира маркиране от данни, подготвени от контролера. Създаването на меню не е негова отговорност. Подходът на слушателя трябва да бъде предпочитан.

person JB Nizet    schedule 06.11.2012