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. Проектирование нашего приложения
- 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
- Controller – in Struts2, HTTP filters are used as controllers; they basically perform tasks like intercepting and validating requests/responses
- 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 и показали, как объединить их для разработки.
- After deploying the web app, open the browser and access the following URL: http://www.localhost.com:8080/MyStrutsApp/input.jsp
- Select one of the two options and submit the request
- 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.