2014-01-02 2 views
2

Для текущего проекта, над которым я работаю, я решил использовать шаблон переднего контроллера. У меня всегда создалось впечатление, что фронт-контроллер должен (в конечном счете) нести ответственность за все, что происходит в веб-приложении. Неужели слушатели нарушают этот шаблон?Java Servlets - вопросы о контролере (Listeners & Context)

public class MyDatabase implements ServletContextListener { 
    public void contextInitialized(ServletContextEvent event) { 
     ... 
     String driver = context.getInitParameter("driver"); 
    } 
} 

Это, конечно, кажется намного проще, чем:

public class FrontController extends HttpServlet { 
    public void service (....) { 
     MyDatabase db = new MyDatabase(context.getInitParameter("driver")); 
    } 
} 

Это очень упрощенный пример; на практике будет больше параметров. Итак, какой фрагмент будет считаться более верным шаблону переднего контроллера - передача конфигурации с FrontController вниз или предоставление конфигурации непосредственно классам?

Поскольку я новичок в Java, я пытаюсь изучить сервлеты, не используя рамки (пока).

+1

Не думайте, что это связано с вопросом, но в первом случае вы инициализируете источник данных, соединение и т. Д. Только один раз, то есть при инициализации контекста. Во втором случае это действие будет повторяться для каждого запроса, если все запросы направляются через FrontController. – NINCOMPOOP

ответ

1

Главной целью для Front controller является создание централизованной точки входа для обработки запросов и, следовательно,

для управления навигацией по набору соответствующих страниц (например, несколько страниц могут быть использованы в онлайн-покупке) от передней контроллера, чем это сделать отдельные страницы, ответственные за навигация

, разделяющей ответственность инициализации ресурсов из Front шаблона контроллера является хорошо, и вы выбираете нужное место для этого, так как ServletContextListener несет ответственность за получение уведомлений о жизненном цикле ServletContext. Код внутри класса ServletContextListener будет запущен до запуска веб-приложения.