[JAVA] Comment utiliser Struts2 * Spring Framework (plugin Spring) Version de juin 2017

Comment connecter Struts2 et Spring Framework

Struts2 a un conteneur DI en interne, qui peut être lu à partir du fichier de configuration qu'il utilise et instancier la classe spécifiée. La fonction du conteneur DI peut être remplacée par un autre conteneur DI, et le cadre Spring et JSR-330 (Guice) peuvent également être utilisés. Le plug-in Struts2 est préparé pour chaque conteneur, donc si vous souhaitez utiliser DI de Spring Framework, par exemple, installez le plug-in Spring.

Les fonctionnalités suivantes peuvent être obtenues en installant le plug-in Spring.

  1. Les classes Action et Validator entrent dans la gestion de Spring
  2. Vous pouvez accéder aux beans gérés par Spring à partir de ces classes.
  3. Vous pouvez également utiliser diverses fonctions fournies par le framework Spring et les fonctions qui connectent Spring à d'autres frameworks.

… Et que ** la plupart peuvent être remplacés par le framework Spring et les sous-projets Spring **.

Malheureusement, il ne fournit pas les fonctions de Spring Boot, mais il a des fonctions plus puissantes que le conteneur standard Struts2 DI, il n'y a donc aucune raison de ne pas l'utiliser. La version Spring correspondante est jusqu'à la série 4.2 dans Struts2 officiel, mais en fait, les séries 4.3 et ultérieures sont également disponibles jusqu'à présent.

Comment introduire

C'est facile à installer, il suffit d'obtenir le plug-in et d'ajouter les paramètres.

Brancher

Introduit exactement le même plugin Struts2-Spring que la version Struts2. Ce qui suit est le cas lors de la spécification avec maven. Ajouter à l'élément enfant de <dependencies>.

pom.xml


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

Réglage

Il y a deux modifications au fichier de configuration.

  1. Paramètres Struts2
  2. web.xml

Tout d'abord, ajoutez la ligne suivante à struts.properties, qui est l'un des paramètres Struts2. L'emplacement est arbitraire.

struts.properties


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

Ensuite, définissez le contexte et l'écouteur Spring dans web.xml (descripteur de déploiement). Les paramètres suivants permettent de lire le chemin de classe /spring/applicationContext.xml et le fichier xml commençant par applicationContext- comme fichier de paramètres Spring.

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>

C'est tout pour les paramètres à utiliser. Après cela, définissez applicationContext.xml pour enregistrer les beans à mettre dans la gestion Spring.

Exemple d'implémentation de classe d'action

Les classes sous gestion Spring peuvent être utilisées par @ Autowired dans la classe Action. L'exemple suivant est un exemple de recherche de liste simple.

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

La classe Service (ProductService) utilisée à partir de cette classe Action renvoie une liste fixe comme celle-ci:

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

		return resultList;
	}
}

L'exemple de produit qui apparaît ici est un simple objet de transfert de données. Puisqu'il s'agit d'un résultat de recherche, il peut être converti en objet de valeur.

Paramètres du haricot de printemps: applicationContext.xml

Malheureusement, JavaConfig ne peut pas être utilisé, définissez-le dans le fichier xml. Comme l'analyse des composants peut être utilisée, les beans peuvent être enregistrés en même temps.

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"
>	<!--Définition de la classe de service à gérer par Spring-->

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

La cible de l'analyse des composants est la classe avec l'annotation @ Service dans le package de base.

C'est tout pour les paramètres. C'est facile une fois que vous l'avez fait v (・ ω ・ |

Un exemple de projet est disponible sur github

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

prime

Vous pouvez également utiliser Thymeleaf3 de Struts2. Vous ne pouvez pas du tout utiliser les balises Struts2, mais Thymeleaf facilitera l'écriture d'une vue. Ce sera très utile lors du passage du framework Struts2 au framework Spring, etc.

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

Recommended Posts

Comment utiliser Struts2 * Spring Framework (plugin Spring) Version de juin 2017
Comment utiliser Lombok au printemps
Remarques sur l'utilisation de Spring Data JDBC
Comment utiliser ModelMapper (Spring boot)
Comment utiliser BootStrap avec Play Framework
Comment définir et utiliser un profil avec une configuration basée sur des annotations dans le framework Spring
Comment utiliser MyBatis2 (iBatis) avec Spring Boot 1.4 (Spring 4)
Comment utiliser h2db intégré avec Spring Boot
Comment utiliser le framework Java avec AWS Lambda! ??
Comment utiliser les attributs de session Spring Boot (@SessionAttributes)
Comment créer un plug-in natif Unity (version Android)
Comment utiliser le protocole NFS version 2 avec Ubuntu 18.04
Comment utiliser Map
Comment utiliser rbenv
Comment utiliser with_option
Comment utiliser fields_for
Comment utiliser java.util.logging
Comment utiliser la carte
Comment utiliser collection_select
Comment utiliser Twitter4J
Comment utiliser active_hash! !!
Comment utiliser MapStruct
Comment utiliser TreeSet
[Comment utiliser l'étiquette]
Comment utiliser l'identité
Comment utiliser le hachage
Comment utiliser Dozer.mapper
Comment utiliser Gradle
Comment utiliser org.immutables
Comment utiliser java.util.stream.Collector
Comment utiliser VisualVM
Comment utiliser Map
[Ruby] Comment utiliser rbenv (la version `x.x.x 'n'est pas installée)
Comment utiliser CommandLineRunner dans Spring Batch of Spring Boot
Comment utiliser Play Framework sans utiliser l'activateur de sécurité
Comment utiliser le référentiel de jobs en mémoire avec Spring Batch
Comment utiliser l'API Chain
Comment abaisser la version java
[Java] Comment utiliser Map
Comment utiliser Queue avec priorité
[Rails] Comment utiliser enum
Comment utiliser java Facultatif
Comment utiliser JUnit (débutant)
Comment utiliser le retour Ruby
[Rails] Comment utiliser enum
Comment utiliser @Builder (Lombok)
Comment utiliser la classe Java
Comment utiliser Big Decimal
[Java] Comment utiliser removeAll ()
Comment utiliser String [] args
Comment utiliser la jonction de rails
Comment utiliser Java Map
Ruby: Comment utiliser les cookies