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



  1.  

    0

    Add a comment

  2. Easy Steps to Add 301 Redirects to WordPress » Tell Me How - A Place for Technology Geekier: Before we try to learn how to add 301 redirects to WordPress, we need to understand what they really are. If you run your own website, it is a must to understand the ‘when’ and ‘how’ of using these. If you are ignorant on the topic, you could be losing a lot of organic traffic …
    0

    Add a comment

  3. Is Purefit Keto Beneficial For Weight Loss? » Tell Me How - A Place for Technology Geekier: The ketogenic diet is probably something that everyone interested in physical fitness might have heard about. In this diet plan, you eat lots of fat so that your body to burn even more fat. Purefit is a supplement that helps your body to do that. When our body is in a state of normal metabolism …
    0

    Add a comment

  4. The Best SEO Practices for Blogging » Tell Me How - A Place for Technology Geekier: How can SEO help your blog and vice versa? Today, we will give you some information about the best SEO Practices for Blogging.
    0

    Add a comment

  5. json2view : Some important properties and types » Tell Me How - A Place for Technology Geekier: Here we see some important properties and types of json2view library which you can use in your applications. Just dive and enjoy the tutorials and code.
    0

    Add a comment

  6. Yes You Can! How Millennials Can Actually Afford a House » Tell Me How - A Place for Technology Geekier: The consensus across the world is that Millennials can’t afford to buy houses. Sadly, this means that a lot of them have stopped trying. To be clear, Millennials can afford to buy a house in a lot of cases. They are, however, facing more barriers and challenges in homeownership than any generation has ever faced.  …
    0

    Add a comment

  7. THE BEST GADGETS FOR STUDYING OF 2020 
    0

    Add a comment

  8. However, along with this news, how are JDK builds available? Will they be free or paid? Before answering this, it's important to understand what a "valid" JDK for distribution actually means. In practical terms, there is only one set of source code for the JDK. 

    JDK Alternatives for Production
    JDK Alternatives for Production



    The source code is hosted here. Anyone can pick up this source code, produce a build, and post it to a URL. However, there is a separate certification process that must be used to ensure that construction is valid. Certification is performed by the Java Community Process (JCP), which provides a Technology Compatibility Kit (TCK). 
    If an organization produces an OpenJDK build that complies with the entirely TCK, this build may be described as "compatible with Java SE".
    Note that the build cannot be called "Java SE" without the vendor obtaining a commercial license from Oracle. For example, AdoptOpenJDK builds that pass the TCK are not "Java SE," but "Java SE compliant" or "Java SE compliant." Also, note that certification is currently on a trust basis — results are not sent to JCP/Oracle for verification and cannot be made public. In short, the OpenJDK + Vendor process transforms a source base into several different builds.

    Figure 1: OpenJDK source code transformed into builds (per Vendor)


    Without further ado, check out the following JDKs that are ready to download: Alternatives of Premium JDK





    0

    Add a comment

  9. Animated Recycler View is a library that allows you to animate a recycler view in your project like Google does it in its Google Play Store. Only the first visible items are animated there and you will see no animation when the recycler view scrolls up.
    Animated Recycler View - Transition Page Recycler with layout animations
    Animated Recycler View – Transition Page Recycler with layout animations

    Reasons to use it

    This library solves several problems:
    1. It works stably fast and without jerks.
    2. It doesn’t need to utilize the adapter to animate items when they appear for the first time.

    Why Animated Recycler View is special for you?

    While working on a project, most of time we need animation similar to the one used in the Google Play Store but didn’t find any appropriate library on Internet/ Github/ StackOverflow that could help us with this task. 
    Source: How to Transition Page Recycler using Animated Recycler View? 
    0

    Add a comment



  10. There are so many ways to make mobile apps ranging from direct platform specific development (using Java and Kotlin for Android, and ObjC and Swift for iOS), there’s React Native from Facebook, Electrode Native from Walmart, the Ionic framework, Unity for certain types of apps, and the flutter.io framework which was just released by Google.



    Ever wondered how these libraries and frameworks affect the size of your app? Let’s analyze some apk files for apps written in some of these ways. The apps are very basic, containing just a title at the top and a text at the center of the screen.

    This will show, for a bare minimum app what these frameworks need to package along with the apk for it to be able to run.

    • For this test I created four different versions of the app, one in each of JavaKotlinReact Nativeand Flutter. (Android API 27)
    • The apks were then published for release type using Android Studio for Java and Kotlin and using the cli for React Native and Flutter.
    • Default proguard configuration was used.
    • The apks were analyzed using the Analyze APK feature in Android Studio.
    Source: Which Language is Good for Android by Analyze APK sizes?
    0

    Add a comment

Contributors
Contributors
Popular Posts
Popular Posts
Archive
Labels
Labels
Loading
Dynamic Views theme. Powered by Blogger. Report Abuse.