| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > объектная работа с Mysql в Servlet |
| Автор: initmax 27.10.2009, 17:56 | ||||||||||||
| Доброго, столкнулся с проблемой создания проинициализированного объекта внутри Servlet. В Servlet осуществляю: 0) подключение к БД mySQL; 1) выполнение запроса по БД 3) формирование массива объектов с данными из БД вот исходники 0) Класс подключения к БД
1) Класс отвечающий за запросы по БД
2) Класс который инкапсулирет информацию выбраную из БД package MySQL;
3) И наконец сам Servlet который испоьзует вышеперечисленные классы
Валится на этих вот строках
ошибка такова:
Что характерно, данные классы работают как обычный Java проект, если же данные классы вызывать из Servlet, получаю ошибку. |
| Автор: ivanovpv 28.10.2009, 09:12 |
| Сразу видно PHP'ешника по полету 1) Если ближе к теме, то инициализацию драйвера JDBC надо выносить в метод init() сервлета, не дело при каждом запросе создавать новый коннект к БД, который как известно ресурс исчерпаемый и драгоценный. При запросе надо только проверять живо ли соединение или нет. 2) Далее после запроса положено закрывать ResultSet, а перед скроллированием записей в ResultSet неплохо бы убедиться, что он не пуст. ResultSet.next() при пустом запросе запросто может сгенерировать Exception. 3) Зачем вы создаете перед запросом Vector? Он же все равно создается внутри класса MySQLQuery? 4) Далее согласно стандартному стилю именований методов в Java если имя метода начинается с глагола, то его надо писать маленькими буквами. Например не SelectAllFields(), а selectAllFields() Ну это все относится к стилю, а не к сути. По сути вы устанавливаете соединение с БД, но не проверяете живо оно или нет, просто выдаете printStackTrace() и идете дальше. Ну вот поэтому и получаете NullPointerException. А соединение с БД вы (как уже говорил выше) устанавливаете при каждом запросе и через несколько запросов ресурсы коннектов БД заканчиваются. |
| Автор: initmax 28.10.2009, 10:38 | ||||||||||||||||
Да Вы правы, вот переучиваюсь
Благодарю за критику метод 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? |
| Автор: initmax 28.10.2009, 13:01 | ||
Трагизм в том что аналогичные классы созданые как Java project с таким вот Main
Работает на УРА.. З.Ы. лог сервера TOMCAT без ругани |
| Автор: ivanovpv 28.10.2009, 15:22 | ||
Ага вот именно поэтому клиент-серверным программерам платят больше, а консольным копейки Чтобы он ругался, надо чтобы у вас был подключен логгер, почитайте например http://artamonov.ru/2007/04/06/vvedenie-v-log4j/ |
| Автор: initmax 28.10.2009, 16:08 | ||
об авторе статейки
буду гуглить на предмет логирования веб-сервером выполнения сервлета |
| Автор: initmax 28.10.2009, 16:51 |
| 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 28.10.2009, 21:12 | ||
Тут же все написано... |
| Автор: ShurikA 28.10.2009, 22:12 |
| initmax, У меня один вопрос: а зечем изобретать колесо? Можно же пользоваться уже давно разработанными и оттестированными инструментами. |
| Автор: initmax 29.10.2009, 09:39 | ||
Hibernate ? |
| Автор: ShurikA 29.10.2009, 22:20 |
да, на пример. Или любой другой JPA. |
| Автор: Samotnik 30.10.2009, 11:01 |
| initmax, |
| Автор: initmax 30.10.2009, 11:49 | ||
Для начала я разбираюсь в технологических аспектах, потом фреймворк. Переход на jdk 1.6, проблему решил. всем Спасибо. |
| Автор: ivanovpv 30.10.2009, 12:37 | ||
Вот это правильно! А то уже сталкивался, что народ за фреймворком не видит (и что самое страшное не понимает) как все работает. Hibernate еще успеете поковыряться, там тоже своих тараканов хватает |
| Автор: Samotnik 30.10.2009, 13:53 |
| ivanovpv, ну так ведь никто не спорит ! Разбираться конечно надо. Но зачем изобраетать то, что уже есть ? Качай, подключай и пользуйся ! Напиши простейшее приложение на хибернете и продеббаж его. Но если времени свободного у человека вагон, то пусть занимается этим У меня к примеру, нет времени писать аналоги существующим фреймворкам. |