Перейти к основному содержимому

Краткое введение в Struts 2

· 5 мин. чтения

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 будут присутствовать следующие три компонента:

  1. Класс действий — это класс POJO (POJO означает, что он не является частью какой-либо иерархии типов и может использоваться как отдельный класс); мы будем реализовывать нашу бизнес-логику здесь
  2. Контроллер — в Struts2 в качестве контроллеров используются HTTP-фильтры; они в основном выполняют такие задачи, как перехват и проверка запросов/ответов.
  3. View – используется для представления обработанных данных; обычно это файл JSP

3. Разработка нашего приложения

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

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 (используется для хранения пользовательского сообщения, которое будет отображаться):

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
}

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

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";
}
}
}

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

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

<body>
<form method="get" action="/struts2/tutorial/car.action">
<p>Welcome to ForEach 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>

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

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

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

<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>

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

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

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

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

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

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

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

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

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

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

3.6. Вид

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

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

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

  • в <@taglib prefix="s" uri="/struts-tags %> мы импортируем библиотеку struts-tags
  • в <s:property value="carMessage"/> мы используем библиотеку struts -tags для печати значения свойства carMessage

4. Запуск приложения

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

  1. После развертывания веб-приложения откройте браузер и перейдите по следующему URL-адресу: http://www.localhost.com:8080/MyStrutsApp/input.jsp .
  2. Выберите один из двух вариантов и отправьте запрос
  3. Вы будете перенаправлены на страницу result.jsp с персонализированным сообщением, основанным на выбранном параметре ввода.

5. Вывод

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

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