Struts-Tutorial für Anfänger

Willkommen zum Struts-Tutorial für Anfänger. Struts ist eines der ältesten Frameworks zum Erstellen von Java-Webanwendungen.

Struts-Tutorial

Struts war die erste Implementierung des MVC-Designmusters und hat sich zusammen mit den neuesten Verbesserungen in Java und den Java-EE-Technologien stark weiterentwickelt. Der Struts-Tutorial-Artikel zielt darauf ab, grundlegende Details zu Struts 2 und darauf, wie wir unsere erste „Hello World“ Struts 2-Anwendung erstellen können, bereitzustellen.

Struts 2

Apache Struts 2 ist ein Open-Source-, Industriestandard-, flexibles und erweiterbares Framework zum Erstellen von Java-EE-Webanwendungen. Struts 2 basiert auf dem OpenSymphony WebWork Framework. Struts 2 ist sehr flexibel in Bezug auf Entwicklung und Konfiguration, und wir werden sehen, wie einfach es ist, eine Webanwendung unter Verwendung des Struts 2-Frameworks zu entwickeln.

Struts 2 Architekturdiagramm

Das untenstehende Diagramm zeigt verschiedene Komponenten von Struts 2 in einer Webanwendung.

Struts 2 Interceptors

Struts Interceptors funktionieren wie Servlet-Filter, die vor und nach der Verarbeitung des Requests ausgeführt werden. Sie werden verwendet, um gemeinsame Operationen für verschiedene Aktionen durchzuführen. Zum Beispiel Logging, Session-Validierung, Hinzufügen gemeinsamer Header zur Antwort usw.

Struts 2 ValueStack und OGNL

ValueStack ist der Speicherbereich, in dem Struts 2 die Anwendungsdaten für die Verarbeitung einer Client-Anfrage speichert. Die Daten werden in ActionContext-Objekten gespeichert, die ThreadLocal verwenden, um Werte spezifisch für den jeweiligen Anforderungs-Thread zu haben. Die Object-Graph Navigation Language (OGNL) ist eine leistungsstarke Ausdruckssprache, die verwendet wird, um Daten auf dem ValueStack zu manipulieren. Wie Sie in der Architekturübersicht sehen können, können sowohl Interzeptoren als auch Ergebnisseiten auf im ValueStack gespeicherte Daten über OGNL zugreifen.

Struts 2 Action

Struts 2 Action-Komponenten bearbeiten die Client-Anfragen. Struts 2 bietet verschiedene Möglichkeiten, Action-Klassen zu erstellen.

  1. Indem Sie das Interface com.opensymphony.xwork2.Action implementieren.
  2. Indem Sie die Klasse com.opensymphony.xwork2.ActionSupport erweitern. Es wird normalerweise verwendet, um leere Action-Klassen zu erstellen, um Anfragen an eine andere Ressource weiterzuleiten.
  3. Durch Annotation einer Klasse mit @Action oder @Actions Annotation.
  4. Nach Benennungskonvention für Klassen sollte der Name mit Action enden und die Methode execute() enthalten.

Struts 2 Ergebnis

Ergebniskomponenten sind normalerweise JSP- oder HTML-Seiten, um eine Ansicht für die Clientantwort zu erstellen. Struts 2 stellt ihre eigenen Tags zur Verfügung, die wir in JSP-Seiten verwenden können, um eine Antwort zu erstellen. Struts-Tags sind ein großartiges Beispiel für JSP-Custom-Tags.

Struts 2 Deklarative Architektur und Verdrahtung

Struts 2 bietet zwei Möglichkeiten, unsere Anwendung für Aktionsklassen und Ergebnisseiten zu konfigurieren.

  1. Struts XML-Datei: Wir haben eine struts.xml Datei im Verzeichnis WEB-INF/classes, in der wir unsere Anwendung Aktionsklassen und Ergebnisseiten konfigurieren können.
  2. Annotation: Wir können Java-Annotationen verwenden, um Metadateninformationen über eine Klasse bereitzustellen. Das Struts 2 Konventions-Plugin kann verwendet werden, um Java-Klassen mit @Action und @Result Annotationen zu versehen, um Aktionsklassen und zugehörige Ergebnisseiten zu konfigurieren.

Welchen Weg wir auch immer verwenden, um unsere Anwendung zu konfigurieren, das Endergebnis wird immer dasselbe sein.

Struts-Tutorial – Hello World XML-basierte Anwendung

Lassen Sie uns sehen, wie wir unsere erste Struts 2 Hello World-Anwendung erstellen können. Zuerst benötigen wir Struts 2 Jar-Dateien, der einfachste Weg ist, sie von der Struts 2 Offizielle Downloads Seite herunterzuladen. Aber wenn Sie die Bibliotheken im heruntergeladenen Archiv überprüfen, werden Sie viele Jar-Dateien sehen, die wir für unsere einfache Anwendung nicht benötigen. Also werde ich ein Maven-Projekt erstellen und nur die Abhängigkeit von struts-core hinzufügen, alle anderen transitiven Abhängigkeits-Jar-Dateien werden automatisch heruntergeladen und zur Anwendung hinzugefügt. Unsere endgültige Projektstruktur wird wie das folgende Bild aussehen. Erstellen Sie ein neues Dynamisches Web-Projekt Struts2XMLHelloWorld in Eclipse und konvertieren Sie es dann in ein Maven-Projekt wie im folgenden Bild. Sie werden feststellen, dass die Datei pom.xml im Stammverzeichnis des Projekts hinzugefügt wurde. Unser Projektaufbau in Eclipse ist bereit, schauen wir uns die verschiedenen Komponenten nacheinander an.

pom.xml

Öffnen Sie die Datei pom.xml und fügen Sie die Abhängigkeit von Struts Core hinzu, die endgültige pom.xml wird wie folgt aussehen.

<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>Struts2XMLHelloWorld</groupId>
	<artifactId>Struts2XMLHelloWorld</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<dependencies>
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-core</artifactId>
			<version>2.3.15.1</version>
		</dependency>
	</dependencies>
	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.1</version>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.3</version>
				<configuration>
					<warSourceDirectory>WebContent</warSourceDirectory>
					<failOnMissingWebXml>false</failOnMissingWebXml>
				</configuration>
			</plugin>
		</plugins>
		<finalName>${project.artifactId}</finalName>
	</build>
</project>

Beachten Sie, dass ich das finalName-Element überschrieben habe, um zu verhindern, dass die Versionsnummer der WAR-Datei hinzugefügt wird, wenn wir das Maven-Build durchführen. Andere Teile werden von Eclipse selbst hinzugefügt, die einzige Abhängigkeit, die wir benötigen, ist struts2-core, dessen aktuelle Version 2.3.15.1 ist (Stand 10. September 2013). Führen Sie einfach das Maven-Build der Anwendung durch, und Sie werden sehen, dass viele JAR-Dateien zum Anwendungs-Lib-Verzeichnis hinzugefügt werden und im Maven-Abhängigkeiten-Bereich des Projekts wie im folgenden Bild angezeigt werden.

Struts 2 Web.xml-Konfiguration

Wir müssen den Filter org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter zur Webanwendung hinzufügen und das URL-Muster angeben, für das Struts die Clientanfrage bearbeiten soll. Unser Web.xml sieht wie folgt aus;

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
	xmlns="https://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	version="3.0">
	<display-name>Struts2XMLHelloWorld</display-name>
	
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>

Für Struts 2 Versionen unter 2.1.3 war die Filterklasse org.apache.struts2.dispatcher.FilterDispatcher.

Struts Tutorial – Ergebnisseiten

Wir haben drei JSP-Seiten, die von der Anwendung verwendet werden, wir verwenden Struts 2-Tags, um unsere JSP-Seiten zu erstellen. login.jsp

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<%-- Using Struts2 Tags in JSP --%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Login Page</title>
</head>
<body>
<h3>Welcome User, please login below</h3>
<s:form action="login">
	<s:textfield name="name" label="User Name"></s:textfield>
	<s:textfield name="pwd" label="Password" type="password"></s:textfield>
	<s:submit value="Login"></s:submit>
</s:form>
</body>
</html>

Beachten Sie, dass die Namen der Formularfelder name und pwd sind, wir werden sehen, wie sie in Action-Klassen verwendet werden. welcome.jsp

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Welcome Page</title>
</head>
<body>
<h3>Welcome <s:property value="name"></s:property></h3>
</body>
</html>

Beachten Sie das Struts-Tag s:property, das wir verwenden können, um Request-Attribute abzurufen, der Name ist derselbe wie in login.jsp. error.jsp

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Error Page</title>
</head>
<body>
<h4>User Name or Password is wrong</h4>
<s:include value="login.jsp"></s:include>
</body>
</html>

Dies ist eine einfache JSP-Seite, auf der wir eine Fehlermeldung hinzufügen und die Anmeldeseite in der Antwort einbeziehen.

Struts Tutorial – Aktionsklassen

Unsere Anwendung hat nur eine Aktionsklasse, in der wir das Struts 2 Action-Interface implementieren. LoginAction.java

package com.journaldev.struts2.action;

import com.opensymphony.xwork2.Action;

public class LoginAction implements Action {
	
	@Override
	public String execute() throws Exception {
		if("pankaj".equals(getName()) && "admin".equals(getPwd()))
		return "SUCCESS";
		else return "ERROR";
	}
	
	 // Java Bean zum Halten der Formularparameter 
	private String name;
	private String pwd;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	
}

Beachten Sie, dass die Aktionsklasse auch eine Java-Bean mit denselben Variablen wie login.jsp und ihren Getter- und Setter-Methoden ist. Struts kümmert sich um die Zuordnung der Anforderungsparameter zu den Aktionsklassenvariablen.

Struts Tutorial – Konfigurationsdatei

Da wir eine XML-basierte Konfiguration verwenden, um unsere Anwendung zu verdrahten, müssen wir eine Struts-Konfigurationsdatei erstellen, die als struts.xml benannt sein sollte und sich im Verzeichnis WEB-INF/classes befindet. struts.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"https://struts.apache.org/dtds/struts-2.3.dtd">
<struts>

<package name="user" namespace="/User" extends="struts-default">
	<action name="home">
		<result>/login.jsp</result>
	</action>
	<action name="login" class="com.journaldev.struts2.action.LoginAction">
	<result name="SUCCESS">/welcome.jsp</result>
	<result name="ERROR">/error.jsp</result>
	</action>

</package>

</struts>

Für die Aktion „home“ gibt es keine Aktionsklasse und nur ein Ergebnis, daher wird die Anfrage an die login.jsp-Seite weitergeleitet. Für die Aktion „login“ ist LoginAction die Aktionsklasse, und wenn die Methode execute() „SUCCESS“ zurückgibt, wird die Anfrage von welcome.jsp verarbeitet, und für „ERROR“ wird sie an die Fehlerseite error.jsp weitergeleitet. namespace=“/User“ ist wichtig und wird in der URL verwendet, um auf die Aktionsklassen zuzugreifen. Es wird bereitgestellt, um verschiedene Module zu erstellen. So können wir auf unsere Anwendung mit der URL https://localhost:8080/Struts2XMLHelloWorld/User/home.action zugreifen. Beachten Sie, dass die URL mit .action endet, was das Standard-Suffix für Struts-2-Aktionen ist, wie es für Struts 1 .do ist.

Struts Tutorial – Struts 2 Hello World Test

Wenn wir unsere Anwendung ausführen, erhalten wir folgende Antwortseiten.

Struts2 Hello World Beispielprojekt herunterladen

Das ist alles für das Struts 2 Anfänger-Tutorial, schau dir den nächsten Artikel an, in dem wir Annotationen verwenden, um eine Struts 2 Webanwendung ohne Verwendung der Konfigurationsdatei struts.xml zu erstellen.

Source:
https://www.digitalocean.com/community/tutorials/struts-tutorial-for-beginners