1. Введение

Apache Struts 2 — это платформа на основе MVC для разработки корпоративных веб-приложений Java. Это полная переработка оригинальной структуры Struts. Он имеет реализацию API с открытым исходным кодом и богатый набор функций.

В этом уроке мы познакомим новичков с различными основными компонентами фреймворка Struts2. Более того, мы покажем, как ими пользоваться.

2. Обзор Struts 2 Framework

Некоторые функции Struts 2:

Поддержка подключаемого модуля действий на основе POJO (простых старых объектов Java) для REST, AJAX, Hibernate, Spring и т. д. различные технологии уровня представления простота профилирования и отладки

    2.1. Различные компоненты Struts2

Struts2 — это фреймворк на основе MVC, поэтому следующие три компонента будут присутствовать во всех приложениях Struts2:

3. Проектирование нашего приложения

  1. Action class – which is a POJO class (POJO means it is not part of any type hierarchy and can be used as a standalone class); we will implement our business logic here
  2. Controller – in Struts2, HTTP filters are used as controllers; they basically perform tasks like intercepting and validating requests/responses
  3. View – is used for presenting processed data; it is usually a JSP file

Давайте приступим к разработке нашего веб-приложения. Это приложение, в котором пользователь выбирает определенную марку автомобиля и получает индивидуальное сообщение.

3.1. Зависимости Maven

Давайте добавим следующие записи в pom.xml:

Последнюю версию зависимостей можно найти здесь.

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.5.10</version>
</dependency>
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-junit-plugin</artifactId>
    <version>2.5.10</version>
</dependency>
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-convention-plugin</artifactId>
    <version>2.5.10</version>
</dependency>

3.2. Бизнес-логика

Давайте создадим класс действий CarAction, который возвращает сообщение для определенного входного значения. CarAction имеет два поля — carName (используется для хранения ввода от пользователя) и carMessage (используется для хранения пользовательского сообщения, которое будет отображаться):

Класс CarAction использует CarMessageService, который предоставляет настроенное сообщение для Марка автомобиля:

public class CarAction {

    private String carName;
    private String carMessage;
    private CarMessageService carMessageService = new CarMessageService();
    
    public String execute() {
        this.setCarMessage(this.carMessageService.getMessage(carName));
        return "success";
    }
    
    // getters and setters
}

3.3. Принятие пользовательского ввода

public class CarMessageService {

    public String getMessage(String carName) {
        if (carName.equalsIgnoreCase("ferrari")){
            return "Ferrari Fan!";
        }
        else if (carName.equalsIgnoreCase("bmw")){
            return "BMW Fan!";
        }
        else {
            return "please choose ferrari Or bmw";
        }
    }
}

Давайте добавим JSP, который является точкой входа в наше приложение. Это содержимое файла input.jsp:

Тег \u003cform\u003e указывает действие (в нашем случае это HTTP URI, на который должен быть отправлен запрос GET).

<body>
    <form method="get" action="/struts2/tutorial/car.action">
        <p>Welcome to Baeldung Struts 2 app</p>
        <p>Which car do you like !!</p>
        <p>Please choose ferrari or bmw</p>
        <select name="carName">
            <option value="Ferrari" label="ferrari" />
            <option value="BMW" label="bmw" />
         </select>
        <input type="submit" value="Enter!" />
    </form>
</body>

3.4. Часть контроллера

StrutsPrepareAndExecuteFilter — это контроллер, который будет перехватывать все входящие запросы. Нам нужно зарегистрировать следующий фильтр в файле web.xml:

StrutsPrepareAndExecuteFilter будет фильтровать каждый входящий запрос, поскольку мы указываем URL-адрес, соответствующий подстановочному знаку \u003curl-pattern\u003e/*\u003c/url-pattern\u003e

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

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

3.5. Настройка приложения

Давайте добавим следующие аннотации к нашему классу действий Car:

Давайте разберемся в логике этих аннотаций. @Namespace используется для логического разделения URI запроса для разных классов действий; нам нужно включить это значение в наш запрос.

@Namespace("/tutorial")
@Action("/car")
@Result(name = "success", location = "/result.jsp")

Кроме того, @Action сообщает фактическую конечную точку URI запроса, которая попадет в наш класс Action. Класс действия консультируется с CarMessageService и инициализирует значение другой переменной-члена carMessage. После того, как метод execute() возвращает значение, в нашем случае «успех», он сопоставляет это значение для вызова result.jsp

Наконец, @Result имеет два параметра. Первый, name, указывает значение, которое вернет наш класс Action; это значение возвращается из метода execute() класса Action. Это имя метода по умолчанию, который будет выполнен.

Вторая часть, location, сообщает, к какому файлу следует обращаться после того, как метод execute() вернул значение. Здесь мы указываем, что когда execute() возвращает строку со значением «success», мы должны перенаправить запрос в result.jsp.

Такую же конфигурацию можно получить, предоставив XML-файл конфигурации:

3.6. Представление

<struts>
    <package name="tutorial" extends="struts-default" namespace="/tutorial">
        <action name="car" class="com.baeldung.struts.CarAction" method="execute">
            <result name="success">/result.jsp</result>
        </action>
    </package>
</struts>

Это содержимое result.jsp, которое будет использоваться для представления сообщения пользователю:

Здесь следует отметить две важные вещи:

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<body>
    <p> Hello Baeldung User </p>
    <p>You are a <s:property value="carMessage"/></p>
</body>

в \u003c@taglib prefix=â € s’ uri=’ /struts-tags %\u003e мы импортируем библиотеку struts-tags в \u003cs:property value=’carMessage’ /\u003e мы используем библиотеку struts-tags для печати значения свойства carMessage ~~ ~ 4. Запуск приложения

    Это веб-приложение можно запустить в любом веб-контейнере, например, в Apache Tomcat. Вот необходимые шаги для его выполнения:

5. Заключение

«В этом уроке мы рассмотрели пошаговое руководство по созданию нашего первого веб-приложения Struts2. Мы рассмотрели различные аспекты, связанные с MVC, в предметной области Struts2 и показали, как объединить их для разработки.

  1. After deploying the web app, open the browser and access the following URL: http://www.localhost.com:8080/MyStrutsApp/input.jsp
  2. Select one of the two options and submit the request
  3. You will be forwarded to the result.jsp page with customized message based on the selected input option

Как всегда, это руководство можно найти на Github как проект Maven.

«

As always, this tutorial can be found over on Github as a Maven project.