Как получить доступ к javabean с областью приложения в сервлете - PullRequest
1 голос
/ 26 мая 2011

У меня есть несколько страниц JSP, на которых есть javabean с областью действия = application.Первая вызываемая страница создает экземпляр объекта (назовем его obj1), и все страницы с этого момента делятся им (отлично!).

Однако у меня также есть некоторые сопоставления сервлетов с этим классом.Каждый раз, когда выполняется один из этих вызовов, создается второй экземпляр этого класса (назовите этот obj2).Дальнейшие вызовы, использующие конкретное отображение сервлета, обслуживаются obj2.

Как мне заставить Tomcat использовать obj1 для обработки вызовов отображения сервлета?

Ответы [ 4 ]

2 голосов
/ 26 мая 2011

Вам нужно ServletContextListener для его создания.

@WebListener
public class Config implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent event) {
        event.getServletContext().setAttribute("data", new Data());
    }

    // ...
}

Таким образом, вы можете получить его в каждом сервлете следующим образом

Data data = (Data) getServletContext().getAttribute("data");
// ...

и получить доступв каждом JSP:

${data}

Обратите внимание, что не нужен старомодный тег <jsp:useBean> для всего этого.

0 голосов
/ 26 мая 2011

Исходя из вашего комментария, ваш подход неверен, сервлеты не предназначены для использования в качестве компонента в приложенииSevlets выступают в качестве контроллера в программе mvc, а компонент приложения является частью модели.Таким образом, вы связываете свой контроллер с вашей моделью, что не очень хорошо.Более того, то, что вы пытаетесь сделать, просто не работает, как вы можете видеть.См. Ответ BalusC для правильной реализации.

0 голосов
/ 26 мая 2011

Вопрос не очень понятен. Если ваш вопрос

Как заставить tomcat создать экземпляр приложения для сервлета. Это ответ!

Нет, приложение не может указать контейнеру использовать экземпляр, созданный приложением, в качестве сервлета. Контейнер создаст объект и уничтожит его самостоятельно.

0 голосов
/ 26 мая 2011

Я думаю, вам придется опубликовать части вашего файла web.xml, чтобы решить эту проблему, но если вы получаете два экземпляра одного и того же компонента в одном приложении, то он по определению не является областью приложения.

Можете ли вы показать нам, как выглядят ваши ссылки на сервлетные отображения?Я подозреваю, что они вызываются таким образом, что контекст отличается, поэтому контейнер не видит обе ссылки как находящиеся в одном приложении.Это либо так, либо область действия компонента не объявляется правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...