Пример Google App Engine Struts 2

В этом руководстве мы покажем, как разрабатывать веб-приложение Struts 2 в среде Google App Engine (GAE).

Используемые инструменты и технологии:

, JDK 1.6

, Eclipse 3.7 Плагин Google для Eclipse

, Google App Engine Java SDK 1.6.3.1

, Struts 2.3.1.2

1. Новый проект веб-приложения

В Eclipse создайте новый проект веб-приложения с именем Struts2GoogleAppEngine.

пример нового проекта gae struts2

Плагин Google для Eclipse создаст образец структуры проекта GAE. Позже мы покажем вам, как интегрировать Struts2 с этим сгенерированным проектом GAE.

пример примера проекта gae struts2

2. Интегрировать библиотеки Struts 2

Получите следующие библиотеки зависимостей Struts 2, download Struts2 здесь .

  • asm-3.3.jar

  • asm-commons-3.3.jar

  • asm-tree-3.3.jar

  • commons-fileupload-1.2.2.jar

  • commons-io-2.0.1.jar

  • commons-lang-2.5.jar

  • freemarker-2.3.18.jar

  • javassist-3.11.0.GA.jar

  • ognl-3.0.4.jar

  • struts2-core-2.3.1.2.jar

  • xwork-core-2.3.1.2.jar

Поместите все в папку « war/WEB-INF/lib ».

библиотеки примеров gae struts2

Щелкните правой кнопкой мыши папку проекта, выберите « Свойства » → « Java Build Path » → вкладку « Библиотеки », нажмите кнопку « Добавить банки » и выберите более 11 банок из « war/WEB». -INF/lib ”в путь сборки.

gae struts2 пример пути сборки java

3. Интегрировать код Struts 2

3.1 Удалите сгенерированный файл Struts2GoogleAppEngineServlet.java, он вам не нужен.

3.2 Создать новый класс действий Struts 2.

Файл: src/com/mkyong/user/action/WelcomeUserAction.java

package com.mkyong.user.action;

public class WelcomeUserAction {

    private String username;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String execute() {

        return "SUCCESS";

    }
}

3.3 Создайте класс слушателя и установите для ognl security значение null.

  • Примечание ** Struts 2 нужен этот слушатель для запуска в среде GAE. Прочитайте это - Issues при развертывании Struts 2 в GAE и ссылку://google-app-engine/strurts- 2-на-GAE-ошибок на результат нуль-не обретенной/[Error:

результат "null" не найден]

Файл: src/com/mkyong/listener/Struts2 Listener InGAE.java

package com.mkyong.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import ognl.OgnlRuntime;

public class Struts2ListenerOnGAE implements ServletContextListener,
        HttpSessionListener, HttpSessionAttributeListener {

    public void contextInitialized(ServletContextEvent sce) {
        OgnlRuntime.setSecurityManager(null);
    }

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
       //TODO Auto-generated method stub

    }

    @Override
    public void sessionCreated(HttpSessionEvent arg0) {
       //TODO Auto-generated method stub

    }

    @Override
    public void sessionDestroyed(HttpSessionEvent arg0) {
       //TODO Auto-generated method stub

    }

    @Override
    public void attributeAdded(HttpSessionBindingEvent arg0) {
       //TODO Auto-generated method stub

    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent arg0) {
       //TODO Auto-generated method stub

    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent arg0) {
       //TODO Auto-generated method stub

    }

}

3.4 Чтобы запустить проект Struts2 в локальной среде GAE, вы должны создать класс TextBlock и перегрузить исходный класс` TextBlok`, в противном случае вы получите сообщение об ошибке «javax.swing.tree.TreeNode is is this». Надеюсь, что команда Struts2 может исправить это в будущем выпуске.

  • Исходный код TextBlock ** + Перейдите по этой ссылке по ссылке://google-app-engine/javax-swing-tree-treenode-is-a-limited-class/[загрузить исходный код TextBlock].

3.5. Просмотрите структуру каталогов проекта.

пример каталога gae struts2

4. Интегрировать Struts 2 страницы

4.1 Создайте страницу login.jsp , чтобы принимать пользовательский ввод.

File: war/User/pages/login.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head></head>
<body>
<h1>GAE + Struts 2 Example</h1>

<s:form action="Welcome">
    <s:textfield name="username" label="Username"/>
    <s:password name="password" label="Password"/>
    <s:submit/>
</s:form>

</body>
</html>

4.2 Создать страницу welcome__user.jsp .

File: war/User/pages/welcome user.jsp__

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head></head>
<body>
<h1>GAE + Struts 2 Example</h1>

<h2>Hello <s:property value="username"/></h2>

</body>
</html>

4.3 Еще раз просмотрите структуру каталогов проекта.

пример каталога gae struts2

5. Struts XML-конфигурация

Создайте файл struts.xml и поместите в« src/struts.xml «.

Файл: struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

  <package name="user" namespace="/User" extends="struts-default">
    <action name="Login">
        <result>pages/login.jsp</result>
    </action>
    <action name="Welcome" class="com.mkyong.user.action.WelcomeUserAction">
        <result name="SUCCESS">pages/welcome__user.jsp</result>
    </action>
   </package>

</struts>

6. web.xml

Обновите web.xml , интегрируйте Struts2 и настройте прослушиватель безопасности ognl.

File: web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app__2__5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app__2__5.xsd"
    version="2.5">
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
        </filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/** </url-pattern>
    </filter-mapping>

    <listener>
        <listener-class>
                   com.mkyong.listener.Struts2ListenerOnGAE
                </listener-class>
    </listener>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>

7. Структура каталогов

Просмотрите окончательную структуру каталогов.

пример каталога gae struts2

8. Запустить на локальном

Готово, время для тестирования. Щелкните правой кнопкой мыши по проекту, запустите « Веб-приложение ».

URL: http://localhost : 8888/User/Login.action

пример gae struts2 работает на локальном компьютере

пример gae struts2 работает на локальном компьютере

9. Развертывание на GAE

Обновите appengine-web.xml, введите идентификатор приложения App Engine.

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>mkyong-struts2gae</application>
  <version>1</version>

  <!-- Configure java.util.logging -->
  <system-properties>
    <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
  </system-properties>

</appengine-web-app>

Выберите проект, нажмите на иконку Google, « Deploy to App Engine ». Плагин Google для Eclipse автоматически развернет все необходимые файлы для производства GAE.

пример развертывания gae struts2 в GAE

Во время развертывания следующие похожие сообщения будут отображаться в представлении консоли Eclipse.

------------ Deploying frontend ------------

Подготовка к развертыванию:

Создан промежуточный каталог по адресу: 'C: \ Users \ mkyong \ AppData \ Local \ Temp \ appcfg7432687551.tmp' Поиск файлов jsp.

Компиляция файлов JSP.

Сканирование файлов на локальном диске.

Начальное обновление.

Клонирование 2 статических файлов.

Клонирование 46 файлов приложений.

Развертывание:

Загрузка 12 файлов.

Загрузил 3 файла.

Загрузил 6 файлов.

Загрузил 9 файлов.

Загрузил 12 файлов.

Инициализация прекомпиляции ...

Отправка пакета, содержащего 11 файла (ов) общим объемом 44KB.

Отправка пакета, содержащего 1 BLOB-объект (ы) общим объемом 1 КБ.

Развертывание новой версии.

Проверка доступности:

Проверим снова через 1 секунду.

Проверим снова через 2 секунды.

Проверим снова через 4 секунды.

Закрытие обновления: новая версия готова начать обслуживание.

Обновление хранилища данных:

Загрузка определений индекса.

Развертывание завершено успешно

Изображение://wp-content/uploads/2012/04/gae-struts2-example10-deploy-gae.png[GAE Пример использования Struts2 GAE, название = "GAE-struts2-example10-развертывания-GAE", ширина = 583, высота = 357] Примечание
Наконец-то закончилась эта длинная статья. Общая интеграция не очень сложно, просто нужно исправить проблемы безопасности Struts2 ognl и TextBlock, надеюсь, что команда Struts2 сможет это исправить в будущем.

Скачать исходный код

Из-за большого размера файла все банки Struts2 исключены, необходимо скачать его вручную.

Скачать - ссылка://wp-content/uploads/2012/04/Struts2GoogleAppEngine.zip[Struts2GoogleAppEngine.zip](23 КБ)

Рекомендации

, ссылка://struts2/struts-2-hello-world-example/[Struts2 привет мир пример], ссылка://Google-приложение двигатель/Google-приложение-моторно-привет-мир-пример-с использованием затмения/[Google Пример App Engine + Java hello world с использованием Eclipse], Apache Struts , Struts 2 по GAE ссылка://tag/gae/[gae]ссылка://tag/struts2/[struts2]