<div dir="ltr" style="text-align: justify;" trbidi="on">Hi in this tutorial we will see the migration of a web application made in struts to spring mvc. Struts to Spring migration we will do step by step. Here I will share you step by step approach to migrate application from Struts to Spring using annotations.</p>
<p><b>Struts to spring migration</b><br />
<b><br />
</b> <b>Step 1: Replace struts libraries with spring libraries.</b></p>
<p>Firstly while migrating from struts to spring we have to replace our struts related libraries with spring libraries in lib folder. I have mentioned basic libraries of both struts and spring for your clarification.</p>
<p><b>Struts basic libraries :</b><br />
1. struts.jar<br />
2. struts-legacy.jar<br />
etc.. </p>
<div align='center' id="ads-id"></div>
<p><b>Spring basic libraries :</b><br />
1. standard.jar<br />
2. org.springframework.asm-4.0.1.RELEASE-A.jar<br />
3. org.springframework.beans-4.0.1.RELEASE-A.jar<br />
4. org.springframework.context-4.0.1.RELEASE-A.jar<br />
5. org.springframework.core-4.0.1.RELEASE-A.jar<br />
6. org.springframework.expression-4.0.1.RELEASE-A.jar<br />
7. org.springframework.web.servlet-4.0.1.RELEASE-A.jar<br />
8. org.springframework.web-4.0.1.RELEASE-A.jar<br />
etc..</p>
<p><b>Step 2: Change made to web.xml file for struts to spring migration</b></p>
<p>In this step we have to remove Action filter dispatcher for the web.xml and add Spring dipatcher servlet as Front controller</p>
<p><b>In Strut application web.xml look like as follows</b></p>
<pre class="highlight" name="code"><;?xml version="1.0" encoding="UTF-8"?>;
<;web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">;
 <;display-name>;Struts2MyFirstApp<;/display-name>;
 <;filter>;
 <;filter-name>;struts2<;/filter-name>;
 <;filter-class>;
 org.apache.struts2.dispatcher.FilterDispatcher
 <;/filter-class>;
 <;/filter>;</pre>
<pre class="highlight" name="code"><;filter-mapping>;
 <;filter-name>;struts2<;/filter-name>;
 <;url-pattern>;/*<;/url-pattern>;
 <;/filter-mapping>;
 <;welcome-file-list>;
 <;welcome-file>;Login.jsp<;/welcome-file>;
 <;/welcome-file-list>;
<;/web-app>;

</pre>
<p><b>In Spring application web.xml look like as follows</b></p>
<pre class="highlight" name="code"><;?xml version="1.0" encoding="UTF-8"?>;
<;web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">;
 <;display-name>;springApp<;/display-name>;
 <;servlet>;
 <;servlet-name>;springApp<;/servlet-name>;
 <;servlet-class>;
 org.springframework.web.servlet.DispatcherServlet
 <;/servlet-class>;
 <;load-on-startup>;1<;/load-on-startup>;
 <;/servlet>;
 <;servlet-mapping>;
 <;servlet-name>;springApp<;/servlet-name>;
 <;url-pattern>;/<;/url-pattern>;
 <;/servlet-mapping>;
<;/web-app>;
</pre>
<p>
<b>Step 3: Replace config files for struts to spring migration</b><br />
Now replace all struts configuration files to spring configuration file as follows<br />
<b>In Struts applivation struts configuration file-</b></p>
<pre class="highlight" name="code"><;?xml version="1.0" encoding="UTF-8" ?>;
<;!DOCTYPE struts PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
 "http://struts.apache.org/dtds/struts-2.0.dtd">;
 
<;struts>;
 <;constant name="struts.enable.DynamicMethodInvocation" value="false" />;
 <;constant name="struts.devMode" value="false" />;
 <;constant name="struts.custom.i18n.resources" value="myapp" />;
 
 <;package name="default" extends="struts-default" namespace="/">;
 <;action name="login" class="com.dineshonjava.struts2.login.LoginAction">;
 <;result name="success">;Welcome.jsp<;/result>;
 <;result name="error">;Login.jsp<;/result>;
 <;/action>;
 <;/package>;
<;/struts>;

</pre>
<p><b>In Spring application spring configuration file as follows</b></p>
<pre class="highlight" name="code"><;?xml version="1.0" encoding="UTF-8"?>; 
<;beans xmlns="http://www.springframework.org/schema/beans" 
 xmlns:context="http://www.springframework.org/schema/context" 
 xmlns:p="http://www.springframework.org/schema/p" 
 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-4.0.xsd 
 http://www.springframework.org/schema/context 
 http://www.springframework.org/schema/context/spring-context-4.0.xsd">; 
 
 <;context:component-scan base-package="com.dineshonjava.spring.login.controller" />; 
 
 <;bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">; 
 <;property name="prefix">; 
 <;value>;/WEB-INF/views/<;/value>; 
 <;/property>; 
 <;property name="suffix">; 
 <;value>;.jsp<;/value>; 
 <;/property>; 
 <;/bean>; 
<;/beans>; 
</pre>
<p>
Here, <;context:component-scan>; tag is used, so that spring will load all the components from given package i.e. &#8220;<b><i>com.dineshonjava.spring.login.controller</i></b>&#8220;</p>
<p>We can use different view resolver, here I have used <b>InternalResourceViewResolver</b>. In which prefix and suffix are used to resolve the view by prefixing and suffixing values to the object returned by ModelAndView in action class.</p>
<p><b>Step 4: JSP changes for struts to spring migration</b><br />
While migration an application from struts to spring we need to change in jsp file as following</p>
<p><b>Firstly replace all tlds-</b></p>
<pre class="highlight" name="code"><;%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>;
<;%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>;
<;%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>;
<;%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>;
</pre>
<p>
<b>Replace these with following spring taglib&#8217;s :</b></p>
<pre class="highlight" name="code"><;%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>;
<;%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>;
</pre>
<p>
In Struts :</p>
<pre class="highlight" name="code"><;html:form action="/addLogin" method="post">;
</pre>
<p>In Spring :</p>
<pre class="highlight" name="code"><;form:form method="POST" commandName="loginForm" name="loginForm" action="login.do">;
</pre>
<p>Here commandName is going to map with corresponding formbean for that jsp. Next we will see, how action is getting called with spring 4 annotations.</p>
<p>Step 5: Action class changes for struts to spring migration<br />
Now following changes need to be done in action classes for struts to spring migration using annotations-</p>
<p>Struts Action:</p>
<pre class="highlight" name="code">package com.dineshonjava.struts2.login;

import com.opensymphony.xwork2.ActionSupport;

/**
 * @author Dinesh Rajput
 *
 */
@SuppressWarnings("serial")
public class LoginAction extends ActionSupport{
 private String username;
 private String password;
 
 public String execute() {
 
 if (this.username.equals("dinesh") 
 &;&; this.password.equals("sweety")) {
 return "success";
 } else {
 addActionError(getText("error.login"));
 return "error";
 }
 }

 public String getUsername() {
 return username;
 }

 public void setUsername(String username) {
 this.username = username;
 }

 public String getPassword() {
 return password;
 }

 public void setPassword(String password) {
 this.password = password;
 }
 
}

</pre>
<p>Spring action</p>
<pre class="highlight" name="code">package com.dineshonjava.spring.login.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * @author Dinesh.Rajput
 *
 */
@Controller
public class LoginController {
 
 @RequestMapping(value="/login.do", method = RequestMethod.GET)
 public String doLogin(ModelMap model, LoginForm loginForn) {
 if (this.username.equals("dinesh") 
 &;&; this.password.equals("sweety")) {
 model.addAttribute("message", "Login Success");
 } else {
 model.addAttribute("message", "Login Failure");
 }
 return "home";
 
 }
}

</pre>
<p>
Step 6: Validation changes for struts to spring migration <br />
in struts JSP file validation changes as follows</p>
<pre class="highlight" name="code"><;%
 ActionErrors actionErrors = (ActionErrors)request.getAttribute("org.apache.struts.action.ERROR");
%>;
</pre>
<p>In Spring JSP file as follows-</p>
<pre class="highlight" name="code"><;form:errors path="*" cssClass="error" />; 
</pre>
</div>
<div class="wp-post-navigation"> 
									 <div class="wp-post-navigation-pre"> 
									 <a href="https://dineshonjava.com/thymeleaf-vs-jsp-spring-mvc-view-layer/">Previous</a> 
									 </div> 
									 <div class="wp-post-navigation-next"> 
									 <a href="https://dineshonjava.com/testimonials-for-dineshonjavacom/">Next</a> 
									 </div> 
									</div>
<script type="text/javascript">
jQuery(document).ready(function($) {
 $.post('https://dineshonjava.com/wp-admin/admin-ajax.php', {action: 'mts_view_count', id: '165'});
});
</script>
Strategy Design Patterns We can easily create a strategy design pattern using lambda. To implement…
Decorator Pattern A decorator pattern allows a user to add new functionality to an existing…
Delegating pattern In software engineering, the delegation pattern is an object-oriented design pattern that allows…
Technology has emerged a lot in the last decade, and now we have artificial intelligence;…
Managing a database is becoming increasingly complex now due to the vast amount of data…
Overview In this article, we will explore Spring Scheduler how we could use it by…