Streben 2 - Aktionen
Actionssind der Kern des Struts2-Frameworks, wie sie für jedes MVC-Framework (Model View Controller) gelten. Jede URL ist einer bestimmten Aktion zugeordnet, die die Verarbeitungslogik bereitstellt, die zum Bearbeiten der Anforderung vom Benutzer erforderlich ist.
Die Aktion dient aber auch zwei anderen wichtigen Funktionen. Erstens spielt die Aktion eine wichtige Rolle bei der Übertragung von Daten von der Anforderung bis zur Ansicht, unabhängig davon, ob es sich um eine JSP oder eine andere Art von Ergebnis handelt. Zweitens muss die Aktion das Framework bei der Bestimmung unterstützen, welches Ergebnis die Ansicht wiedergeben soll, die in der Antwort auf die Anforderung zurückgegeben wird.
Aktion erstellen
Die einzige Voraussetzung für Aktionen in Struts2ist, dass es eine noargument-Methode geben muss, die entweder ein String- oder ein Result-Objekt zurückgibt und ein POJO sein muss. Wenn die Methode ohne Argumente nicht angegeben ist, wird standardmäßig die Methode execute () verwendet.
Optional können Sie die erweitern ActionSupport Klasse, die sechs Schnittstellen implementiert, einschließlich ActionSchnittstelle. Die Aktionsoberfläche ist wie folgt:
public interface Action {
public static final String SUCCESS = "success";
public static final String NONE = "none";
public static final String ERROR = "error";
public static final String INPUT = "input";
public static final String LOGIN = "login";
public String execute() throws Exception;
}
Schauen wir uns die Aktionsmethode im Hello World-Beispiel an -
package com.tutorialspoint.struts2;
public class HelloWorldAction {
private String name;
public String execute() throws Exception {
return "success";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Um den Punkt zu veranschaulichen, an dem die Aktionsmethode die Ansicht steuert, nehmen wir die folgende Änderung an der vor execute Methode und erweitern Sie die Klasse ActionSupport wie folgt:
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport {
private String name;
public String execute() throws Exception {
if ("SECRET".equals(name)) {
return SUCCESS;
} else {
return ERROR;
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
In diesem Beispiel haben wir eine Logik in der Methode execute, um das Namensattribut zu untersuchen. Wenn das Attribut der Zeichenfolge entspricht"SECRET", wir kehren zurück SUCCESS sonst kehren wir zurück ERRORals Ergebnis. Da wir ActionSupport erweitert haben, können wir String-Konstanten verwendenSUCCESSund FEHLER. Lassen Sie uns nun unsere Datei struts.xml wie folgt ändern:
<?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">/HelloWorld.jsp</result>
<result name = "error">/AccessDenied.jsp</result>
</action>
</package>
</struts>
Erstellen Sie eine Ansicht
Lassen Sie uns die folgende JSP-Datei erstellen HelloWorld.jspim WebContent-Ordner in Ihrem Eclipse-Projekt. Klicken Sie dazu im Projektexplorer mit der rechten Maustaste auf den Ordner WebContent und wählen SieNew >JSP File. Diese Datei wird aufgerufen, falls das Rückgabeergebnis SUCCESS ist. Dies ist eine String-Konstante "success", wie in der Aktionsschnittstelle definiert.
<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>
Hello World, <s:property value = "name"/>
</body>
</html>
Es folgt die Datei, die vom Framework aufgerufen wird, falls das Aktionsergebnis ERROR ist, was der String-Konstante "error" entspricht. Es folgt der Inhalt vonAccessDenied.jsp
<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<html>
<head>
<title>Access Denied</title>
</head>
<body>
You are not authorized to view this page.
</body>
</html>
Wir müssen auch schaffen index.jspim WebContent-Ordner. Diese Datei dient als erste Aktions-URL, auf die der Benutzer klicken kann, um das Struts 2-Framework anzuweisen, das aufzurufenexecuteMethode der HelloWorldAction-Klasse und rendern Sie die Ansicht HelloWorld.jsp.
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h1>Hello World From Struts2</h1>
<form action = "hello">
<label for = "name">Please enter your name</label><br/>
<input type = "text" name = "name"/>
<input type = "submit" value = "Say Hello"/>
</form>
</body>
</html>
Das war's, es ist keine Änderung für die Datei web.xml erforderlich. Verwenden wir also dieselbe web.xml, in der wir erstellt haben ExamplesKapitel. Jetzt sind wir bereit, unsere zu betreibenHello World Anwendung mit Struts 2 Framework.
Führen Sie die Anwendung aus
Klicken Sie mit der rechten Maustaste auf den Projektnamen und klicken Sie auf Export > WARDatei zum Erstellen einer War-Datei. Stellen Sie diese WAR dann im Webanwendungsverzeichnis von Tomcat bereit. Starten Sie abschließend den Tomcat-Server und versuchen Sie, auf die URL zuzugreifenhttp://localhost:8080/HelloWorldStruts2/index.jsp. Dies gibt Ihnen folgenden Bildschirm -
Geben Sie ein Wort als "SECRET" ein und Sie sollten die folgende Seite sehen -
Geben Sie nun ein anderes Wort als "SECRET" ein und Sie sollten die folgende Seite sehen -
Erstellen Sie mehrere Aktionen
Sie definieren häufig mehr als eine Aktion, um unterschiedliche Anforderungen zu verarbeiten und den Benutzern unterschiedliche URLs bereitzustellen. Dementsprechend definieren Sie verschiedene Klassen wie unten definiert.
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
class MyAction extends ActionSupport {
public static String GOOD = SUCCESS;
public static String BAD = ERROR;
}
public class HelloWorld extends ActionSupport {
...
public String execute() {
if ("SECRET".equals(name)) return MyAction.GOOD;
return MyAction.BAD;
}
...
}
public class SomeOtherClass extends ActionSupport {
...
public String execute() {
return MyAction.GOOD;
}
...
}
Sie konfigurieren diese Aktionen in der Datei struts.xml wie folgt:
<?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.HelloWorld"
method = "execute">
<result name = "success">/HelloWorld.jsp</result>
<result name = "error">/AccessDenied.jsp</result>
</action>
<action name = "something"
class = "com.tutorialspoint.struts2.SomeOtherClass"
method = "execute">
<result name = "success">/Something.jsp</result>
<result name = "error">/AccessDenied.jsp</result>
</action>
</package>
</struts>
Wie Sie im obigen hypothetischen Beispiel sehen können, ergibt sich die Aktion SUCCESS und ERROR’s sind dupliziert.
Um dieses Problem zu umgehen, wird empfohlen, eine Klasse zu erstellen, die die Ergebnisergebnisse enthält.