RPC на JavaScript

Года три назад я написал материал об удаленных процедурах, выполняемых с помощью фреймворка GWT. В то время эта технология действительно выглядела прорывом. Еще бы: клиентский и серверный код пишутся на одном и том же языке! Но за прошедшее время произошло много событий, которые побуждают меня всё чаще писать на чистом JavaScript, особенно там, где не требуется задействовать мощные библиотеки и API.

На стороне сервера использую Node.js, развивающийся в последние месяцы просто космическими темпами. На стороне же клиента — не менее интенсивно развивающийся jQuery, который, помимо возможности рисовать красивые интерфейсы, содержит мощные средства выполнения асинхронных запросов. Ну, а посредником между клиентом и сервером может выступать код в формате JSON (я и раньше его иногда использовал, в GWT для этого есть необходимые пакеты).

Вот как можно организовать передачу JSON-объекта на сервер. На стороне клиента:

var queryParams = {greeting: 'Hello, World!', someBool: true};
$.getJSON('/hello', queryParams, function(data){
     // асинхронный разбор прилетевшего с сервера JSON-объекта.
}


Как принять на стороне сервера (задействован пакет express):

app.get('/hello', function (req, res) {
    res.setHeader('Content-Type', 'application/json; charset=utf-8');
    var someObject = {
        replay: 'Воистину ' + req.query.greeting,
        yesOrNo: req.query.someBool
    };
    res.send(JSON.stringify(someObject));
}


Вот так, довольно бесхитростно. Учитывая то, что с сервера можно присылать довольно сложные объекты, этот метод вполне может заменить GWT в экспресс-проектах, когда городить огород некогда и незачем.

Электронную таблицу - на веб-страницу

Проблема преобразования электронных таблиц в веб-контент не нова. Многие, не мудрствуя лукаво, выгружают свои прайс листы на сайты в бинарном виде, что не делает им чести. Кто-то сохраняет документы в формате html прямо из офисных приложений, что тоже не есть хорошо. Те, кто знаком с серверными технологиями, прикручивают экселевские прайсы к сайтам с помощью ODBC и других хитрых механизмов. А ведь есть старинный способ, который в сочетании с мощью современных фреймворков (в частности, GWT) дает элегантное решение…

В давние времена, когда электронные таблицы были еще зачастую консольными приложениями, широко использовался файловый формат CSV — Coma Separated Values (= значения, разделенные запятыми). Например, создадим такую таблицу:



( Читать дальше )

GWT: веб-страница с вкладками

Веб-страница с вкладками в последнее время без преувеличения стала одним из доминирующих шаблонов.


В GWT есть специальные классы для того, чтобы быстро такой макет реализовать: TabPanel и TabLayoutPanel.

TabLayout появился на ранних этапах развития GWT и всем, вроде, был хорош, за исключением того, что при реализации вкладок использовались тэги <table>, что в нынешнюю эпоху «дивной верстки» счтается некошерным. Поэтому TabPanel обозван в документации всякими нехорошими словами (типа «quirk» и чуть ли не «deprecated»).

TabLayoutPanel, появившийся в свежих версиях GWT (начиная с 2.0) и призванный прийти на замену TabPanel, формируется уже на чистых div'ах, но на него много жалуются разработчики: высота объекта получается фиксированной и если в отведенное пространство что-то не влезает, то просто подрезается, причем даже без появления полос прокрутки. Может от нас что-то скрывают, но найти корректного решения так и не удалось. Пришлось накидать собственный класс, который, кроме всего прочего, может считывать содержимое вкладок в формате JSON. Это очень удобно для управления контентом.


( Читать дальше )

Стыковка GWT и Jquery

Программировать веб-приложения на GWT я начал раньше, чем обратил внимание на возможности библиотеки jQuery. Когда же jQuery игнорировать стало просто невозможно — старался придерживаться мнения, что нет таких задач, которые можно было бы реализовать посредством jQuery и нельзя на GWT. Однако со временем ее возможности стали слишком соблазнительными. Особенно те, которые связаны с созданием уникальных элементов интерфейса, описываемых библиотекой jQuery UI. Неужели GWT оказался тупиком и теперь нужно переучиваться, заново осваивать другой фреймворк? Ни в коем случае. У GWT масса собственных преимуществ: легкое написание обмена данными между клиентом и сервером, использование классов-коллекций из «родного» пространства имен Java, да и в создании GUI-интерфейсов есть возможности, которые пока в jQuery не предусмотрены. Так что единственный путь в такой ситуации — интеграция этих двух фреймворков, благо оба являются всего лишь надстройками над JavaScript.



( Читать дальше )

Гаджеты Google и GWT

Среди многочисленных сервисов «Империи добра» заслуживает внимания механизм iGoogle — настраиваемая домашняя страница, на которой можно размещать всевозможные гаджеты. Это такие миниинформеры, с помощью которых можно узнать погоду, курс валют, свежие анекдоты, почитать новости, сделать заметки на память и т.п. Гаджеты можно размещать не только на своей странице iGoogle, но и в блогах на сервисе blogger.com, а если немного подумать — то и на любой произвольной веб-странице.

Как же устроен гаджет и как его изготовить?


( Читать дальше )

JSON вместо RPC

Многократно упоминавшийся здесь фреймворк GWT (Google Web Toolkit) удобен, помимо всего прочего, тем, что в нем можно использовать удаленные процедуры. Об этому уже был топик и лишний раз достоинства RPC описывать не стоит. Однако обнаружился у этой технологии и существенный недостаток: его практически невозможно использовать с сервером Apache Felix. Дело в том, что OSGi-модули должны включать в себя все необходимые классы, а jar-архив, отвечающий в GWT за RPC слишком велик, чтобы конвертировать его в бандл.

Что же делать? Гонять по сети данные в xml-формате, выковыривая их из DOM-объектов всякими экзотическими способами? К счастью есть более адекватная (и, что немаловажно, более компактная) технология, поддерживаемая в GWT: это JSON (Java Script Object Notation).



( Читать дальше )