JSP thread safety - еще одни чайниковский вопрос

User avatar
KVA
Уже с Приветом
Posts: 5347
Joined: 03 Feb 1999 10:01
Location: NJ, USA

Post by KVA »

Sabina wrote:Ах вот вы о чем...Теперь понятно.


А вы о чем, если не секрет? :D
User avatar
OBender
Уже с Приветом
Posts: 1564
Joined: 27 Nov 2001 10:01
Location: Live free or die

Post by OBender »

Sabina wrote:Буду очень признательна за пример (линк?) файла где DB connection засунута внутрь класса и в JSP он только вызывается. Сабина


Так вы просто возмите ваш код и сделайте из него класс. Назовите его скажем MyPageProcessor потом в нем там метод сделайте скажем init() неи коннекшен открывайте если надо. А всякие запросы делайте в методе скажем doAction( HttpServletRequest req ) ну и так далее.
Или я чего то не понял?
Интересный вы человек! Все у вас в порядке. Удивительно, с таким счастьем - и на свободе. (C) О.Бендер
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

KVA wrote:
Sabina wrote:Ах вот вы о чем...Теперь понятно.


А вы о чем, если не секрет? :D


То есть кроме сервлета по-другому никак?

Сабина
User avatar
KVA
Уже с Приветом
Posts: 5347
Joined: 03 Feb 1999 10:01
Location: NJ, USA

Post by KVA »

Sabina wrote:То есть кроме сервлета по-другому никак?


JSP, servlet, beans .... На счет четвертого не уверен. А что есть какие-то предубеждения против servlet-ов?
User avatar
Brazen
Уже с Приветом
Posts: 7412
Joined: 03 Apr 2004 09:35
Location: 1st Rock From The Moon

Post by Brazen »

<%@ page isThreadSafe="false"%> - это жестоко, тем более что я не вижу JSP-объявлений, вполне себе нормальная страница, весь код в service(). Нелокальные для service() объекты должны просто синхронизироваться, и все.
Sabina wrote:А то что Джава с HTML перемешана, а как бы вы их тут например разделили?

custom JSP tags
Sabina wrote:Это не сарказм, я правда буду очень рада, если кто-нибудь код покритикует основательно.

Just a note: устанавливать соединение с базой каждый раз (и инициализировать класс драйвера) - это тоже жестоко. Особенно делать это три раза внутри одного и того же service(). Соединения лучше брать из пула. Либо из самодельного, либо из того, который предоставляется сервером. Серверный пул обычно доступен через JNDI lookup.
OBender wrote:А что бы не бояться что все развалится не нужно использовать статических ресурсов без синхронизации.

Не только статических, но и на уровне класса, то есть определенных внутри JSP-объявлений <%! .
Sabina wrote:
KVA wrote:Каждая ASP страница делает несколько вызовов business COM компонентов (естественно никакого SQL в ASP нет и в помине).

По этому поводу у меня один вопрос: а можно это как-то сделать в JSP обойдясь без session и entity beans?

Вызывать любой объект, который не создается внутри каждого service(), а создается один на сеанс или на всю программу.
User avatar
hooch
Уже с Приветом
Posts: 1169
Joined: 16 Jan 2003 23:23

Post by hooch »

Sabina wrote:
KVA wrote:Каждая ASP страница делает несколько вызовов business COM компонентов (естественно никакого SQL в ASP нет и в помине).


По этому поводу у меня один вопрос: а можно это как-то сделать в JSP обойдясь без session и entity beans?

Сабина

используйте обычные Java beans. всю бизнесс логику надо вынести в туда, соединения с базами данных и другими внешними ресурсами тоже.
не используйте threadsafe=false, это то же самое, что single-thread model в сервлетах, огромный performance hit.
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

Спасибо вам всем огромное! Только отъехала в Блокбастер и поужинать, вернулась а тут мне уже столько всего насоветовали!

Palych wrote: - NEVER set up connections inside of JSP;


Это я тоже слышала, но на практике не довелось.

Например в веб сервисах мы в каждом сервисе для каждого метода получали resultSet из conn.prepareStatement(...).executeQuery();
И все стейтменты хранились в отдельном файле. Но там сервис сам по себе уже не клиент, а в JSP не совсем было понятно. Значит выделять в отдельный класс (бин?), пихать его в WEB-INF/lib (или еще куда там веб сервер позволяет) и там в методах вызывать те же prepаredStatements?

Palych wrote:- NEVER use DriverManager (and Class.forName()) to get connection;


Не скопируйте сюда те самые заветные три (или больше?) строки, иллюстрирующие как грамотно в таком случае установить DB connection?

Palych wrote:И еще я обычно придерживаюсь правила: если не получается сделать код изящным и компактным - задача считается невыполненной...


Вот потому я и задаю вопросы :)

Спасибо,
Сабина
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

KVA wrote: что есть какие-то предубеждения против servlet-ов?


Оно как бы одно, но веское:

out.write("\r\n\r\n");
out.write("\r\n");
out.write("\r\n");
out.write("<html>\r\n");
out.write("</body bgcolor='white'>\r\n");
и т.д.

За что тогда боролись? В смысле зачем JSP придумывали...
Но вы видимо говорите о сервлетах куда чисто Java код вынесен, без HTML-я, если я правильно понимаю.

Сабина
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

Brazen wrote:custom JSP tags


О еще вариант. Я бы сама и не подумала в эту сторону посмотреть.

Серверный пул обычно доступен через JNDI lookup.


Говорили мне, что без J2EE ни одно JSP приложение не обходиться...

Сабина
User avatar
OBender
Уже с Приветом
Posts: 1564
Joined: 27 Nov 2001 10:01
Location: Live free or die

Post by OBender »

Brazen wrote:Не только статических, но и на уровне класса, то есть определенных внутри JSP-объявлений <%! .

Если вы посмотрите в сгенерированый сервлет то увидите что все что было в <%! идет в статические переменные/методы.
Интересный вы человек! Все у вас в порядке. Удивительно, с таким счастьем - и на свободе. (C) О.Бендер
User avatar
OBender
Уже с Приветом
Posts: 1564
Joined: 27 Nov 2001 10:01
Location: Live free or die

Post by OBender »

Sabina wrote:Говорили мне, что без J2EE ни одно JSP приложение не обходиться...
Сабина


Вы упорно сопротивляетесь (почему то) :) против того что бы ваш код просто поместить в клас - "бин" не EJB, а просто класс в котором будут различные get/set методы.
Кастом таги это конечно тоже очень хорошо и даже красивее чем бин, но бин быстрее и немного проще. Ведь у вас на страничке 90% это Java.
Интересный вы человек! Все у вас в порядке. Удивительно, с таким счастьем - и на свободе. (C) О.Бендер
User avatar
WildVlad
Уже с Приветом
Posts: 3982
Joined: 13 Jul 2000 09:01
Location: SVX -> BOS -> BUR -> SJC

Post by WildVlad »

Sabina wrote:
OBender wrote:А вообще то ту страничку таки стоит переписать так что бы вся джава была в каком нибудь классе, а JSP были бы только вызовы к нему.


Буду очень признательна за пример (линк?) файла где DB connection засунута внутрь класса и в JSP он только вызывается.

Сабина

Есть такие Tag Libraries в JSP :) Да и Стратсы бывают. Вот они то и помогают убрать логику из JSP в .java :mrgreen:
I hated LA
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

OBender wrote:
Sabina wrote:Говорили мне, что без J2EE ни одно JSP приложение не обходиться...
Сабина


Вы упорно сопротивляетесь (почему то) :) против того что бы ваш код просто поместить в клас - "бин" не EJB, а просто класс в котором будут различные get/set методы.


Нет, я не сопротивляюсь, я наоборот "за" (см. пост до "без J2EE ни одно JSP приложение не обходиться"). Этот комментарий был в адрес JNDI.

Сабина
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

WildVlad wrote:Есть такие Tag Libraries в JSP :)


Спасибо, я уже и примеры в своих умных книжках нашла :)

Сабина
User avatar
vlad12345
Уже с Приветом
Posts: 605
Joined: 14 Feb 2002 10:01
Location: Russia

Post by vlad12345 »

Добавлю свою пару копеек, т.е. линков:
http://developer.java.sun.com/developer ... #JSPIntro7
http://www.jguru.com/faq/view.jsp?EID=150

К тому же заметил пару неточностей в дискуссии:
... threadsafe=false так оно вроде как всегда по умолчанию false
По умолчанию все-таки "true".
... все что было в <%! идет в статические переменные/методы
Это будут переменные/методы instance-a, но не статические, для статических надо явно указывать "static" modifier.

А еще isThreadSafe="false" признан неудачным решением, и в версии JSP 2.0 deprecated.

Return to “Вопросы и новости IT”