Struts2 Bewerbungsgespräch Fragen und Antworten
Struts2 ist eines der bekannten Frameworks zur Entwicklung von Webanwendungen in Java. Ich liste einige der wichtigen Struts2 Bewerbungsgespräch Fragen mit Antworten auf, um Ihnen im Bewerbungsgespräch zu helfen.
Struts2 Bewerbungsgespräch Fragen
- Was ist Struts2?
- Was sind die Unterschiede zwischen Struts1 und Struts2 oder wie ist Struts2 besser als Struts1?
- Was sind die Kernkomponenten von Struts2?
- Was ist ein Interceptor in Struts2?
- Welches Design Pattern wird von Struts2-Interceptors implementiert?
- Welche unterschiedlichen Wege gibt es, um Action-Klassen in Struts2 zu erstellen?
- Sind Struts2-Action und Interceptors thread-sicher?
- Welche Klasse ist der Front Controller in Struts2?
- Welche Vorteile bieten Interceptors in Struts2?
- Was sind ValueStack und OGNL?
- Nennen Sie einige nützliche Annotationen, die in Struts2 eingeführt wurden?
- Nennen Sie einige wichtige Struts2-Konstanten, die Sie verwendet haben?
- Wofür wird das Namespace in der Action-Mapping in Struts2 verwendet?
- Welcher Interceptor ist verantwortlich für das Mapping von Request-Parametern auf Java Bean-Eigenschaften der Action-Klasse?
- Welcher Interceptor ist verantwortlich für die i18n-Unterstützung?
- Was ist der Unterschied zwischen der Verwendung der Action-Schnittstelle und der ActionSupport-Klasse für unsere Action-Klassen, welche würden Sie bevorzugen?
- Wie können wir Servlet-API-Request, Response, HttpSession usw. Objekte in Action-Klassen erhalten?
- Wofür wird der execAndWait-Interceptor verwendet?
- Wofür wird der Token-Interceptor in Struts2 verwendet?
- Wie können wir log4j in eine Struts2-Anwendung integrieren?
- Welche verschiedenen Struts2-Tags gibt es? Wie können wir sie verwenden?
- Was ist ein Custom Type Converter in Struts2?
- Wie können wir unseren eigenen Interceptor schreiben und ihn für eine Action mappen?
- Was ist der Lebenszyklus eines Interceptors?
- Was ist ein Interceptor-Stack?
- Was ist das struts-default-Paket und welche Vorteile bietet es?
- Was ist der Standard-Suffix für Struts2-Action-URIs und wie können wir ihn ändern?
- Wo befindet sich standardmäßig der Ort der Ergebnisseiten und wie können wir ihn ändern?
- Wie können wir Dateien in einer Struts2-Anwendung hochladen?
- Welche Best Practices sollten beim Entwickeln einer Struts2-Anwendung beachtet werden?
- Wie können wir Ausnahmen behandeln, die von einer Anwendung in Struts2 geworfen werden?
Struts2 Interviewfragen und Antworten
1. Was ist Struts2?
Apache Struts2 ist ein Open-Source-Framework zum Erstellen von Webanwendungen in Java. Struts2 basiert auf dem OpenSymphony WebWork-Framework. Es ist eine deutliche Verbesserung gegenüber Struts1 und macht es flexibler, einfacher zu verwenden und zu erweitern. Die Kernkomponenten von Struts2 sind Action, Interceptors und Ergebnisseiten. Struts2 bietet viele Möglichkeiten, Action-Klassen zu erstellen und zu konfigurieren, entweder über struts.xml oder durch Annotationen. Wir können unsere eigenen Interceptors für allgemeine Aufgaben erstellen. Struts2 kommt mit vielen Tags und verwendet die OGNL-Ausdruckssprache. Wir können unsere eigenen Typ-Konverter erstellen, um Ergebnisseiten zu rendern. Ergebnisseiten können JSPs und FreeMarker-Vorlagen sein.
2. Was sind die Unterschiede zwischen Struts1 und Struts2 oder wie ist Struts2 besser als Struts1?
Struts2 ist darauf ausgelegt, die Mängel von Struts1 zu überwinden und flexibler sowie erweiterbar zu sein. Einige der bemerkenswerten Unterschiede sind:
Komponenten | Struts1 | Struts2 |
---|---|---|
Action-Klassen | Struts1 Action-Klassen müssen eine Abstract Class erweitern, was sie nicht erweiterbar macht. | Struts2 Action-Klassen sind flexibel und können erstellt werden, indem man das Action interface implementiert, die ActionSupport-Klasse erweitert oder einfach eine execute()-Methode hat. |
Thread-Sicherheit | Struts1 Action-Klassen sind Singleton und nicht thread-sicher, was besondere Vorsicht auf Entwicklerseite erfordert, um Nebeneffekte aufgrund von Multithreading zu vermeiden. | Struts2 Action-Klassen werden pro Anfrage instanziiert, sodass kein Multithreading besteht und sie thread-sicher sind. |
Servlet-API-Kopplung | Struts1-APIs sind eng mit dem Servlet-API gekoppelt und Request- und Response-Objekte werden an die execute()-Methode der Action-Klassen übergeben. | Struts2-API ist locker mit dem Servlet-API gekoppelt und mappt automatisch die Form Bean-Daten auf die Java Bean-Eigenschaften der Action-Klasse, die wir meistens verwenden. Wenn wir jedoch auf Servlet-API-Klassen verweisen müssen, gibt es dafür *Aware interfaces. |
Testing | Struts1 Action-Klassen sind aufgrund der Servlet-API-Kopplung schwer zu testen. | Struts2 Action-Klassen sind wie normale Java-Klassen und können leicht getestet werden, indem man sie instanziiert und ihre Eigenschaften setzt. |
Request-Parameter-Mapping | Bei Struts1 müssen wir ActionForm-Klassen erstellen, um Request-Parameter zu halten, und wir müssen sie in der Struts-Konfigurationsdatei konfigurieren. | Bei Struts2 wird das Mapping von Request-Parametern on the fly durchgeführt und alles, was wir brauchen, sind Java Bean-Eigenschaften in den Action-Klassen oder die Implementierung des ModelDriven interfaces, um den Namen der Java Bean-Klasse für das Mapping anzugeben. |
Tag-Unterstützung | Struts1 verwendet JSTL-Tags und ist daher begrenzt. | Struts2 verwendet OGNL und bietet verschiedene Arten von UI-, Control- und Data-Tags. Es ist vielseitiger und leichter zu verwenden. |
Validierung | Struts1 unterstützt die Validierung durch eine manuelle validate()-Methode. | Struts2 unterstützt sowohl manuelle Validierung als auch die Integration des Validierungsframeworks. |
Ansichten-Rendering | Struts1 verwendet die Standard-JSP-Technologie, um Bean-Werte für Ansichten auf JSP-Seiten bereitzustellen. | Struts2 verwendet ValueStack, um Request-Parameter und Attribute zu speichern, und wir können OGNL und Struts2-Tags verwenden, um auf sie zuzugreifen. |
Unterstützung von Modulen | Module in Struts1 sind komplex zu entwerfen und wirken wie separate Projekte. | Struts2 bietet eine “namespace”-Konfiguration für Pakete, um Module leicht zu erstellen. |
3. Was sind die Kernkomponenten von Struts2?
Struts2 Kernkomponenten sind:
- Action-Klassen
- Interceptor
- Result-Seiten, JSP oder FreeMarker-Vorlagen
- ValueStack, OGNL und Tag-Bibliotheken
4. Was ist ein Interceptor in Struts2?
Interceptor sind das Rückgrat des Struts2-Frameworks. Struts2 Interceptor sind verantwortlich für die meisten Verarbeitungsschritte im Framework, wie das Übergeben von Request-Parametern an Action-Klassen, das Bereitstellen von Servlet API Request, Response, Session für Action-Klassen, Validierung, i18n-Unterstützung usw. ActionInvocation ist dafür verantwortlich, Action-Klassen und Interceptor zu kapseln und in der richtigen Reihenfolge auszulösen. Die wichtigste Methode zur Verwendung in ActionInvocation ist die invoke()-Methode, die die Interceptor-Kette verfolgt und den nächsten Interceptor oder die nächste Action aufruft. Dies ist eines der besten Beispiele für das Chain of Responsibility Design Pattern in Java EE-Frameworks.
5. Welches Design Pattern wird von Struts2 Interceptors implementiert?
Struts2 Interceptor basieren auf dem Design Pattern der intercepting filters. Die Aufrufung der Interceptor im Interceptor-Stack ähnelt stark dem Chain of Responsibility Design Pattern.
6. Welche verschiedenen Wege gibt es, um Action-Klassen in Struts2 zu erstellen?
Struts2 bietet verschiedene Möglichkeiten, Action-Klassen zu erstellen:
- Durch Implementierung des Action-Interface
- Verwendung der Struts2 @Action-Annotation
- Durch Erweiterung der ActionSupport-Klasse
- Jede normale Java-Klasse mit einer execute()-Methode, die String zurückgibt, kann als Action-Klasse konfiguriert werden.
7. Sind Struts2 Action und Interceptors thread-sicher?
Struts2 Action-Klassen sind thread-sicher, da für jede Anfrage ein Objekt instanziiert wird, um diese zu bearbeiten. Struts2 Interceptor sind Singleton-Klassen und ein neuer Thread wird erstellt, um die Anfrage zu bearbeiten, daher sind sie nicht thread-sicher und wir müssen sie sorgfältig implementieren, um Probleme mit gemeinsam genutzten Daten zu vermeiden.
8. Welche Klasse ist der Front Controller in Struts2?
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter ist die Front Controller Klasse in Struts2 und jeder Request beginnt mit dieser Klasse. Frühere Versionen von Struts2 verwendeten org.apache.struts2.dispatcher.FilterDispatcher als Front Controller Klasse.
9. Was sind die Vorteile von Interceptors in Struts2?
Einige der Vorteile von Interceptors sind:
- Interceptor spielt eine entscheidende Rolle bei der Erreichung einer hohen Trennung von Anliegen.
- Struts2 Interceptors sind konfigurierbar, wir können sie für jede gewünschte Action konfigurieren.
- Wir können unsere eigenen benutzerdefinierten Interceptors erstellen, um allgemeine Aufgaben wie das Protokollieren von Request-Parametern, Authentifizierung usw. durchzuführen. Dies hilft uns, gemeinsame Aufgaben an einem einzigen Ort zu bewältigen und die Wartungskosten niedrig zu halten.
- Wir können einen Interceptors-Stack erstellen, um ihn mit verschiedenen Actions zu verwenden.
10. Was sind ValueStack und OGNL?
ValueStack ist der Speicherbereich, in dem die Anwendungsdaten von Struts2 zur Verarbeitung der Client-Requests gespeichert werden. Die Daten werden in ActionContext-Objekten gespeichert, die ThreadLocal verwenden, um wertspezifische Daten für den jeweiligen Request-Thread zu haben. Object-Graph Navigation Language (OGNL) ist eine Expression Language, die verwendet wird, um Daten auf dem ValueStack zu manipulieren. Wie man im Architekturdiagramm sehen kann, können sowohl Interceptors als auch Ergebnisseiten auf Daten auf dem ValueStack zugreifen, die OGNL verwenden.
11. Nennen Sie einige nützliche Annotationen, die in Struts2 eingeführt wurden
Einige der wichtigen in Struts2 eingeführten Annotationen sind:
- @Action, um eine Action-Klasse zu erstellen
- @Actions, um eine einzige Klasse für mehrere Actions zu konfigurieren
- @Namespace und @Namespaces, um verschiedene Module zu erstellen
- @Result für Ergebnisseiten
- @ResultPath, um den Standort der Ergebnisseiten zu konfigurieren
12. Nennen Sie einige wichtige Struts2-Konstanten, die Sie verwendet haben?
Einige der von mir verwendeten Struts2-Konstanten sind:
- struts.devMode: um unsere Anwendung im Entwicklungsmodus zu betreiben.
- struts.convention.result.path: um den Standort der Ergebnisseiten zu konfigurieren.
- struts.custom.i18n.resources: um das globale Ressourcenbündel für i18n-Unterstützung zu definieren.
- struts.action.extension: um den URL-Suffix für die Struts2-Anwendung zu konfigurieren.
Wir können die oben genannten Konstanten in der struts.xml-Datei wie gezeigt konfigurieren.
<constant name="struts.devMode" value="true"></constant>
<constant name="struts.action.extension" value="action,do"></constant>
<constant name="struts.custom.i18n.resources" value="global"></constant>
<constant name="struts.convention.result.path" value="/"></
13. Wofür wird das namespace in der Action-Mapping in Struts2 verwendet?
Die Struts2 namespace-Konfiguration ermöglicht es uns, Module wie admin, user, customer usw. leicht zu erstellen.
14. Welcher Interceptor ist verantwortlich für das Mapping von Request-Parametern zu Java Bean-Eigenschaften der Action-Klasse?
com.opensymphony.xwork2.interceptor.ParametersInterceptor ist verantwortlich für das Mapping von Request-Parametern zu Java Bean-Eigenschaften der Action-Klasse.
15. Welcher Interceptor ist verantwortlich für die i18n-Unterstützung?
com.opensymphony.xwork2.interceptor.I18nInterceptor ist verantwortlich für die i18n-Unterstützung in Struts2-Anwendungen.
16. Action Interface vs ActionSupport-Klasse
Wir können das Action Interface implementieren, um unsere Action-Klassen zu erstellen. Dieses Interface hat eine einzige Methode execute(), die wir implementieren müssen. Der einzige Vorteil der Verwendung dieses Interface ist, dass es einige Konstanten enthält, die wir für Ergebnisseiten verwenden können, diese Konstanten sind SUCCESS, ERROR, NONE, INPUT und LOGIN. Die ActionSupport-Klasse ist die Standardimplementierung des Action Interface und implementiert auch Interfaces im Zusammenhang mit Validierung und i18n-Unterstützung. Die ActionSupport-Klasse implementiert die Interfaces Action, Validateable, ValidationAware, TextProvider und LocaleProvider. Wir können die validate()-Methode der ActionSupport-Klasse überschreiben, um eine Validierung auf Feldebene in unseren Action-Klassen einzubeziehen. Je nach Anforderungen können wir einen der Ansätze zur Erstellung von Struts 2 Action-Klassen verwenden, mein Favorit ist die ActionSupport-Klasse, weil sie das Schreiben von Validierungs- und i18n-Logik in Action-Klassen erleichtert.
17. Wie können wir Servlet API Request, Response, HttpSession usw. Objekte in Action-Klassen erhalten?
Struts2 Action-Klassen bieten keinen direkten Zugriff auf Servlet API-Komponenten wie Request, Response und Session. Manchmal benötigen wir jedoch diesen Zugriff in Action-Klassen, wie zum Beispiel zur Überprüfung der HTTP-Methode oder zum Setzen von Cookies in der Response. Deshalb bietet die Struts2-API eine Reihe von \*Aware Interfaces, die wir implementieren können, um auf diese Objekte zuzugreifen. Die Struts2-API verwendet Dependency Injection, um Servlet-API-Komponenten in Action-Klassen zu injizieren. Einige der wichtigen Aware Interfaces sind SessionAware, ApplicationAware, ServletRequestAware und ServletResponseAware.
18. Wofür wird der execAndWait Interceptor verwendet?
Struts2 bietet den execAndWait Interceptor für lang laufende Action-Klassen an. Wir können diesen Interceptor verwenden, um dem Client eine Zwischen Response Page zurückzugeben und sobald die Verarbeitung abgeschlossen ist, wird die endgültige Antwort an den Client zurückgesendet. Dieser Interceptor ist im struts-default-Paket definiert und die Implementierung befindet sich in der `ExecuteAndWaitInterceptor` Klasse.
19. Wofür wird der Token Interceptor in Struts2 verwendet?
Eines der großen Probleme bei Webanwendungen ist die doppelte Formularübermittlung. Wird dies nicht beachtet, kann es dazu führen, dass Kunden doppelt belastet werden oder Datenbankwerte zweimal aktualisiert werden. Wir können einen Token Interceptor verwenden, um das Problem der doppelten Formularübermittlung zu lösen. Dieser Interceptor ist im struts-default-Paket definiert, ist aber nicht Teil eines Interceptor-Stacks, daher müssen wir ihn manuell in unseren Action-Klassen einbinden.
20. Wie können wir log4j in einer Struts2-Anwendung integrieren?
Struts2 bietet eine einfache Integration der log4j-API für Logging-Zwecke, alles, was wir benötigen, ist eine log4j-Konfigurationsdatei im Verzeichnis WEB-INF/classes.
21. Welche verschiedenen Struts2 Tags gibt es? Wie können wir sie verwenden?
Struts2 bietet viele benutzerdefinierte Tags, die wir auf Ergebnisseiten verwenden können, um Ansichten für Client-Anfragen zu erstellen. Diese Tags sind grob in drei Kategorien unterteilt: Daten-Tags, Steuerungs-Tags und UI-Tags. Wir können diese Tags verwenden, indem wir sie in JSP-Seiten mit der Taglib-Direktive hinzufügen:
<%@ taglib uri="/struts-tags" prefix="s" %>
Einige der wichtigen Daten-Tags sind property, set, push, bean, action, include, i18n und text Tag. Steuerungs-Tags werden für die Manipulation und Navigation von Daten aus einer Sammlung verwendet. Einige der wichtigen Steuerungs-Tags sind if-elseif-else, iterator, append, merge, sort, subset und generator Tag. Struts2 UI-Tags werden verwendet, um HTML-Markup-Sprache zu generieren, HTML-Formulardaten an Action-Klassen-Eigenschaften zu binden, Typ Conversion, Validierung und i18n-Unterstützung zu bieten.
22. Was ist ein Custom Type Converter in Struts2?
Struts2 unterstützt die Expression Language OGNL und führt zwei wichtige Aufgaben in Struts 2 aus – Datenübertragung und Typkonvertierung. OGNL ist flexibel und wir können es leicht erweitern, um unsere eigene benutzerdefinierte Converter-Klasse zu erstellen. Der erste Schritt ist, das Eingabeformat für die benutzerdefinierte Klasse festzulegen. Der zweite Schritt ist die Implementierung der Converter-Klasse. Type Converter-Klassen sollten das Interface com.opensymphony.xwork2.conversion.TypeConverter implementieren.
23. Wie können wir unseren eigenen Interceptor schreiben und ihn für eine Action mappen?
Wir können das Interface com.opensymphony.xwork2.interceptor.Interceptor implementieren, um unseren eigenen Interceptor zu erstellen. Sobald die Interceptor-Klasse fertig ist, müssen wir sie im struts.xml-Paket definieren, wo wir sie verwenden wollen. Wir können auch einen Interceptor-Stack mit unserem benutzerdefinierten Interceptor und defaultStack-Interceptors erstellen.
24. Was ist der Lebenszyklus eines Interceptors?
Das Interceptor-Interface definiert drei Methoden – init(), destroy() und intercept(). Init und destroy sind die Life Cycle Methoden eines Interceptors. Interceptors sind Singleton-Klassen und Struts2 initialisiert einen neuen Thread, um jede Anfrage zu bearbeiten.
25. Was ist ein Interceptor-Stack?
Ein Interceptor-Stack hilft uns, mehrere Interceptors in einem Paket für die weitere Verwendung zusammenzufassen. Das struts-default-Paket erstellt einige der am häufigsten verwendeten Interceptor-Stacks wie basicStack und defaultStack.
26. Was ist das struts-default-Paket und welche Vorteile bietet es?
struts-default ist ein abstraktes Paket, das alle Struts2-Interceptors und häufig verwendete Interceptor-Stacks definiert. Es ist ratsam, dieses Paket zu erweitern, während wir unser Anwendungspaket konfigurieren, um eine erneute Konfiguration von Interceptors zu vermeiden. Dies wird bereitgestellt, um Entwicklern die mühsame Aufgabe der Konfiguration von Interceptors und Ergebnisseiten in unserer Anwendung zu erleichtern.
27. Was ist der Standard-Suffix für Struts2-Action-URIs und wie können wir ihn ändern?
Der Standard-URI-Suffix für Struts2-Actions ist .action, in Struts1 war der Standard-Suffix .do. Wir können diesen Suffix ändern, indem wir den Wert der Konstante struts.action.extension in unserer Struts2-Konfigurationsdatei definieren:
<constant name="struts.action.extension" value="action,do"></constant>
28. Wo befindet sich standardmäßig der Ort der Ergebnisseiten und wie können wir ihn ändern?
Standardmäßig sucht Struts2 nach Ergebnisseiten im Verzeichnis {WEBAPP-ROOT}/{Namespace}/, aber manchmal möchten wir Ergebnisseiten an einem anderen Ort aufbewahren. Wir können den Wert der Konstante struts.convention.result.path in unserer Struts2-Konfigurationsdatei angeben, um den Standort der Ergebnisseiten zu ändern. Eine andere Möglichkeit ist die Verwendung der Annotation @ResultPath in Action-Klassen, um den Standort der Ergebnisseiten anzugeben.
29. Wie können wir Dateien in einer Struts2-Anwendung hochladen?
Das Hochladen von Dateien ist eine der gängigen Aufgaben in einer Webanwendung. Deshalb bietet Struts2 eingebaute Unterstützung für das Hochladen von Dateien durch den FileUploadInterceptor. Dieser Interceptor ist im struts-default-Paket konfiguriert und bietet Optionen zur Festlegung der maximalen Dateigröße und der Dateitypen, die auf den Server hochgeladen werden können.
30. Was sind die besten Praktiken bei der Entwicklung einer Struts2-Anwendung?
Einige der besten Praktiken bei der Entwicklung einer Struts2-Anwendung sind:
- Versuchen Sie immer, das struts-default-Paket zu erweitern, während Sie Ihr eigenes Paket erstellen, um Code-Redundanz bei der Konfiguration von Interceptors zu vermeiden.
- Für allgemeine Aufgaben in der Anwendung, wie das Protokollieren von Request-Parametern, versuchen Sie, Interceptors zu verwenden.
- Halten Sie immer die Java Bean-Eigenschaften der Action-Klassen in einem separaten Bean für die Wiederverwendung des Codes und implementieren Sie das ModelDriven-Interface.
- Wenn Sie einen benutzerdefinierten Interceptor haben, den Sie in mehreren Actions verwenden werden, erstellen Sie dafür einen Interceptor-Stack und verwenden Sie diesen.
- Versuchen Sie, Ihre Anwendung in verschiedene Module mit Namespace-Konfiguration basierend auf funktionalen Bereichen aufzuteilen.
- Versuchen Sie, Struts2-Tags auf Ergebnisseiten für Klarheit im Code zu verwenden, und erstellen Sie bei Bedarf Ihre eigenen Type Converter.
- Verwenden Sie den Entwicklungsmodus für eine schnellere Entwicklung, achten Sie jedoch darauf, dass Produktionscode nicht im Dev-Modus läuft.
- Verwenden Sie Struts2 i18n-Unterstützung für Ressourcenbündel und zur Unterstützung von Lokalisierung.
- Struts2 bietet viele Orte, an denen Sie Ressourcenbündel haben können, aber versuchen Sie, ein globales Ressourcenbündel und eines für die Action-Klasse zu behalten, um Verwirrung zu vermeiden.
- Das struts-default-Paket konfiguriert alle Interceptors und erstellt verschiedene Interceptor-Stacks. Verwenden Sie nur das, was benötigt wird, zum Beispiel, wenn Sie keine Lokalisierung-Anforderung haben, können Sie den i18n-Interceptor vermeiden.
31. Wie können wir Ausnahmen behandeln, die von einer Anwendung in Struts2 geworfen werden?
Struts2 bietet ein sehr robustes Framework zur Ausnahmebehandlung. Wir können globale Ergebnisse in Paketen angeben und dann spezifische Ausnahmen diesen Result Pages zuordnen. Das Mapping von Ausnahmen kann sowohl auf der Ebene des globalen Pakets als auch auf der Aktionsebene erfolgen. Es ist eine gute Idee, Ausnahme Result Page zu haben, um dem Benutzer Informationen zu liefern, wenn eine unerwartete Ausnahme auftritt, die von der Anwendung nicht verarbeitet wird. Die Beispielkonfiguration in der struts.xml-Datei sieht wie folgt aus.
<package name="user" namespace="/" extends="struts-default">
<global-results>
<result name="exception">/exception.jsp</result>
<result name="runtime_exception">/runtime_exception.jsp</result>
<result name="error">/error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="exception"></exception-mapping>
<exception-mapping exception="java.lang.Error" result="error"></exception-mapping>
<exception-mapping exception="java.lang.RuntimeException" result="runtime_exception"></exception-mapping>
</global-exception-mappings>
<action name="myaction" class="com.journaldev.struts2.exception.MyAction">
</action>
<action name="myspecialaction" class="com.journaldev.struts2.exception.MySpecialAction">
<exception-mapping exception="java.io.IOException" result="login"></exception-mapping>
<result name="login">/error.jsp</result>
</action>
</package>
Das ist alles für die Struts2-Interviewfragen und -antworten.