Struts + Spring integration example

Here’s a tutorial to show how to access beans declared in the Spring Ioc container in a web application developed with Apache Struts 1.x.

Download this Struts 1.x + Spring example – Struts-Spring-Hibernate-Example.zip

Spring comes with “Struts-specific” solution for access beans declared in the Spring Ioc container.

  1. Register a Spring’s ready-make Struts plug-in in the Struts configuration file.
  2. Change your Struts action class to extend the Spring’s ActionSupport class, a subclass of the Struts Action class.
  3. The ActionSupport provide a convenient getWebApplicationContext() method for you to access beans declared in Spring Ioc container.

1. Struts + Spring dependencies

To integrate with Struts 1.x, Spring is required the “spring-web.jar” and “spring-struts.jar” libraries. You can download it from Spring web site or Maven.
pom.xml


        <!-- Spring framework --> 
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring</artifactId>
		<version>2.5.6</version>
	</dependency>
    
        <dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-web</artifactId>
		<version>2.5.6</version>
	</dependency>
	
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-struts</artifactId>
		<version>2.0.8</version>
	</dependency>

2. Register Struts plug-in

In your Struts configuration file (struts-config.xml), register the Spring’s ready-make Struts plug-in – “ ContextLoaderPlugIn“.

struts-config.xml


<struts-config>
    <!-- Spring Struts plugin -->
 	<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
		<set-property property="contextConfigLocation"
			value="/WEB-INF/classes/SpringBeans.xml" />
  	</plug-in>
</struts-config>

The “ContextLoaderPlugIn” will handle all the integration work between Struts and Spring. You can load your Spring’s bean xml file into the “contextConfigLocation” property.

SpringBeans.xml


<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 
	<!-- Beans Declaration -->
	<import resource="com/mkyong/customer/spring/CustomerBean.xml"/>
	
</beans>

3. Spring’s ActionSupport

In Struts Action class, extends the Spring “ActionSupport” class, and get the Spring’s bean via “getWebApplicationContext()” method.

CustomerBean.xml


   	<bean id="customerBo" class="com.mkyong.customer.bo.impl.CustomerBoImpl" >
   		<property name="customerDao" ref="customerDao" />
   	</bean>

Struts Action


package com.mkyong.customer.action;
 
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.web.struts.ActionSupport;

import com.mkyong.customer.bo.CustomerBo;
import com.mkyong.customer.model.Customer;
 
public class ListCustomerAction extends ActionSupport{
 
  public ActionForward execute(ActionMapping mapping,ActionForm form,
	HttpServletRequest request,HttpServletResponse response) 
        throws Exception {
 
	CustomerBo customerBo =
		(CustomerBo) getWebApplicationContext().getBean("customerBo");
		
	...
	return mapping.findForward("success");
	  
  }
}

Done.

About the Author

author image
mkyong
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter, or befriend him on Facebook or Google Plus. If you like my tutorials, consider make a donation to these charities.

Comments

Leave a Reply

avatar
newest oldest most voted
George
Guest
George

Is possible to use @Autowired instead of getWebApplicationContext().getBean(“myBean”)?

prat8759
Guest
prat8759
Hi I am getting this exception when I try to integrate struts 1.3.10 with Spring 3.24 javax.servlet.UnavailableException: org/springframework/web/context/WebApplicationContext at org.apache.struts.action.ActionServlet.init(ActionServlet.java:402) at javax.servlet.GenericServlet.init(GenericServlet.java:160) at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088) at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5176) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5460) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) I have heard ContextLoaderPlugIn has been deprecated since spring 3.0 Please advice me what to do…….
prat8759
Guest
prat8759

I solved it by adding certain params as instructed here
http://stackoverflow.com/questions/5835910/how-to-integrate-an-old-struts-application-with-spring-3-x

(refer 1st answer of the three)

Manish
Guest
Manish

Hi
I was using spring frame wok , i have completed almost 50% work , but i want to use struts 2 .is it possible to convert in struts . i mean spring to struts ???
Please reply me ..
Thanks a lot

Raju
Guest
Raju

Hi , you have any queries regarding STRUCT , SPRINGS please visit http://www.kbreducation.com

Raju
Guest
Raju

Can you please send me the direcotry strutcure(not in eclipse) for struts1.x and hibernate and spring integeration to my mail id..
plzzzzzzzz it is very urgent

satwik
Guest
satwik

gooooooooooooood..

manisg
Guest
manisg
 Java source code here 
 XML here 
Quazi Mohammad Farhan Ali
Guest
Quazi Mohammad Farhan Ali

Hi, in your struts Spring integration example, Struts Action is tightly coupled with spring ActionSupport class. I think it is better if you had used DelegateActionProxy class instead or you could have used Spring ContextLoaderServlet and contextConfigLocation in web.xml file.

Adnen
Guest
Adnen
Hi when i try deployin application, i have this error : Parsing error processing resource path /WEB-INF/struts-config.xml java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) at java.net.Socket.connect(Socket.java:529) at java.net.Socket.connect(Socket.java:478) at sun.net.NetworkClient.doConnect(NetworkClient.java:163) at sun.net.www.http.HttpClient.openServer(HttpClient.java:394) at sun.net.www.http.HttpClient.openServer(HttpClient.java:529) at sun.net.www.http.HttpClient.(HttpClient.java:233) at sun.net.www.http.HttpClient.New(HttpClient.java:306) at sun.net.www.http.HttpClient.New(HttpClient.java:323) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:860) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:801) at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:726) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1049) at org.apache.commons.digester.Digester.createInputSourceFromURL(Digester.java:1938) at org.apache.commons.digester.Digester.resolveEntity(Digester.java:1615) at com.sun.org.apache.xerces.internal.util.EntityResolverWrapper.resolveEntity(EntityResolverWrapper.java:107) at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.resolveEntityAsPerStax(XMLEntityManager.java:1018) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1192) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1090) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1003) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) at org.apache.commons.digester.Digester.parse(Digester.java:1745) at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:738) at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:687) at org.apache.struts.action.ActionServlet.init(ActionServlet.java:333) at javax.servlet.GenericServlet.init(GenericServlet.java:212) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1139) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:966)… Read more »
Raju
Guest
Raju

You have any doubt’s please visit http://www.kbreducation.com

sumit
Guest
sumit

Hi Mkyong,

I had requirement that i need to integrate struts tiles with spring Mvc. we are using tiles module from stuts. so please post a example of this kind.

Thanks
Sumit

trackback
Strut Spring Integration

[…] Spring Integration Dear mkyong, I have followed Step by step by this link Struts + Spring integration example. But i got some errors when starting server tomcat 7. Although i have added all jars. Apr 21, 2012 […]

Nguyen Trung Hieu
Guest
Nguyen Trung Hieu

Urgent, Plz help me!!!

Unable to initialize Struts ActionServlet due to an unexpected exception or error thrown, so marking the servlet as unavailable. Most likely, this is due to an incorrect or missing library dependency.
java.lang.NoClassDefFoundError: org/apache/commons/chain/config/ConfigParser
at org.apache.struts.action.ActionServlet.initChain(ActionServlet.java:1680)
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:350)
at javax.servlet.GenericServlet.init(GenericServlet.java:160)
at org.apache.catalina.core.Stan

: java.lang.ClassNotFoundException: org.apache.commons.chain.config.ConfigParser
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
… 14 more

Servlet /02StrutsSpringIntegration threw load() exception
javax.servlet.UnavailableException: org/apache/commons/chain/config/ConfigParser
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:402)
at javax.servlet.GenericServlet.init(GenericServlet.java:160)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1190)
at org.apache.ca

http://www.mkyong.com/struts/struts-error-nosuchmethoderror-digester-parseljavaneturlljavalangobject/

Although, i tried to add all jar files. But still error.

rajesh b
Guest
rajesh b

My application in such way that integration of struts2-spring-Hibernate
so, send me all the Jar files needed to this application,plz
my mail ID is : (deleted to avoid spam)

trackback
Struts + Spring + Quartz scheduler integration example

[…] more details explanation, you can reference to the following tutorialsStruts + Spring integration exampleSpring + Quartz scheduler integration example […]

audrey
Guest
audrey

Very useful tutorial.
Thank you.

trackback
Struts 2 + Spring + Quartz scheduler integration example

[…] Struts + Spring integration example […]

trackback
Struts 2 + Spring integration example

[…] Struts + Spring integration example […]

trackback
Spring Tutorials | J2EE Web Development Tutorials

[…] Struts + Spring integration Example to integrate Spring with Struts 1.x MVC framework. […]

trackback
Struts Tutorials | Tutorials

[…] Struts + Spring integration Example to integrate the Struts with Spring framework. […]