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 будут присутствовать следующие три компонента:
- Класс действий — это класс POJO (POJO означает, что он не является частью какой-либо иерархии типов и может использоваться как отдельный класс); мы будем реализовывать нашу бизнес-логику здесь
- Контроллер — в Struts2 в качестве контроллеров используются HTTP-фильтры; они в основном выполняют такие задачи, как перехват и проверка запросов/ответов.
- 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. Вот необходимые шаги для его достижения:
- После развертывания веб-приложения откройте браузер и перейдите по следующему URL-адресу:
http://www.localhost.com:8080/MyStrutsApp/input.jsp .
- Выберите один из двух вариантов и отправьте запрос
- Вы будете перенаправлены на страницу
result.jsp
с персонализированным сообщением, основанным на выбранном параметре ввода.
5. Вывод
В этом уроке мы рассмотрели пошаговое руководство по созданию нашего первого веб-приложения Struts2. Мы рассмотрели различные аспекты, связанные с MVC, в предметной области Struts2 и показали, как объединить их для разработки.
Как всегда, это руководство можно найти на Github как проект Maven.