2013-10-14 3 views
0

Это мой первый пост на этом форуме. Извиняюсь, если я нарушил какие-либо нормы.tomcat jersey servlet initialization

Я пишу сервлет RESTful внутри контейнера Tomcat и подключаюсь к базе данных при запуске (через JDBC), а затем при получении HTTP-запросов он будет вставлять данные в запрос HTTP POST в базу данных.

Теперь я знаю, что соединение DB может быть инициализировано в контекстеInitialized методом, реализуя интерфейс ServletContextListener в классе веб-навигации jersey. Однако у меня также есть конструктор, который продолжает получать вызовы для каждого запроса HTTP-сообщения. Я просто определил этот конструктор, поскольку я думал, что могу добавить там отладочные сообщения, чтобы понять поток.

Обратите внимание, что мой web.xml имеет параметр нагрузка на-запуск установку 1.

То, что я хотел бы знать, являюсь следующим: Почему Tomcat призывающего моего конструктора WebAPP класса для каждого запроса HTTP, направленного мой веб-сервис? Кроме того, в журналах моего webapp я заметил, что метод init вызывается перед конструктором. Это звучит странно. Правильно ? или нет? Но метод init не вызывается для каждого HTTP-запроса для моего веб-сервиса. Он вызывается только при запуске Tomcat.

Моя версия Tomcat v7.0, и я использую JDK 1.7.

Любая помощь в понимании этого поведения будет принята с благодарностью.

ответ

0

Похоже, что вы совмещаете артефакты разных областей в одном классе, следовательно, странное поведение.

Ожидается, что ServletContextListener будет областью уровня приложения, то есть синглтон, если хотите.

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

Я бы рекомендовал отделить их от двух отдельных классов.

Смежные вопросы