Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > сделать сайтик: технология


Автор: nerezus 22.3.2007, 14:42
Люди, вопрос. Предположим, надо сделаь сайтик, который работает под нагрузкой.

При этом желательно, чтобы каждый запрос не обрабатывался в своем процессе(как в пхп), т.е. чтобы была у нескольких запросов общая память(например, хранить кеш, хендл для БД и т.д.)

Какую технологию использовать?
Цель тут: не только сделать сабж, но и въехать в J2EE.

И еще: сайтик должен держать нагрузку, под него будет отдельный сервер(как минимум). Как джава держит нагрузку по сравнению с тем же пхп(nginX, fastcgi, PHP)?

Автор: Tony 22.3.2007, 17:39
Код

При этом желательно, чтобы каждый запрос не обрабатывался в своем процессе(как в пхп), т.е. чтобы была у нескольких запросов общая память(например, хранить кеш, хендл для БД и т.д.)

Запросы в й2ее не рожают отдельный процесс.
Есть контексты: SessionContext, ServletContext, RequestContext, PageContext. В каторых хранят какието данные.По принципу ключ - значение.
Код

Какую технологию использовать?

Их много. На4иная от 4истого ejb до фреймворков (jsf,struts,webwork...) + DB ORM(Hibernate)
Код

И еще: сайтик должен держать нагрузку, под него будет отдельный сервер(как минимум). Как джава держит нагрузку по сравнению с тем же пхп(nginX, fastcgi, PHP)?

Eщё как держит.  smile 

Автор: tux 22.3.2007, 17:43
Цитата(nerezus @  22.3.2007,  14:42 Найти цитируемый пост)

При этом желательно, чтобы каждый запрос не обрабатывался в своем процессе(как в пхп), т.е. чтобы была у нескольких запросов общая память(например, хранить кеш, хендл для БД и т.д.)

Обрабатывать все запросы одним потоком можно используя deprecated SingleThreadModel, это мягко говоря не рекомендуется. В общем случае каждый запрос HTTP обрабатывается отдельным потоком. Кэш можно организовать используя статические атрибуты и методы или паттерн Singleton. Соединение с базой данных оычно берется из пула соединений, который либо встроен в конкретный сервер приложений либо либо используется какая-то готовая реализация типа Jakarta DBCP. Вообще все общее, что должны разделять множество потоков, обычно реализуется с помощью Singleton.

Цитата(nerezus @  22.3.2007,  14:42 Найти цитируемый пост)
Какую технологию использовать?

Технологию чего?

Цитата(nerezus @  22.3.2007,  14:42 Найти цитируемый пост)
И еще: сайтик должен держать нагрузку, под него будет отдельный сервер(как минимум). Как джава держит нагрузку по сравнению с тем же пхп(nginX, fastcgi, PHP)? 

Довольно распространена практика перевода сайтов с PHP на Java, об обратном не слышал. Думаю, это говорит само за себя.

Добавлено @ 17:44 
Цитата(Tony @  22.3.2007,  17:39 Найти цитируемый пост)
Запросы в й2ее не рожают отдельный процесс.

Каждый запрос обрабатывается отдельным потоком. Другое дело, что веб-контейнер как правило эти потоки не создает каждый раз, а использует пул потоков.

Автор: AntonSaburov 22.3.2007, 17:48
Хорошо, только надо памяти побольше. И будет вполне пристойно. Работает уже "разогретый" варинат JVM очень прилично по скорости.

Автор: nerezus 22.3.2007, 17:50
Цитата

Технологию чего?
 Сервлеты, джавабинс, jsp и т.д.

Добавлено @ 17:57 
Цитата

только надо памяти побольше
 Просто "побольше", или "побольше, чем пхп"?

Автор: AntonSaburov 22.3.2007, 19:20
Цитата(nerezus @  22.3.2007,  17:50 Найти цитируемый пост)
Просто "побольше", или "побольше, чем пхп"?

Все зависит от нагрузки, но меньше 1 Гига лучше не делать.

И PHP требует (во всяком случае раньше требовал) меньше памяти. Но ее-то как раз не проблема поставить - она теперь дешевая. Не то, что лет 10 назад. Тогда 1 Мб стоил около 50 долларов

Автор: nerezus 22.3.2007, 20:23
Тут нашел пример такой: 
Код

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Hello World!</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Hello World!</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}


Т.е. т.к.синтаксис джавы я знаю, то могу юзать ее.  Но, чую, что без фреймворков почти никто не работает? Я прав?
Сейчас посмотрел примеры - все вроде кристально ясно.

Стоит ли заниматься сервлетами или поискать другую технологию?

Кстати, если я создаю объекты из сервлета, которые записывают ссылку на себя в статик-переменные класса, то такие объекты не удаляются до перезагрузки сервера?

Автор: tux 22.3.2007, 20:32
Цитата(nerezus @  22.3.2007,  20:23 Найти цитируемый пост)
Но, чую, что без фреймворков почти никто не работает? Я прав?

Абсолютно.

Цитата(nerezus @  22.3.2007,  20:23 Найти цитируемый пост)
Стоит ли заниматься сервлетами или поискать другую технологию?

Технологию сервлетов знать надо хотя бы потому что все фреймворки на них построены и понимать как они работают - это, на мой взгляд, необходимость. А вот писать используя голые сервлеты/JSP, думаю, не имеет большого смысла. Разве что если сам свой фреймворк напишешь, что будет крайне полезно. Правда с нуля врял ли что-то путнее получится, поэтому лучше взять готовый, коих великое множество, на любой вкус и цвет. smile

Цитата(nerezus @  22.3.2007,  20:23 Найти цитируемый пост)
если я создаю объекты из сервлета, которые записывают ссылку на себя в статик-переменные класса, то такие объекты не удаляются до перезагрузки сервера?

Да, не удаляются до перезапуска JVM.

Автор: nerezus 22.3.2007, 20:50
Спс за советы. А что надо для разработки?
Есть JDK SE 1.6, EE нету, но она нужна? сервлеты же работают вроде?

и еще, какой фреймворк посоветуете?

Автор: JUncle 22.3.2007, 20:58
Цитата(nerezus @  22.3.2007,  20:50 Найти цитируемый пост)
Есть JDK SE 1.6, EE нету, но она нужна? сервлеты же работают вроде?

Насколько я понял, сейчас тебе EE не нужна.
servlet-api и т.п., не входящее в состав J2SE, поставляется с сервлет-контейнерами/серверами приложений.

Автор: tux 22.3.2007, 21:35
Цитата(nerezus @  22.3.2007,  20:50 Найти цитируемый пост)
А что надо для разработки?

Нужен какой-нибудь веб-контейнер, Tomcat, например,- он самый распространенный и считается эталонной реализацией сервлетов и JSP. Хорошо бы еще IDE, которая поддерживает разработку веб-приложений. Впрочем, и Netbeans и IDEA и Eclipse это умеют, последняя в комплекте с WTP-плагинами.

Цитата(nerezus @  22.3.2007,  20:50 Найти цитируемый пост)
и еще, какой фреймворк посоветуете? 

Это вопрос сложный. Их очень много. Рекомендовал бы Spring, но я думаю с него будет сложно начинать поскольку это не только веб-фреймворк, это гораздо больше. Поэтому лучше взять что-нибудь попроще, например, http://mav.sourceforge.net/ или http://struts.apache.org/.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)