![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
RussianHero |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 14.8.2007 Где: г. Балашиха, МО Репутация: нет Всего: нет |
Добрый день, господа джавощики!
Суть темы в следующем: Разрабатываю вёб-приложение с довольно простым содержимым: есть БД (Оракл) и есть странички (JSP). Пользователь открывает бразуер, подключается к серверу. Видит формочку аутентификации, вводил логин и пароль и нажимает "Submit". После чего, данные формы передаются в ... сервлет (??? вы скажите куда лучше), который внутри себя должен проверить, существует ли этот пользователь в БД или нет, и если да, то перебросить на другую страничку, иначе, вернуть на форму логина/пароля и сказать всё, что думает об этом человеке. Так вот внимание, вопрос: каким механизмом (сервлет, бин (не хотелось бы, так как я понимаю это больше вёб-сервис, чем реальный объект), сама JSP, самописный объект Джава, что-то другое) лучше всего сделать так, чтобы подключение (использую просто JDBC) к БД осуществлялось лишь один раз за время работы вёб-прилжения? Работа с БД осуществляется чуть ли не на каждой JSP-страничке, и каждый раз подключаться к ней, сами понимаете, не айс. Хочется сделать "правильное" приложение, чтобы, например, при старте вёб-сервера (Томкет 7), каким-то образом создавался объект Connection, который, сами понимаете, подключался бы к БД и просто "висел". А из каждой JSP-шки, когда мне нужно будет обратиться к БД, я бы просто брал бы этот объект, и выполнял бы SQL-запрос и выводил бы содержимое на страницу. Хочется сразу отметить, что пытаюсь по максимуму развести представление от логики (MVC), по этому, хочу использовать сервлеты, просто объекты Джава и JSP. Иначе давно бы уже всё засунул в JSP-шки, как ПХПшники и не парился бы 8) И ещё маленький вопрос, никто не в курсе, зачем у Оракла на сайте есть OJDC (Oracle Java DB Connection), аналог JDBC, если есть и так прекрассно работающий JDBC? То есть стоит ли подключать Оракловую JAR-ку, чтобы работать с БД, или стоит использовать стандартную JDBC? Буду очень признателен, если ещё поможете кодом. З.Ы. Пришёл в джаву и вёб из толстого программизма (паскаль, плюс плюс, шарп), так что для меня все эти реквесты и респонсы, сессии, сервлеты и т.п. - очень новая тема. Терминологию более менее понимаю, а парктика близка к нулю. Так что не глумитесь пожалуйста, а отнеситесь с пониманием. Спасибо. |
|||
|
||||
Entwickler |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 14.4.2007 Репутация: нет Всего: 2 |
Привет,
в context.xml твоего Tomcat добавляешь что то вроде:
в web.xml твоего приложения:
в Java классе, который должен получить/записать данные в DB, пишешь:
ну вроде и всё... "Тигрёнок" сам будет работать с соединениями к базе... а вообше поищи: Database Connection Pooling, Container managed database connection... |
||||||
|
|||||||
Entwickler |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 14.4.2007 Репутация: нет Всего: 2 |
P.S
и посмотри ещё в сторону Spring... очень мошьный Framework. Если предпочитаешь MVC, то для тебя очень хорошо подойдёт Spring MVC. Для работы с данными лучше использовать DAO и VO. (DataAccessObject, ValueObject)... DAO работает с DB и возвращают "заполненные" VO обекты. Эти самые VO ты и отображаешь потом на странице... Если есть вопросы, пиши Privat, чем смогу, помогу... |
|||
|
||||
RussianHero |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 14.8.2007 Где: г. Балашиха, МО Репутация: нет Всего: нет |
Entwickler, спасибо за ответ!
Но мне бы хотелось как можно меньше возиться с настройками самого контейнера... Я где-то читал, что можно даже прописать в конфиге структуру таблицы "USERS", драйвер БД самом собой и т.п., так, что будут логин и пароль проверяться Томкетом самостоятеельно. Но я ка краз так не хочу. Необходимо по минимуму трогать контейнер. Тока вёб.хмл придётся править из-за сервлетов и всё. Я не сомневаюсь в мощьмности Томкета или другого контейнера, но мне необходимо сделать упор на программирование в Джаве. Сервлеты и JSP. Я даже неоднократно как-то читал, что сервлеты для того и следует использовать, чтобы они работали с БД, а JSP читали результаты их работы. При том что где-то в сервлете можно задать "уровень его жизни" (1 раз создаётся при старте контейнера и существует всегда, или же для каждой сессии создаётся новый или же для каждой страницы и т.п.) Если я ошибаюсь на счёт сервлетов, то объясните, что следует использовать в моё случае (самописаня JAR-ка с объектами или что-то дургое). Постараюсь объяснить что нужно таким образом: Есть JSP - login.JSP. В ней есть
В сервлете LoginServlet необходимо сделать так: чтобы функция CheckUser() проверила введённые FORM_LOGIN_NAME и FORM_LOGIN_PASSWORD. Для этого, в этом сервлете вызывается объект Connection, который уже должен быть где-то и присоединён к БД. Далее делается простой запрос на сответствеи введённых данных таблице в БД. и сервлет должен ерекинуть на нужную страницу. Допустим аутентификация удалась и нас перекинуло на страницу main.jsp. В ней я хочу вевести содержимой другой таблицы из базы. Для чего я просто делаю
и дальше SQL-запрос. Вывожу его результаты в обычной табличке, что-то типа:
То есть хочется всё сделать по максимуму на джаве. Так что по возможности, помогите шаблонами классов/сервлетов ну и объясните мне, как всё это реализовать? 8) Добавлено через 1 минуту и 55 секунд Я много читал про разные фреймворки, Спринг, Гибернейт и т.п. Но дело в том, что я ещё для этого слишком мало знаю... Мне нужно за месяц сделать то, что я тут описал. При том что в джаве, а то чнее в вёб-технологиях, как видите, я не очень силён. так что хочу просто начать с начала сделав такой маленький, обыкновенный, без фреймворков, джава бинсов, фильтров контейнера и т.п. приложение. |
||||||
|
|||||||
Entwickler |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 14.4.2007 Репутация: нет Всего: 2 |
ну если только масимально на Java, то...
на твоём месте я бы изменил форму:
твой сервлет:
ну вот и всё вроде... и ещё используй Servlet Filter чтобы фильтровать запросы на ресурсы... то есть все странички в папке secure закрыты пока не залогинешся... |
||||
|
|||||
RussianHero |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 14.8.2007 Где: г. Балашиха, МО Репутация: нет Всего: нет |
Вооот! Уже почти то чно надо!
Спасибище, Entwickler! Осталось пару вещей уяснить: 1. //имплиментируй логику Я тут как раз и хотел узнать, как это сделать проще/выгоднее/правильнее. То есть не буду же я в этом сервлете создавать подключение для проверки логина/пароля,а потом на странице main.jsp для вывода содержимого таблицы, заново подключатся? Хотелось бы в этой логике получить какой-то огбъект Connection, который был создан ранее, ну или будет создан тут впервые, а потом будет везде доступен. Вот и необходимо уяснить, что это за объект такой (ещё один сервлет или просто клкасс и JAR-ки. и как его написать/проинициализировать и сделать видимым отовсюду. 2. По поводу сервлет-фильтра. Буду очень признателен, если приведёте маленький примерчик, чем проще, тем лучше 8) Но, как я уже говрил, надо максимально джаватизировать приложение. А это значит что я скорее всего пойду по пути: после проверки логина в сессию пользователя добавлю атрибут (строку какую-нибудь, что он залогинен и имеет такие-то права). А на всех страничках сделаю инклюд какого-нибудь заголовка (другой JSP-шки), которая будет проверять наличие этого атрибута у сессии, и если его не будет - то перекидывать на login.jsp. Кстати, если поможете кодом в осуществлении моей идеи, опять же, буду на 7ом небе от счастья. Как видите, вроде в терминологии чего-то понимаю, но практики считайте что нет. Посему и хочу тут выведать побольше. Заранее благодарю! |
|||
|
||||
ynblpb |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 24.9.2007 Репутация: нет Всего: нет |
Можешь использовать Singleton
И в коде обращайся к нему MyConnection.getConn(). Но лучше используй пул соединений. Это сообщение отредактировал(а) ynblpb - 16.5.2011, 13:15 |
|||
|
||||
RussianHero |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 14.8.2007 Где: г. Балашиха, МО Репутация: нет Всего: нет |
ynblpb, как я говорил, фреймворки не хочу, да и не могу использовать. Недостаточно ещё опытен для них...
Пока что сделал вот как: Создал сервлетв котором вот такие вот пироги:
DButil.setConnection(...) Записывает в статическую переменную DButil.connection моё соединение. и дальше я с ним работаю. Так что наверное вопрос по теме как бы снят, но если у кого есть ответы по моему предыдущему посту, скажу спасибо! З.Ы. Зачем в Web.xml объявлять <servlet> ... и <servlet-mapping>, если и без этого вроде как сервлет вызывается и нормально работает? И что ещё вот это вот за хрень такая: @WebServlet(description = "Servlet for authentication process", name = "LoginSvl", urlPatterns={"/LoginSvl"}) и зачем она нужна? |
|||
|
||||
Entwickler |
|
||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 14.4.2007 Репутация: нет Всего: 2 |
это то же самое что и
то есть декларирует сервлет и урл по которому ты обращаешся к нему... Servlet 3.0 спецификация. Добавлено через 31 секунду кстати именно по этому и не нужна декларация сервлета в web.xml... Добавлено через 3 минуты и 33 секунды в твоём методе используй
|
||||||||
|
|||||||||
ynblpb |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 24.9.2007 Репутация: нет Всего: нет |
Это не фреймворк, это паттерн. Который говорит о том что: класс созданный таким образом будет в приложении единственным экземпляром. Хотя приведенный пример не совсем Singleton. По моему то что тебе надо... Почитай про статические переменные. |
|||
|
||||
RussianHero |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 14.8.2007 Где: г. Балашиха, МО Репутация: нет Всего: нет |
Entwickler, благодарю про разъяснение о @WebServlet
Просто даже в голове не укаладывается, как это может работать и к чему это относится... А почему это:
? Это про return'ы? ynblpb, фреймворк я хотя бы знаю что есть такое 8) а при слове "паттерн" у меня в голове только регулярные выражения возникают... ![]() Я как бы это и сделал в своём примере - статической переменной. Но минус такой реализации-то овт в чём: каждый раз, когда у меня вызывается сервлет, у меня вызывается DButil.setConnection(...), а это значит, что если пользователь ввёл пароль неправильно 10 раз, у меня 10 раз создавалось подключение заново. ![]() Я как бы и хотел этого избежать. |
|||
|
||||
Entwickler |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 14.4.2007 Репутация: нет Всего: 2 |
для того чтобы не создавать по 10 "коннектов", как я уже и говорил используй Connection Pooling! Коннекты хронятся в poole и ты берешь просто себе один использовал и назад в pool!
смотри: Connection Pooling Добавлено через 1 минуту и 2 секунды а другого пути кроме как постоянно создавать новое соединение нет |
|||
|
||||
RussianHero |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 14.8.2007 Где: г. Балашиха, МО Репутация: нет Всего: нет |
Entwickler, спасибо за ссылочку. Очень интересно, коротко и ясно. Буду иметь в виду.
Так по чему лучше Boolean.TRUE и Boolean.FALSE? из-за того что указатель что ли передаётся а не значение? З.Ы. Где таких умных держат? 8) Где работаете или чем занимаетесь, если не секрет? Просто по-моему, люди шарящие очень хорошо в вёб-джаве - это самые востребованные ай-тишники в ближайшем будущем да и сегодня. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |