![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| initmax |
|
||||||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Доброго, столкнулся с проблемой создания проинициализированного объекта внутри Servlet.
В Servlet осуществляю: 0) подключение к БД mySQL; 1) выполнение запроса по БД 3) формирование массива объектов с данными из БД вот исходники 0) Класс подключения к БД
1) Класс отвечающий за запросы по БД
2) Класс который инкапсулирет информацию выбраную из БД package MySQL;
3) И наконец сам Servlet который испоьзует вышеперечисленные классы
Валится на этих вот строках
ошибка такова:
Что характерно, данные классы работают как обычный Java проект, если же данные классы вызывать из Servlet, получаю ошибку. |
||||||||||||
|
|||||||||||||
| ivanovpv |
|
|||
![]() Варвар ![]() ![]() Профиль Группа: Участник Сообщений: 639 Регистрация: 26.1.2005 Где: Москва Репутация: 2 Всего: 28 |
Сразу видно PHP'ешника по полету
1) Если ближе к теме, то инициализацию драйвера JDBC надо выносить в метод init() сервлета, не дело при каждом запросе создавать новый коннект к БД, который как известно ресурс исчерпаемый и драгоценный. При запросе надо только проверять живо ли соединение или нет. 2) Далее после запроса положено закрывать ResultSet, а перед скроллированием записей в ResultSet неплохо бы убедиться, что он не пуст. ResultSet.next() при пустом запросе запросто может сгенерировать Exception. 3) Зачем вы создаете перед запросом Vector? Он же все равно создается внутри класса MySQLQuery? 4) Далее согласно стандартному стилю именований методов в Java если имя метода начинается с глагола, то его надо писать маленькими буквами. Например не SelectAllFields(), а selectAllFields() Ну это все относится к стилю, а не к сути. По сути вы устанавливаете соединение с БД, но не проверяете живо оно или нет, просто выдаете printStackTrace() и идете дальше. Ну вот поэтому и получаете NullPointerException. А соединение с БД вы (как уже говорил выше) устанавливаете при каждом запросе и через несколько запросов ресурсы коннектов БД заканчиваются. -------------------- Aut viam inveniam aut faciam |
|||
|
||||
| initmax |
|
||||||||||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Да Вы правы, вот переучиваюсь
Благодарю за критику метод init() в сервлете это тот который вызывается автоматически? сервлет должен выглдять так?
Так в классе отвечающем за запросы MySQLQuery устанлена обработка исключительных ситуаций, или кроме всего прочего надобно делать проверку наличия выборки по БД? if(resultQuery == null) { return VectorPageObj; } package MySQL; /* * To change this template, choose Tools | Templates * and open the template in the editor. */
Так или я что-то не понял?
Да он создаётся внутри класса,но объявлен как private, поэтому метод возвращает Vector ссылка на который инициализируется в indexServlet VectorPage = MySQLQueryObj.SelectAllField("up_menu"); или Вы полагаете более верным решением создать в классе MySQLQuery метод GetVector?
Учту, Благодарю!
Делать так как указал выше в классе public class indexServlet? |
||||||||||||||||
|
|||||||||||||||||
| ivanovpv |
|
|||
![]() Варвар ![]() ![]() Профиль Группа: Участник Сообщений: 639 Регистрация: 26.1.2005 Где: Москва Репутация: 2 Всего: 28 |
Нет - не люблю я ваш PHP, просто приходилось разбираться в PHP кодах. 1) проверять живость соединения надо не только проверкой на null, но также и вызовом isClosed() 2) init() сервлета нельзя вызывать самому 3) по-поводу создания Vector все равно неправильно. Код конечно будет работать, но созданный объект Vector будет теряться. А вообще по умному надо, чтобы соединение JDBC выдавал вам веб сервер через JNDI - надо настраивать сервер. В общем вам учиться и учиться, дерзайте -------------------- Aut viam inveniam aut faciam |
|||
|
||||
| initmax |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Трагизм в том что аналогичные классы созданые как Java project с таким вот Main
Работает на УРА.. З.Ы. лог сервера TOMCAT без ругани |
|||
|
||||
| ivanovpv |
|
|||
![]() Варвар ![]() ![]() Профиль Группа: Участник Сообщений: 639 Регистрация: 26.1.2005 Где: Москва Репутация: 2 Всего: 28 |
Ага вот именно поэтому клиент-серверным программерам платят больше, а консольным копейки Чтобы он ругался, надо чтобы у вас был подключен логгер, почитайте например здесь -------------------- Aut viam inveniam aut faciam |
|||
|
||||
| initmax |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
об авторе статейки
буду гуглить на предмет логирования веб-сервером выполнения сервлета |
|||
|
||||
| initmax |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
28.10.2009 15:41:58 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jdk1.5.0_06\bin;.;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\PC Connectivity Solution\;C:\Java\jre6\bin;;;C:\Program Files\Java\jdk1.5.0_06\bin 28.10.2009 15:41:58 org.apache.coyote.http11.Http11Protocol init INFO: Initializing Coyote HTTP/1.1 on http-8080 28.10.2009 15:41:58 org.apache.catalina.startup.Catalina load INFO: Initialization processed in 899 ms 28.10.2009 15:41:58 org.apache.catalina.core.StandardService start INFO: Starting service Catalina 28.10.2009 15:41:58 org.apache.catalina.core.StandardEngine start INFO: Starting Servlet Engine: Apache Tomcat/6.0.20 28.10.2009 15:41:59 org.apache.catalina.core.StandardContext resourcesStart SEVERE: Error starting static Resources java.lang.IllegalArgumentException: Document base K:\NetBeans_project\FirstServlet\build\web does not exist or is not a readable directory at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:142) at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4048) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4217) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:630) at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:556) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:491) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardHost.start(StandardHost.java:722) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:516) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:583) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) 28.10.2009 15:41:59 org.apache.catalina.core.StandardContext start SEVERE: Error in resourceStart() 28.10.2009 15:41:59 org.apache.catalina.core.StandardContext start SEVERE: Error getConfigured 28.10.2009 15:41:59 org.apache.catalina.core.StandardContext start SEVERE: Context [/FirstServlet] startup failed due to previous errors 28.10.2009 15:41:59 org.apache.catalina.core.StandardContext stop INFO: Container org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/FirstServlet] has not been started 28.10.2009 15:42:01 org.apache.coyote.http11.Http11Protocol start INFO: Starting Coyote HTTP/1.1 on http-8080 28.10.2009 15:42:01 org.apache.jk.common.ChannelSocket init INFO: JK: ajp13 listening on /0.0.0.0:8009 28.10.2009 15:42:01 org.apache.jk.server.JkMain start INFO: Jk running ID=0 time=0/156 config=null 28.10.2009 15:42:01 org.apache.catalina.startup.Catalina start INFO: Server startup in 2502 ms 28.10.2009 15:42:02 org.apache.catalina.startup.HostConfig checkResources INFO: Undeploying context [/initmax] 28.10.2009 15:42:02 org.apache.catalina.core.StandardContext start INFO: Container org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/initmax] has already been started Судя по всему контейнер сервлет не может стартовать, а почему? |
|||
|
||||
| ivanovpv |
|
|||
![]() Варвар ![]() ![]() Профиль Группа: Участник Сообщений: 639 Регистрация: 26.1.2005 Где: Москва Репутация: 2 Всего: 28 |
Тут же все написано... -------------------- Aut viam inveniam aut faciam |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
initmax,
У меня один вопрос: а зечем изобретать колесо? Можно же пользоваться уже давно разработанными и оттестированными инструментами. |
|||
|
||||
| initmax |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Hibernate ? |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
||||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 5 Всего: 191 |
initmax,
|
|||
|
||||
| initmax |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Для начала я разбираюсь в технологических аспектах, потом фреймворк. Переход на jdk 1.6, проблему решил. всем Спасибо. |
|||
|
||||
| ivanovpv |
|
|||
![]() Варвар ![]() ![]() Профиль Группа: Участник Сообщений: 639 Регистрация: 26.1.2005 Где: Москва Репутация: 2 Всего: 28 |
Вот это правильно! А то уже сталкивался, что народ за фреймворком не видит (и что самое страшное не понимает) как все работает. Hibernate еще успеете поковыряться, там тоже своих тараканов хватает -------------------- Aut viam inveniam aut faciam |
|||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 5 Всего: 191 |
ivanovpv, ну так ведь никто не спорит !
Разбираться конечно надо. Но зачем изобраетать то, что уже есть ? Качай, подключай и пользуйся ! Напиши простейшее приложение на хибернете и продеббаж его. Но если времени свободного у человека вагон, то пусть занимается этим У меня к примеру, нет времени писать аналоги существующим фреймворкам. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |