Struts 2 - Wyniki i typy wyników
Jak wspomniano wcześniej, plik <results> tag pełni rolę viewwe frameworku Struts2 MVC. Akcja jest odpowiedzialna za wykonanie logiki biznesowej. Następnym krokiem po wykonaniu logiki biznesowej jest wyświetlenie widoku przy użyciu<results> etykietka.
Często do wyników dołączone są reguły nawigacji. Na przykład, jeśli metodą akcji jest uwierzytelnienie użytkownika, możliwe są trzy wyniki.
- Udane logowanie
- Nieudane logowanie - nieprawidłowa nazwa użytkownika lub hasło
- Konto zablokowane
W tym scenariuszu metoda akcji zostanie skonfigurowana z trzema możliwymi ciągami wynikowymi i trzema różnymi widokami, aby renderować wynik. Widzieliśmy to już w poprzednich przykładach.
Jednak Struts2 nie ogranicza Cię do korzystania z JSP jako technologii wyświetlania. Ostatecznie celem paradygmatu MVC jest utrzymanie oddzielnych warstw i wysoce konfigurowalnych. Na przykład dla klienta Web2.0 możesz chcieć zwrócić XML lub JSON jako dane wyjściowe. W takim przypadku możesz utworzyć nowy typ wyniku dla XML lub JSON i osiągnąć ten cel.
W Struts jest dostępnych kilka wstępnie zdefiniowanych result types i cokolwiek już widzieliśmy, był to domyślny typ wyniku dispatcher, który jest używany do wysyłania do stron JSP. Struts umożliwiają korzystanie z innych języków znaczników w technologii widoku w celu przedstawienia wyników, a wśród popularnych wyborów sąVelocity, Freemaker, XSLT i Tiles.
Typ wyniku dyspozytora
Plik dispatchertyp wyniku jest typem domyślnym i jest używany, jeśli nie określono innego typu wyniku. Służy do przekazywania do serwletu, strony JSP, strony HTML i tak dalej na serwerze. Używa metody RequestDispatcher.forward () .
Wersję „skróconą” widzieliśmy we wcześniejszych przykładach, w których podaliśmy ścieżkę JSP jako treść znacznika wynikowego.
<result name = "success">
/HelloWorld.jsp
</result>
Możemy również określić plik JSP za pomocą znacznika <param name = "location"> w elemencie <result ...> w następujący sposób -
<result name = "success" type = "dispatcher">
<param name = "location">
/HelloWorld.jsp
</param >
</result>
Możemy również dostarczyć plik parseparametr, który domyślnie jest prawdziwy. Parametr parse określa, czy parametr lokalizacji będzie analizowany pod kątem wyrażeń OGNL.
Typ wyniku FreeMaker
W tym przykładzie zobaczymy, jak możemy użyć FreeMakerjako technologia widoku. Freemaker to popularny silnik do tworzenia szablonów, który służy do generowania danych wyjściowych przy użyciu predefiniowanych szablonów. Utwórzmy teraz plik szablonu Freemaker o nazwiehello.fm z następującą zawartością -
Hello World ${name}
Powyższy plik jest szablonem, w którym nameto parametr, który zostanie przekazany z zewnątrz za pomocą zdefiniowanej akcji. Zachowasz ten plik w swojej CLASSPATH.
Następnie zmodyfikujmy plik struts.xml aby określić wynik w następujący sposób -
<?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>
Zachowajmy nasze pliki HelloWorldAction.java, HelloWorldAction.jsp i index.jsp tak, jak utworzyliśmy je w rozdziale z przykładami.
Teraz kliknij prawym przyciskiem myszy nazwę projektu i kliknij Export > WAR File aby utworzyć plik wojny.
Następnie wdróż tę WAR w katalogu webapps serwera Tomcat. Na koniec uruchom serwer Tomcat i spróbuj uzyskać dostęp do adresu URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. Spowoduje to wyświetlenie następującego ekranu.
Wpisz wartość „Struts2” i prześlij stronę. Powinieneś zobaczyć następną stronę.
Jak widać, jest to dokładnie to samo, co widok JSP, z tym wyjątkiem, że nie jesteśmy przywiązani do korzystania z JSP jako technologii widoku. W tym przykładzie użyliśmy Freemakera.
Typ wyniku przekierowania
Plik redirecttyp wyniku wywołuje standardową metodę response.sendRedirect () , powodując, że przeglądarka tworzy nowe żądanie do podanej lokalizacji.
Możemy podać lokalizację w treści elementu <result ...> lub jako element <param name = "location">. Przekierowanie obsługuje równieżparseparametr. Oto przykład skonfigurowany przy użyciu XML -
<action name = "hello"
class = "com.tutorialspoint.struts2.HelloWorldAction"
method = "execute">
<result name = "success" type = "redirect">
<param name = "location">
/NewWorld.jsp
</param >
</result>
</action>
Po prostu zmodyfikuj plik struts.xml, aby zdefiniować typ przekierowania, jak wspomniano powyżej, i utwórz nowy plik NewWorld.jpg, do którego zostaniesz przekierowany za każdym razem, gdy akcja hello zwróci sukces. Możesz sprawdzić przykład działania przekierowania Struts 2, aby lepiej zrozumieć.