пятница, 8 февраля 2013 г.

Vaadin 7.0.0, Netbeans. Как быстро создать проект.

Заранее прошу прощения за слишком подробное описание, но так можно избежать многих лишних вопросов от тех, кто никогда не работал в Netbeans и/или c Vaadin.

С выходом стабильной 7-й версии веб-фреймворка Vaadin, захотелось создать тестовый проект, а так же позже перетащить основной с 6-ки на 7-ку.
Здесь я не стану описывать как создать проект с помощью, скажем так, архитектурного файла maven, потому как, практически им не пользуюсь за ненадобностью (когда понадобится - разберусь подробно :) ), все это есть на сайте Vaadin'а.
Создаем простой проект с локальными библиотеками vaadin. Такой, чтобы можно было запустить и отобразить надпись "Hello Vaadin!" с помощью компонентов фреймворка.

И так поехали, что нам нужно (будем брать последние на текущий момент версии):
- Netbeans 7.2
- Пакет с jar-файлами, качаем отсюда.

Погнали:
Создаем новый проект в Netbeans:
- File - New Project - Java Web - Web Application.
- Пишем имя проекта в поле Project Name, назовем его "Vaadin7". При желании, выберем расположение папки проекта.
- Next
- Выбираем в выпадающем меню наш сервер приложений. У меня это Apache Tomcat. Выбор сервера приложений это отдельная тема. Выбираем версию Java EE, как правило работаем с 6-й.
- Поле Context Path я очистил, это путь, который будет отображаться в браузере, сразу после локального адреса, например наш Context Path = /gtm это значит, что в браузере при запуске будет написано что-то вроде этого http://localhost:8080/gtm. Я же хочу, чтобы проект грузился просто при заходе по http://localhost:8080/. Этот параметр можно настроить позже в файле context.xml или в свойствах проекта.
- Next
- На следующей странице нам предлагают выбрать фреймворки, пропускаем это окно и жмем Finish.

Проект создан, но главная страница у него это *.jsp, нам это не нужно, мы хотим Vaadin :)
По умолчанию структура такая:










- Удаляем файл index.jsp

Создаем файл web.xml в каталоге WEB-INF.
- Жмем правой кнопкой по этой папке
- New - Other - XML - XML Document.
- Называем его web, но сам файлик, как вы увидите в поле ниже, будет в расширением xml.
- Выбираем в следующем окне тип нашего XML - Well-formed Document (по умолчанию) и жмем Finish.

Удаляем все что в нем понаписано и вставляем следующий текст:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
    id="WebApp_ID" version="2.4"
                   xmlns="http://java.sun.com/xml/ns/j2ee"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 
    <servlet>
        <servlet-name>Login</servlet-name>
       <servlet-class>com.vaadin.server.VaadinServlet</servlet-class>
        <init-param>
            <description>Vaadin application class to start</description>
            <param-name>UI</param-name>
            <param-value>nix.common.LoginForm</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>Login</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
 
</web-app>


- Сохраняем.


Теперь создадим в папке Source Packages новые папки/пакеты.
- Правой кнопкой по папке
- New - Other - Other - Folder. Либо New - Java - Java Package.
(По факту не важно что вы добавите папку или пакет, для Java оно не важно, физически пакеты это папки.)
- Назовем первую папку nix.
- Таким же макаром в папке nix, создадим папку common.
- В папке common создадим java-файл с именем LoginForm.java. Создается точно так же как и папки/пакеты, но выбираем New - Other - Java - Java Class. (Все добавленные ранее типы объектов остаются в списке быстрого добавления, думаю вы уже заметили).
Пока файл трогать не будем, давайте добавим в проект скачанные ранее библиотеки Vaadin 7.

Распакуем скачанный архив, вот его структура:























Нам понадобятся 8 файлов, 7 из корневой папки:
- vaadin-client-7.0.0.jar
- vaadin-client-compiled-7.0.0.jar
- vaadin-client-compiler-7.0.0.jar
- vaadin-server-7.0.0.jar
- vaadin-shared-7.0.0.jar
- vaadin-theme-compiler-7.0.0.jar
- vaadin-themes-7.0.0.jar

и один из папки libs:
- jsoup-1.6.3.jar

Соберем их все в одну папку и сохраним куда-нибудь отдельно, туда, где мы будем хранить библиотеки.
Щелкаем правой кнопкой по папке Libraries и может:
- Add JAR/Folder  (сразу добавляем все наши файлы к проекту, для примера я так и сделал).
- Add Library (Если вы через меню Netbeans'a, Tools - Ant Libraries, добавили и как-нибудь назвали свою библиотеку).
В итоге получили такую вот структуру проекта:






















Вернемся к нашему java классу LoginForm.java, дополним его кодом, получим следующее содержание:


package nix.common;

import com.vaadin.server.VaadinRequest;
import com.vaadin.ui.Label;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;

public class LoginForm extends UI {

    @Override
    protected void init(VaadinRequest request) {
        VerticalLayout view = new VerticalLayout();
        view.addComponent(new Label("Hello Vaadin!"));
        setContent(view);
    }
}

Вот и все.
Теперь, если вы все сделали верно, то при запуске откроется ваш браузер по-умолчанию и в нем будет надпись "Hello Vaadin!" на сером фоне.



Основные, отличия 7-го Vaadin'а от 6-го в плане настроек это то, что теперь вместо пакета
com.vaadin.Application
используется
com.vaadin.ui.UI
Что и было использовано в java-классе.

Кроме того, пришлось изменить и web.xml.
Раньше было: <servlet-class>com.vaadin.terminal.gwt.server.ApplicationServlet</servlet-class>
Теперь: <servlet-class>com.vaadin.server.VaadinServlet</servlet-class>
и
Раньше было:
                       <init-param>
            <param-name>application</param-name>
            <param-value>nix.common.LoginForm</param-value>
                      </init-param>
Теперь:
                      <init-param>

            <param-name>UI</param-name>
            <param-value>nix.common.LoginForm</param-value>
                     </init-param>

Кроме того, теперь не нужно качать отдельно пакеты GWT и компилить их для проекта, они уже включены в библиотеки в том виде, в котором нужно.
Есть вопросы - пишите их в комментариях, а я пока пошел добавлять другой функционал в тестовый проект :)

2 комментария :

  1. Не работал с vaadin, но так назревает вопрос, а в чем преимущество ? Получается, какой либо клик по странице, порождает запрос на сервер. Создается излишняя нагрузка. Да и с версткой, наверное, умаешься ?

    ОтветитьУдалить
    Ответы
    1. Больше подходит для корпоративных приложений в локальной сети, хотя у меня работает проект и извне, правда около 20 пользователей. Есть знакомый по группе в ВК, у него около 1000 внешних пользователей, все нормально :)
      Сетевой трафик, конечно, есть, но не критично большой для корпоративных.

      Удалить