Действия actions Struts2

Фреймворк Struts2 ориентирован на действия (action), которые являются его основным элементом, т.е. ядром фреймворка. Действия обрабатывают запросы пользователей и определяют результат его выполнения. Struts2 назначает каждому action свой уникальный URL и набор результатов. Фреймворк включает пять констант, которые определяют результат выполнения действия и которые можно использовать в приложении :

  • public static final String ERROR "error";
  • public static final String INPUT "input";
  • public static final String LOGIN "login";
  • public static final String NONE "none";
  • public static final String SUCCESS "success".

Если этих констант будет недостаточно, то можно дополнительно определить любые свои.

Действие в Struts2 представляет простой java-класс (action-класс), который должен наследовать свойства класса com.opensymphony.xwork2.ActionSupport. Класс ActionSupport содержит виртуальную функцию execute(), возвращающую строковое значение. Именно в этой функции определяется результат выполнения действия, или результат обработки запроса HttpServletRequest.

Примечание : В последних версиях Struts2 действие в виде java-класса может не наследовать свойства класса ActionSupport. Но этот класс (действие) должен содержать метод execute() и должен быть описан в файле конфигурации struts.xml.

Действия в Struts2 выполняют функцию обработки и передачи данных для дальнейшего их представления в JSP-странице или других вариантах отображения страницы пользователю. Кроме того, action указывает фреймворку какой результат необходимо отобразить пользователю.

Struts2 приложение авторизации

Создадим простейшее Struts2 приложение авторизации. Для разработки будет использоваться среда Eclipse, а в качестве браузера - Internal Web Browser. В приложении создадим действие LoginAction.java. Основная функция данного action будет заключаться в том, чтобы проверить заполнение текстовых полей страницы index.jsp. Если пользователь заполнит текстовые поля, то метод execute() вернет строковое значение "success", если не заполнит - то "error". В зависимости от результата действия фреймворк будет открывать либо страницу success.jsp, либо error.jsp.

На следующем скриншоте представлена структура проекта StrutsAction.

Дескриптор приложения web.xml не описывается на странице. Листинг web.xml можно увидеть на странице Пример Struts2, где рассматривается вопрос кодировки передаваемых серверу сообщений.

Листинг action классa LoginAction.java

package example;

public class LoginAction
{
    private String userName = null;
    private String password = null;
    private String message  = null; 
	  
    public LoginAction() {}

    public String execute()
    { 
        if ((getUserName().trim().length() > 0) &&
            (getPassword().trim().length() > 0)) {
            setMessage ("Добро пожаловать, " + getUserName());
            return "SUCCESS";
        } else {
            setMessage ("Не заполнено одно из обязательных полей");
            return "ERROR";
        }
    }  
    public String getMessage()
    { 
        return message;
    }  
    public void setMessage ( String message )
    { 
        this.message = message; 
    } 
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

Действие LoginAction переопределяет функцию execute. Как только будет обращение к этому действию Struts2 сразу же вызовет его метод execute, который проверит поля "userName" и "password", и, в зависимости от состояния, вернет либо "success", либо "error".

На странице проверки данных показано, как использовать метод validate() для проверки введенных данных пользователя.

Листинг JSP-страницы index.jsp

На этой странице оператор должен ввести "Логин", "Пароль" и нажать кнопку Submit. По нажатию на кнопку серверу передается информация страницы (userName, password) и вызывается действие "login".

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>

<html>
  <head>
    <title>Страница авторизации</title>
  </head>
  <body>
    <s:form action="login" >
	    <s:textfield name="userName" label="Логин"/>
	    <s:password  name="password" label="Пароль"/>
        <s:submit />
    </s:form>
  </body>
</html>

В строке <%@ taglib uri="/struts-tags" prefix="s" %> подключаются теги Struts2, после чего обращение к объектам фреймворка производится через префикс "s". В теле страницы определено несколько тегов Struts2. В первом теге формы <s:form ... > определяется действие action="login", отвечающее за обработку данных. Далее в теле формы установлены текстовые поля "userName" и "password". При нажатии на кнопку <s:submit /> управление передается серверу и вызывается действие login.

Интерфейс страницы представлен на следующем скриншоте.

Файл конфигурации struts.xml

В struts.xml необходимо определить связь страницы index.jsp с действием "login".

<?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="default" namespace="" extends="struts-default">
           <action name="login" class="example.LoginAction">
               <result name="SUCCESS">/success.jsp</result>
               <result name="ERROR">/error.jsp</result> 
           </action> 
      </package>
</struts>

В файле конфигурации определено, что действие "login" связано с классом example.LoginAction. В зависимости от результата (result) выполнения действия будет открыта либо страница success.jsp, либо error.jsp.

Листинг страницы success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <title>Страница приветствия</title>
  </head>
  <body>
    <h1>Struts2 приветствует Вас</h1>

    <i><s:property value="message" /></i><br/>
  </body>
</html>

В случае успешного выполнения действия "login" сервер откроет страницу success.jsp, интерфейс которой представлен на следующем скриншоте.

JSP-страница success.jsp использует теги Struts2, для отображения сообщения действия. Следует отметить, что фреймворк передает данные через свой внутренний объект ValueStack, к которому мы имеем доступ на странице JSP через тег <s:property ... />. Но это уже отдельный вопрос и он рассмотрен на странице Представление OGNL.

Листинг страницы error.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
   <head>
      <title>Страница ошибки/title>
   </head>
   <body>
      <h2>Ошибка авторизации</h2>
      <i><s:property value="message" /></i>
   </body>
</html>

Страница ошибки error.jsp выполняет только одну функцию - сообщает пользователю, что одно из полей осталось не заполнено.

Скачать примеры

Исходные коды рассмотренного примера можно скачать здесь (5.35 Мб).

  Рейтинг@Mail.ru