Struts 2 - Результаты и типы результатов
Как упоминалось ранее, <results> тег играет роль viewв структуре Struts2 MVC. Действие отвечает за выполнение бизнес-логики. Следующим шагом после выполнения бизнес-логики является отображение представления с помощью<results> тег.
Часто к результатам прилагаются некоторые правила навигации. Например, если метод действия заключается в аутентификации пользователя, есть три возможных результата.
- Успешный вход в систему
- Неудачный вход - неверное имя пользователя или пароль
- Аккаунт заблокирован
В этом сценарии метод действия будет настроен с тремя возможными строками результата и тремя различными представлениями для визуализации результата. Мы уже видели это в предыдущих примерах.
Но Struts2 не связывает вас с использованием JSP в качестве технологии просмотра. В конце концов, вся цель парадигмы MVC состоит в том, чтобы разделять уровни и настраивать их. Например, для клиента Web2.0 вы можете захотеть вернуть XML или JSON в качестве вывода. В этом случае вы можете создать новый тип результата для XML или JSON и добиться этого.
Struts поставляется с несколькими предопределенными result types и все, что мы уже видели, это тип результата по умолчанию dispatcher, который используется для отправки на страницы JSP. Struts позволяет использовать другие языки разметки для технологии просмотра, чтобы представить результаты, и популярные варианты включаютVelocity, Freemaker, XSLT и Tiles.
Тип результата диспетчера
В dispatcherТип результата является типом по умолчанию и используется, если не указан другой тип результата. Он используется для перенаправления на сервлет, JSP, HTML-страницу и т. Д. На сервере. Он использует метод RequestDispatcher.forward () .
Мы видели «сокращенную» версию в наших предыдущих примерах, где мы указывали путь JSP в качестве тела тега результата.
<result name = "success">
/HelloWorld.jsp
</result>
Мы также можем указать файл JSP с помощью тега <param name = "location"> в элементе <result ...> следующим образом:
<result name = "success" type = "dispatcher">
<param name = "location">
/HelloWorld.jsp
</param >
</result>
Мы также можем поставить parseпараметр, который по умолчанию равен true. Параметр parse определяет, будет ли параметр местоположения анализироваться на наличие выражений OGNL.
Тип результата FreeMaker
В этом примере мы увидим, как мы можем использовать FreeMakerкак технология просмотра. Freemaker - популярный механизм создания шаблонов, который используется для создания вывода с использованием предопределенных шаблонов. Давайте теперь создадим файл шаблона Freemaker с именемhello.fm со следующим содержанием -
Hello World ${name}
Приведенный выше файл представляет собой шаблон, в котором name- это параметр, который будет передан извне с использованием определенного действия. Вы сохраните этот файл в своем КЛАССЕ.
Далее, давайте изменим struts.xml чтобы указать результат следующим образом -
<?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>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<action name = "hello"
class = "com.tutorialspoint.struts2.HelloWorldAction"
method = "execute">
<result name = "success" type = "freemarker">
<param name = "location">/hello.fm</param>
</result>
</action>
</package>
</struts>
Давайте сохраним наши файлы HelloWorldAction.java, HelloWorldAction.jsp и index.jsp в том виде, в каком мы создали их в главе с примерами.
Теперь щелкните правой кнопкой мыши имя проекта и щелкните Export > WAR File для создания файла War.
Затем разверните эту WAR в каталоге веб-приложений Tomcat. Наконец, запустите сервер Tomcat и попробуйте получить доступ к URL-адресуhttp://localhost:8080/HelloWorldStruts2/index.jsp. Это приведет к появлению следующего экрана.
Введите значение «Struts2» и отправьте страницу. Вы должны увидеть следующую страницу.
Как видите, это точно так же, как представление JSP, за исключением того, что мы не привязаны к использованию JSP в качестве технологии представления. В этом примере мы использовали Freemaker.
Тип результата перенаправления
В redirectТип результата вызывает стандартный метод response.sendRedirect () , в результате чего браузер создает новый запрос в указанное место.
Мы можем указать местоположение либо в теле элемента <result ...>, либо в виде элемента <param name = "location">. Redirect также поддерживаетparseпараметр. Вот пример, настроенный с использованием XML -
<action name = "hello"
class = "com.tutorialspoint.struts2.HelloWorldAction"
method = "execute">
<result name = "success" type = "redirect">
<param name = "location">
/NewWorld.jsp
</param >
</result>
</action>
Поэтому просто измените свой файл struts.xml, чтобы определить тип перенаправления, как указано выше, и создайте новый файл NewWorld.jpg, куда вы будете перенаправлены всякий раз, когда действие hello вернет успех. Вы можете проверить пример Struts 2 Redirect Action для лучшего понимания.