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.

Step 1: Replace struts libraries with spring libraries.

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.

Struts basic libraries :

  1. struts.jar
  2. struts-legacy.jar
  3. etc.. 
Have you ever use :  Javadoc comment in Java

Spring basic libraries :


  1. standard.jar
  2. org.springframework.asm-4.0.1.RELEASE-A.jar
  3. org.springframework.beans-4.0.1.RELEASE-A.jar
  4. org.springframework.context-4.0.1.RELEASE-A.jar
  5. org.springframework.core-4.0.1.RELEASE-A.jar
  6. org.springframework.expression-4.0.1.RELEASE-A.jar
  7. org.springframework.web.servlet-4.0.1.RELEASE-A.jar
  8. org.springframework.web-4.0.1.RELEASE-A.jar
  9. etc..

Step 2: Change made to web.xml file for struts to spring migration

In this step we have to remove Action filter dispatcher for the web.xml and add Spring dipatcher servlet as Front controller
Work on new technology  : Create and manage cloud applications using Java

In Strut application web.xml look like as follows

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

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

In Spring application web.xml look like as follows

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

Step 3: Replace config files for struts to spring migration

Now replace all struts configuration files to spring configuration file as follows

In Struts applivation struts configuration file-

<?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.geekonjavaonjava.struts2.login.LoginAction">  
            <result name="success">Welcome.jsp</result>  
            <result name="error">Login.jsp</result>  
        </action>  
    </package>  
</struts>  

In Spring application spring configuration file as follows

<?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.geekonjavaonjava.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>  <span style="font-family: Times New Roman;"><span style="white-space: normal;">  
</span></span>  
Here, <context:component-scan> tag is used, so that spring will load all the components from given package i.e. "com.geekonjavaonjava.spring.login.controller".

Use this in Struts2 : Get value of struts property tag into jsp variable

We can use different view resolver, here I have used InternalResourceViewResolver. 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.

Step 4: JSP changes for struts to spring migration

While migration an application from struts to spring we need to change in jsp file as following

Firstly replace all tlds-

<%@ 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" %>

Replace these with following spring taglib's :

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>  
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>  

In Struts :

<html:form action="/addLogin" method="post">  

In Spring :

<form:form method="POST" commandName="loginForm" name="loginForm" action="login.do"> 
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.

Step 5: Action class changes for struts to spring migration

Now following changes need to be done in action classes for struts to spring migration using annotations-

Struts Action:

package com.geekonjavaonjava.struts2.login;  
  
import com.opensymphony.xwork2.ActionSupport;  
  
/** 
 * @author geekonjava 
 * 
 */  
@SuppressWarnings("serial")  
public class LoginAction  extends ActionSupport{  
 private String username;  
    private String password;  
      
 public String execute() {  
     
        if (this.username.equals("geekonjava")   
                && 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;  
 }  
   
}  

Spring action

package com.geekonjavaonjava.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 GeekOnJava 
 * 
 */  
@Controller  
public class LoginController {  
   
 @RequestMapping(value="/login.do", method = RequestMethod.GET)  
 public String doLogin(ModelMap model, LoginForm loginForn) {  
 if (this.username.equals("geekonjava")   
                && this.password.equals("sweety")) {  
            model.addAttribute("message", "Login Success");  
        } else {  
            model.addAttribute("message", "Login Failure");  
        }  
         return "home";  
   
 }  
}  

Step 6: Validation changes for struts to spring migration 

In struts JSP file validation changes as follows

<%  
 ActionErrors actionErrors = (ActionErrors)request.getAttribute("org.apache.struts.action.ERROR");  
%>

In Spring JSP file as follows-

<form:errors path="*" cssClass="error" /> 
0

Add a comment

Easy Steps to Add 301 Redirects to WordPress
Easy Steps to Add 301 Redirects to WordPress
Is Purefit Keto Beneficial For Weight Loss?
Is Purefit Keto Beneficial For Weight Loss?
The Best SEO Practices for Blogging » Tell Me How - A Place for Technology Geekier
The Best SEO Practices for Blogging » Tell Me How - A Place for Technology Geekier
json2view : Some important properties and types » Tell Me How - A Place for Technology Geekier
json2view : Some important properties and types » Tell Me How - A Place for Technology Geekier
Yes You Can! How Millennials Can Actually Afford a House » Tell Me How - A Place for Technology Geekier
Yes You Can! How Millennials Can Actually Afford a House » Tell Me How - A Place for Technology Geekier
THE BEST GADGETS FOR STUDYING OF 2020 &raquo; Tell Me How - A Place for Technology Geekier
THE BEST GADGETS FOR STUDYING OF 2020 &raquo; Tell Me How - A Place for Technology Geekier
JDK Alternatives for Production
Transition Page Recycler using Animated Recycler View
Transition Page Recycler using Animated Recycler View
Best programming for Android after analyse APK
Best programming for Android after analyse APK
Top 6 Java Defects can resolve by Kotlin
Top 6 Java Defects can resolve by Kotlin
Magic Multiply by 9 Trick without Pen and Paper
Magic Multiply by 9 Trick without Pen and Paper
[CRUD Example] : Spring Boot with Kotlin and AngularJS
[CRUD Example] : Spring Boot with Kotlin and AngularJS
What is MVC, MVP and MVVM in details?
What is MVC, MVP and MVVM in details?
How to Add Popup Menu in Android?
How to Add Popup Menu in Android?
Top 5 Android and Kotlin Database Libraries
Top 5 Android and Kotlin Database Libraries
BlockChain Technology - Advantage and Disadvantage
BlockChain Technology - Advantage and Disadvantage
Android Technology Trends in 2018
Android Technology Trends in 2018
Comparison between all Android Wear Library
Comparison between all Android Wear Library
Multicolor TextView for Android
Multicolor TextView for Android
Nothing Type in Kotlin
Nothing Type in Kotlin
Advanced Kotlin Tips
Advanced Kotlin Tips
Awesome Kotlin Parcelize Feature - Need to Know
Awesome Kotlin Parcelize Feature - Need to Know
Create Food Order Tracking app using Android Timeline View Library
Create Food Order Tracking app using Android Timeline View Library
Let's build a Firefox extension with Kotlin
Justice League Reviews Round-up
Justice League Reviews Round-up
Google Pixel 2 XL vs iPhone X: Find out Best phone
Google Pixel 2 XL vs iPhone X: Find out Best phone
Password Recovery Reviews
Password Recovery Reviews
Which Android Dependency Injection is best?
Which Android Dependency Injection is best?
What is MVC, MVP and MVVM in details
What is MVC, MVP and MVVM in details
Google Play Protect – A New Way To Protect Your Phone
Google Play Protect – A New Way To Protect Your Phone
Some Kotlin Problem with solutions Every developer need to know
Some Kotlin Problem with solutions Every developer need to know
Best Android Animation Library in 2017
How to Implement Vega Scroll Layout Android Slider?
How to Implement Vega Scroll Layout Android Slider?
How to Add Android Rich Path Animator?
How to Add Android Rich Path Animator?
Topbar Menu with Guillotine Android animation
Topbar Menu with Guillotine Android animation
Implement Android Prevent Screen Off library?
Implement Android Prevent Screen Off library?
Android P support Java 9 with Kotlin updates?
Android P support Java 9 with Kotlin updates?
Tutorial : Create Augmented Reality in Kotlin
Anyone to Create Custom Ransomware Virus
Anyone to Create Custom Ransomware Virus
Android Oreo vs. iOS 11: The Next-Gen OS Battle
Android Oreo vs. iOS 11: The Next-Gen OS Battle
Android 7 Vs Android 8
Android 7 Vs Android 8
Google launched Android Oreo See the features
Google launched Android Oreo See the features
How to Android Image Compression Using ImageZipper Library?
How to Android Image Compression Using ImageZipper Library?
How to use FileStack File Picker for Cloud in Android
How to use FileStack File Picker for Cloud in Android
Create UberCar Animation with Android Library
Create UberCar Animation with Android Library
How to Add FloatingView Animation in Android?
How to Add FloatingView Animation in Android?
Add Material Shadow in Android
Add Material Shadow in Android
Daily used Kotlin Code Snippet
Daily used Kotlin Code Snippet
Kotlin without JVM Using Kotlin Native
Kotlin without JVM Using Kotlin Native
How to add GraphView in Android using Graph Library?
How to add GraphView in Android using Graph Library?
ConstraintLayout in Android
ConstraintLayout in Android
How to implement GIFView in Android
How to implement GIFView in Android
Android Instant Run - How it works?
Android Instant Run - How it works?
Use Springy Facebook Rebound?
Use Springy Facebook Rebound?
Add Pull To Make Soup animation in Android
Add Pull To Make Soup animation in Android
Use PreviewSeekBar for Android Video App
Use PreviewSeekBar for Android Video App
KOIN – Functional Kotlin dependency injection framework
KOIN – Functional Kotlin dependency injection framework
Lottie - How to Convert Adobe After Effects to Kotlin
Lottie - How to Convert Adobe After Effects to Kotlin
Boost Android Development using Top 30 Android Tools
Boost Android Development using Top 30 Android Tools
Add Android Increment ProductView in your project?
Add Android Increment ProductView in your project?
Latest features in Android Studio 3.0 Canary 6
Latest features in Android Studio 3.0 Canary 6
How to use Android Audio Widget Overlay View
How to use Android Audio Widget Overlay View
Crumbling Image SlideView in Android
Crumbling Image SlideView in Android
Tinder like SwipeView in Android
Tinder like SwipeView in Android
Android Test with Kotlin
Android Test with Kotlin
How to use Android FabulousFilter with Floating Action Button
How to use Android FabulousFilter with Floating Action Button
How LastAdapter can remove RecyclerView and ViewHolder?
How LastAdapter can remove RecyclerView and ViewHolder?
Kotlin's 5 best things you probably don’t know
Kotlin's 5 best things you probably don’t know
Google Play like UI with RecyclerView Snapping Example
Google Play like UI with RecyclerView Snapping Example
Kotlin 1.1.2 version launched with 15 features
Kotlin 1.1.2 version launched with 15 features
Kotlin disadvantage - 7 reason why i don't like it
Kotlin disadvantage - 7 reason why i don't like it
Facebook New Stories button for Android using PopupBubble Library
Facebook New Stories button for Android using PopupBubble Library
How to add Infinite Cycle ViewPager in Android Application
How to add Infinite Cycle ViewPager in Android Application
Android Side Menu Animation Library
Android Side Menu Animation Library
Contributors
Contributors
Popular Posts
Popular Posts
Archive
Labels
Labels
Loading
Dynamic Views theme. Powered by Blogger. Report Abuse.