Wednesday, October 19, 2011

Создаем приложение с помощью Spring и GWT. Часть 1 - Настраиваем Spring

Недавно я начал работу в проекте, в котором используется новая для меня технология - GWT. Решил написать небольшое приложение, использующее этот фреймворк и Spring. Начнем с конфигурации последнего.

В процессе написания приложения будут использоваться:
  • Java 8
  • Spring 4.2.4
  • GWT 2.7.0
  • Maven 3.3.3
  • Tomcat 8.0.30

Для сборки проекта будет использоваться Maven.
Про настройку Maven можно почитать здесь.

pom.xml содержит описание артефактов и библиотек, необходимых нашему приложению. Сейчас нам нужен только артефакт spring-web, который содержит необходимые библиотеки Spring:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
            http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>hellogwt</groupId>
    <artifactId>hellogwt</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>

    <properties>
        <spring.version>4.2.4.RELEASE</spring.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>hellogwt</finalName>
    </build>

</project>

Дескриптор развёртывания web.xml содержит конфигурацию контекста приложения и Dispatcher-сервлета Spring, а также объявление страницы приветствия:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>hellogwt</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>hellogwt</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

Для создания контекста приложения необходим файл applicationContext.xml. В нем будут объявляться бины и настройки, необходимые для работы приложения. Пока таких нет, но сам файл нужен:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

Создадим в директории webapp единственную страницу приложения - index.jsp:
<html>
    <body>
        Hello, Spring!
    </body>
</html>

Соберем проект, выполнив команду "mvn clean install":
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building hellogwt 1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ hellogwt ---
[INFO] Deleting d:\Dev\blog\hellogwt\target
[INFO] 
[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ hellogwt ---
[debug] execute contextualize
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory d:\Dev\blog\hellogwt\src\main\resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ hellogwt ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ hellogwt ---
[debug] execute contextualize
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory d:\Dev\blog\hellogwt\src\test\resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ hellogwt ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ hellogwt ---
[INFO] No tests to run.
[INFO] Surefire report directory: d:\Dev\blog\hellogwt\target\surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

[INFO] 
[INFO] --- maven-war-plugin:2.1.1:war (default-war) @ hellogwt ---
[INFO] Packaging webapp
[INFO] Assembling webapp [hellogwt] in [d:\Dev\blog\hellogwt\target\hellogwt]
[INFO] Processing war project
[INFO] Copying webapp resources [d:\Dev\blog\hellogwt\src\main\webapp]
[INFO] Webapp assembled in [71 msecs]
[INFO] Building war: d:\Dev\blog\hellogwt\target\hellogwt.war
[WARNING] Warning: selected war files include a WEB-INF/web.xml which will be ignored 
(webxml attribute is missing from war task, or ignoreWebxml attribute is specified as 'true')
[INFO] 
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ hellogwt ---
[INFO] Installing d:\Dev\blog\hellogwt\target\hellogwt.war to d:\Dev\.m2\repository\hellogwt\hellogwt\1.0\hellogwt-1.0.war
[INFO] Installing d:\Dev\blog\hellogwt\pom.xml to d:\Dev\.m2\repository\hellogwt\hellogwt\1.0\hellogwt-1.0.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.196s
[INFO] Finished at: Mon Apr 21 19:52:03 EEST 2014
[INFO] Final Memory: 5M/121M
[INFO] ------------------------------------------------------------------------

Скопируем полученный war-файл в директорию Tomcat'а webapps, запустим сервер и перейдем по ссылке http://localhost:8080/hellogwt/. Должна отобразиться созданная страница приветствия:











Структура проекта:






















Исходный код созданного приложения доступен по ссылке https://subversion.assembla.com/svn/hellogwt/trunk/.

Каркас нашего приложения готов. В следующей части мы добавим немного GWT :)


Рекомендуемые посты:

9 comments:

  1. Спасибо огромное за идею с деплоем по удаленке!!!!
    только для tomcat 7 должен быть rolename не manager, а manager-script и в мавене надо указать не http://localhost:8080/manager/ , а http://localhost:8080/manager/text

    ReplyDelete
    Replies
    1. Спасибо за настройки для tomcat 7! Только я использовал 6 :)

      Delete
  2. и кстати мавен позволяет шифровать пароли:
    более подробно об этом тут:
    http://maven.apache.org/guides/mini/guide-encryption.html

    ReplyDelete
    Replies
    1. Спасибо за информацию!

      Delete
  3. Здравствуйте, Alex. Прошу прощение я плохо ориентируясь в GWT и Spring. В данном примере идет связка Spring MVC и GWT или просто Spring ( просто для DI) и GWT. Еще один вопрос есть ли смысл связывать Spring MVC и GWT, появляется уже другой вопрос зачем нужны контроллеры. Вообщем не понятно для меня))). Спасибо и извините если не изложился ясно.

    ReplyDelete
    Replies
    1. Здравствуйте, Сергей! В данном примере Spring используется для DI. На мой взгляд, использование Spring MVC и GWT имеет мало смысла (на практике я такого не встречал), тем более GWT позволяет использовать шаблон MVP.

      Delete
    2. Spring MVC + GWT Platform (MVP) замечательно работает, позволяет использовать преимущества и того и другого. В плане производительности эта связка тоже показывает хорошие результаты. Есть большой успешный проект по этой схеме.

      Delete
  4. Попробовал скачать исходный код, но не получается (пишет, что статья в архиве). У вас он где-то остался?

    ReplyDelete
    Replies
    1. Добрый день, Виталий!
      Я перезалил код в https://subversion.assembla.com/svn/hellogwt/trunk/

      Delete