[JAVA] Verwendung von Struts2 * Spring Framework (Spring Plugin) Version Juni 2017

So verbinden Sie Struts2 und Spring Framework

Struts2 verfügt intern über einen DI-Container, der aus der verwendeten Konfigurationsdatei gelesen und die angegebene Klasse instanziiert werden kann. Die Funktion des DI-Containers kann durch einen anderen DI-Container ersetzt werden, und das Spring-Framework und JSR-330 (Guice) können ebenfalls verwendet werden. Das Struts2-Plug-In ist für jeden Container vorbereitet. Wenn Sie also beispielsweise DI of Spring Framework verwenden möchten, installieren Sie das Spring-Plug-In.

Die folgenden Funktionen erhalten Sie, indem Sie das Spring-Plug-In installieren.

  1. Aktions- und Validator-Klassen treten in die Spring-Verwaltung ein
  2. Sie können über diese Klassen auf die von Spring verwalteten Beans zugreifen.
  3. Sie können auch verschiedene Funktionen des Spring-Frameworks und Funktionen verwenden, die Spring mit anderen Frameworks verbinden.

… Und das ** die meisten können durch Spring Framework und Spring Subprojekte ** ersetzt werden.

Leider bietet es nicht die Funktionen von Spring Boot, verfügt jedoch über leistungsstärkere Funktionen als der Standard-Struts2-DI-Container, sodass es keinen Grund gibt, ihn nicht zu verwenden. Die entsprechende Spring-Version ist bis zu 4.2 in der Struts2-Version, aber tatsächlich sind auch 4.3-Serien und höher bisher verfügbar.

Wie man vorstellt

Es ist einfach zu installieren, holen Sie sich einfach das Plug-In und fügen Sie die Einstellungen hinzu.

Plugin

Führt genau das gleiche Struts2-Spring-Plugin wie die Struts2-Version ein. Das Folgende ist der Fall, wenn Sie mit maven angeben. Fügen Sie dem untergeordneten Element von "<Abhängigkeiten>" hinzu.

pom.xml


<dependency>
	<groupId>org.apache.struts</groupId>
	<artifactId>struts2-spring-plugin</artifactId>
	<version>${struts2.version}</version>
</dependency>

Aufbau

Es gibt zwei Änderungen an der Konfigurationsdatei.

  1. Struts2-Einstellungen
  2. web.xml

Fügen Sie zunächst die folgende Zeile zu struts.properties hinzu. Dies ist eine der Struts2-Einstellungen. Der Ort ist beliebig.

struts.properties


struts.objectFactory=org.apache.struts2.spring.StrutsSpringObjectFactory

Legen Sie als Nächstes den Spring-Kontext und den Listener in web.xml (Deployment-Deskriptor) fest. Die folgenden Einstellungen dienen zum Lesen des Klassenpfads /spring/applicationContext.xml und der XML-Datei, beginnend mit applicationContext- als Spring-Einstellungsdatei.

web.xml


<web-app>
    <display-name>prototype_app</display-name>
    <context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>classpath:spring/applicationContext.xml,classpath:spring/applicationContext-*.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>
</web-app>

Das ist alles für die Einstellungen zu verwenden. Setzen Sie danach applicationContext.xml, um die Beans zu registrieren, die in die Spring-Verwaltung gestellt werden sollen.

Beispiel für die Implementierung einer Aktionsklasse

Klassen unter Spring Management können von "@ Autowired" in der Action-Klasse verwendet werden. Das folgende Beispiel ist ein einfaches Beispiel für eine Listensuche.

SampleAction.java


@Namespace("/")
@Results({@Result(name=ActionSupport.SUCCESS, location="list")})
@Log4j2
public class DisplayListAction extends ActionSupport {

    @Action("list")
    public String execute() throws Exception {
	products = service.search();
	log.info("- search:{}" , products);

        return SUCCESS;
    }

    @Autowired
    ProductService service;

    @Getter @Setter
    List<SampleProduct> products;
}

Die von dieser Action-Klasse verwendete Service-Klasse (ProductService) gibt eine feste Liste wie folgt zurück:

ProductService.java


import java.util.Arrays;
import java.util.List;

import org.springframework.stereotype.Service;

@Service
public class ProductService {
	public List<SampleProduct> search() {
		List<SampleProduct> resultList =

		Arrays.asList(
			new SampleProduct().setProduct("A-1", "Prototyp X.-290PA1", 10, true, true),
			new SampleProduct().setProduct("A-2", "Prototyp X.-290PA2", 20, true, true),
			new SampleProduct().setProduct("B-3", "Prototyp X.-B3", 10, true, true),
			new SampleProduct().setProduct("B-4", "Prototyp X.-B4", 30, true, true),
			new SampleProduct().setProduct("C-5", "Prototyp X.-C5", 10, true, false),
			new SampleProduct().setProduct("C-6", "Prototyp X.-C6", 40, true, false),
			new SampleProduct().setProduct("D-7", "Prototyp X.-D7", 10, false, true),
			new SampleProduct().setProduct("D-8", "Prototyp X.-D8", 50, false, true),
			new SampleProduct().setProduct("E-9", "Prototyp X.-E9", 10, true, true),
			new SampleProduct().setProduct("Z-1000", "Prototyp Z.-1000", 0, false, false)
		);

		return resultList;
	}
}

Das hier angezeigte Beispielprodukt ist ein einfaches Datenübertragungsobjekt. Da es sich um ein Suchergebnis handelt, kann es in ein Wertobjekt konvertiert werden.

Spring Bean-Einstellungen: applicationContext.xml

Leider kann JavaConfig nicht verwendet werden. Definieren Sie es daher in der XML-Datei. Da der Komponentenscan verwendet werden kann, können Beans sofort registriert werden.

applicationContext-service.xml


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"
default-autowire="byName"
>	<!--Serviceklassendefinition, die von Spring verwaltet werden soll-->

	<context:component-scan base-package="seren.struts2.sampleapp.service" use-default-filters ="false" >
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
	</context:component-scan>
</beans>

Das Ziel des Komponentenscans ist die Klasse mit der Annotation "@ Service" im Basispaket.

Das ist alles für die Einstellungen. Es ist einfach, wenn Sie es v (・ ω ・ |

Ein Beispielprojekt ist auf github verfügbar

https://github.com/A-pZ/struts2-spring-sample

Bonus

Sie können auch Thymeleaf3 von Struts2 verwenden. Sie können Struts2-Tags überhaupt nicht verwenden, aber Thymeleaf erleichtert das Schreiben einer Ansicht. Dies ist sehr nützlich, wenn Sie von Struts2 zu Spring Framework usw. wechseln.

http://qiita.com/alpha_pz/items/5a43b4abb07141becbcd

Recommended Posts

Verwendung von Struts2 * Spring Framework (Spring Plugin) Version Juni 2017
Wie man Lombok im Frühling benutzt
Hinweise zur Verwendung von Spring Data JDBC
Verwendung von ModelMapper (Spring Boot)
Verwendung von BootStrap mit Play Framework
So legen Sie ein Profil mit annotationsbasierter Konfiguration im Spring-Framework fest und verwenden es
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
Verwendung des eingebauten h2db mit Federstiefel
Verwendung des Java-Frameworks mit AWS Lambda! ??
Verwendung von Spring Boot-Sitzungsattributen (@SessionAttributes)
Wie erstelle ich Unity Native Plugin (Android-Version)
Verwendung des NFS-Protokolls Version 2 mit Ubuntu 18.04
Verwendung von Map
Wie benutzt man rbenv?
Verwendung mit_option
Verwendung von fields_for
Verwendung von java.util.logging
Verwendung der Karte
Verwendung von collection_select
Wie benutzt man Twitter4J
Wie benutzt man active_hash! !!
Verwendung von MapStruct
Verwendung von TreeSet
[Verwendung des Etiketts]
Wie man Identität benutzt
Wie man Hash benutzt
Verwendung von Dozer.mapper
Wie benutzt man Gradle?
Verwendung von org.immutables
Verwendung von java.util.stream.Collector
Verwendung von VisualVM
Verwendung von Map
[Ruby] Verwendung von rbenv (Version `x.x.x' ist nicht installiert)
Verwendung von CommandLineRunner im Spring Batch von Spring Boot
So verwenden Sie Play Framework ohne typsicheren Aktivator
Verwendung des In-Memory-Job-Repositorys mit Spring Batch
Verwendung der Ketten-API
So senken Sie die Java-Version
[Java] Verwendung von Map
Verwendung der Warteschlange mit Priorität
[Rails] Verwendung von Enum
Verwendung von Java Optional
Verwendung von JUnit (Anfänger)
Verwendung von Ruby return
[Rails] Verwendung von Enum
Verwendung von @Builder (Lombok)
Verwendung der Java-Klasse
Wie man Big Decimal benutzt
[Java] Verwendung von removeAll ()
Verwendung von String [] args
Verwendung von Rails Join
Verwendung von Java Map
Ruby: Wie man Cookies benutzt