Struts Zelfstudie voor Beginners

Welkom bij de Struts Tutorial voor beginners. Struts is een van de oudste frameworks om een Java-webtoepassing te bouwen.

Struts Tutorial

Struts was de initiële implementatie van het MVC-ontwerppatroon en het heeft zich sterk ontwikkeld samen met de nieuwste verbeteringen in Java en Java EE-technologieën. Het Struts-tutorialartikel heeft tot doel basisinformatie te verstrekken over Struts 2 en hoe we onze eerste “Hello World” Struts 2-toepassing kunnen maken.

Struts 2

Apache Struts 2 is een open source, industriestandaard, flexibel en uitbreidbaar framework om Java EE-webtoepassingen te bouwen. Struts 2 is gebaseerd op het OpenSymphony WebWork-framework. Struts 2 is zeer flexibel wat betreft ontwikkeling en configuraties, en we zullen zien hoe eenvoudig het is om een webtoepassing te ontwikkelen met het Struts 2-framework.

Architectuurdiagram van Struts 2

Hieronder wordt het verschillende onderdeel van Struts 2 in een webapplicatie weergegeven.

Struts 2 Interceptors

Struts Interceptors zijn als Servlet Filters die worden uitgevoerd vóór en na de verwerking van het verzoek. Ze worden gebruikt om gemeenschappelijke bewerkingen uit te voeren voor verschillende acties. Bijvoorbeeld logging, sessievalidatie, het toevoegen van gemeenschappelijke headers aan de respons, enzovoort.

Struts 2 ValueStack en OGNL

ValueStack is het opslaggebied waar de toepassingsgegevens worden bewaard door Struts 2 voor het verwerken van een clientverzoek. De gegevens worden opgeslagen in ActionContext-objecten die ThreadLocal gebruiken om waarden specifiek voor de bijbehorende verzoekthread te hebben. Object-Graph Navigation Language (OGNL) is een krachtige Expression Language die wordt gebruikt om gegevens te manipuleren die zijn opgeslagen op de ValueStack. Zoals te zien is in de architectuurschema, kunnen zowel interceptors als resultaatpagina’s toegang krijgen tot gegevens die zijn opgeslagen op de ValueStack met behulp van OGNL.

Struts 2 Actie

Struts 2 Actiecomponenten verwerken de clientverzoeken. Struts 2 biedt verschillende manieren om Actieklassen te maken.

  1. Door de com.opensymphony.xwork2.Action-interface te implementeren.
  2. Door de com.opensymphony.xwork2.ActionSupport-klasse uit te breiden. Meestal wordt deze gebruikt om lege actieklassen te maken om verzoeken door te sturen naar een andere bron.
  3. Het annoteren van een klasse met @Action of @Actions-annotatie.
  4. Volgens de naamgevingsconventie voor klassen, moet de naam eindigen op Action en moet het een execute() methode hebben.

Struts 2 Result

Result componenten zijn meestal JSP- of HTML-pagina’s om een weergave te maken voor de clientrespons. Struts 2 biedt hun eigen tags die we kunnen gebruiken in JSP-pagina’s om een respons te maken. Struts-tags zijn een goed voorbeeld van JSP Aangepaste Tags.

Struts 2 Declaratieve Architectuur en Bedrading

Struts 2 biedt twee manieren om onze applicatie te configureren voor actieklassen en resultaatpagina’s.

  1. Struts XML-bestand: We hebben een struts.xml bestand in de WEB-INF/classes directory waar we onze applicatieactieklassen en resultaatpagina’s kunnen configureren.
  2. Annotation: We kunnen Java-annotaties gebruiken om metagegevensinformatie over een klasse te verstrekken. De Struts 2-conventieplugin kan worden gebruikt om java-klassen te annoteren met @Action en @Result annotaties om actieklassen en bijbehorende resultaatpagina’s te configureren.

Ongeacht de manier waarop we onze applicatie configureren, zal het eindresultaat altijd hetzelfde zijn.

Struts Zelfstudie – Hallo Wereld XML-gebaseerde Applicatie

Laten we eens kijken hoe we onze eerste Struts 2 Hello World-toepassing kunnen maken. Allereerst hebben we de Struts 2-jar-bestanden nodig, de makkelijkste manier is om deze te downloaden vanaf de Struts 2 Officiële Downloads pagina. Maar wanneer je de bibliotheken in het gedownloade archief bekijkt, zul je veel jar-bestanden zien die we niet nodig hebben voor onze eenvoudige toepassing. Dus zal ik een mavenproject maken en alleen de struts-core afhankelijkheid toevoegen, alle andere transitive afhankelijkheidsjar-bestanden worden automatisch gedownload en toegevoegd aan de toepassing. Onze uiteindelijke projectstructuur zal eruit zien als de onderstaande afbeelding. Maak een nieuw Dynamisch Webproject Struts2XMLHelloWorld in Eclipse en converteer het vervolgens naar een mavenproject zoals de onderstaande afbeelding. Je zult merken dat het pom.xml-bestand is toegevoegd in de hoofdmap van het project. Onze projectopstelling in Eclipse is gereed, laten we naar de verschillende onderdelen kijken in volgorde.

pom.xml

Open het pom.xml-bestand en voeg de struts-core afhankelijkheid toe, het uiteindelijke pom.xml-bestand zal eruitzien als hieronder.

<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>

Merk op dat ik het finalName-element heb overschreven om te voorkomen dat het versienummer wordt toegevoegd in het WAR-bestand wanneer we een maven-build uitvoeren. Andere onderdelen worden door Eclipse zelf toegevoegd, de enige afhankelijkheid die we nodig hebben is struts2-core waarvan de huidige versie 2.3.15.1 is (vanaf 10-sep-2013). Voer gewoon een maven-build van de applicatie uit en je zult zien dat er veel JAR’s aan de applicatiemap worden toegevoegd en worden weergegeven in de Maven-afhankelijkheden sectie van het project zoals in de onderstaande afbeelding.

Struts 2 web.xml configuratie

We moeten de org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter filter toevoegen aan de webapplicatie en het URL-patroon opgeven waar we willen dat Struts voor het verzoek van de client zorgt. Ons web.xml ziet er als volgt uit;

<?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>

Voor Struts 2 versie onder 2.1.3, was de filter-klasse org.apache.struts2.dispatcher.FilterDispatcher.

Struts Zelfstudie – Resultaatpagina’s

We hebben drie JSP-pagina’s die door de applicatie zullen worden gebruikt, we gebruiken Struts 2-tags om onze JSP-pagina’s te maken. 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>

Merk op dat de namen van de formulier velden name en pwd zijn, we zullen zien hoe ze worden gebruikt in Actie klassen. 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>

Merk op de struts-tag s:property die we kunnen gebruiken om verzoekattributen te verkrijgen, de naam is hetzelfde als 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>

Dit is een eenvoudige JSP-pagina waar we een foutmelding toevoegen en de inlogpagina opnemen in de reactie.

Struts zelfstudie – Actieklassen

Onze applicatie heeft slechts één Actieklasse waarin we de Struts 2 Actie-interface implementeren. 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 om de formulierparameters vast te houden
	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;
	}
	
}

Merk op dat de actieklasse ook een Java Bean is met dezelfde variabelen als login.jsp en hun getter- en setter-methoden. Struts zal zorgen voor het koppelen van de verzoekparameters aan de actieklasse variabelen.

Struts zelfstudie – Configuratiebestand

Aangezien we XML-gebaseerde configuratie gebruiken voor het bedraden van onze applicatie, moeten we een Struts-configuratiebestand maken dat struts.xml moet heten en zich binnen de WEB-INF/classes map bevindt. Het 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>

Voor actie “home” is er geen Actieklasse en slechts één resultaat, dus het verzoek wordt doorgestuurd naar de pagina login.jsp. Voor actie “login” is LoginAction de actieklasse en als de execute() methode “SUCCESS” retourneert, wordt het verzoek verwerkt door welcome.jsp en voor “ERROR” wordt het doorgestuurd naar de pagina error.jsp. namespace=” /User” is belangrijk en wordt gebruikt in de URL om toegang te krijgen tot de actieklassen, het wordt verstrekt om verschillende modules te maken. Dus kunnen we onze applicatie benaderen met de URL https://localhost:8080/Struts2XMLHelloWorld/User/home.action. Let op dat de URL eindigt met .action dat is de standaardsuffix voor Struts 2-actie zoals het is .do voor Struts 1.

Struts Tutorial – Struts 2 Hello World Test

Wanneer we onze toepassing uitvoeren, krijgen we de volgende reactiepagina’s.

Download Struts2 Hello World Example Project

Dat is alles voor de beginnershandleiding van Struts 2, bekijk het volgende artikel waarin we annotaties gebruiken om een Struts 2-webtoepassing te maken zonder het configuratiebestand struts.xml te gebruiken.

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