Pages

Wednesday, May 8, 2013


Let us see the component and functional differences between struts 1.x and struts 2.x
  •  In struts 1.x front controller is ActionServlet
    • In 2.x front controller is FilterDispatcher
  • In struts 1.x we have RequestProcessor class
    • In 2.x we have Interceptors instead RequestProcessor will see about this concept later just remember as of now
  • In struts 1.x we have multiple tag libraries like, html, logic, bean..etc
    • In 2.x we do not have multiple libraries, instead we have single library which includes all tags
  • In struts 1.x the configuration fine name can be [any name].xml and we used to place in web-inf folder
    • In 2.x the configuration file must be struts.xml only and this must be in classes folder
  • In struts 1.x we have form beans and Action classes separately
    • In 2.x form bean, Action classes are combinedly given as Action class only, of course we can take separately if we want
  • In struts 1.x properties file must be configured in struts-config.xml
    • But in 2.x we need to configure our resource bundle(s) in struts.properties file
  • In struts 1.x we have programmatic and declarative validations only
    • In 2.x we have annotations support too along with programmatic and declarative validations
Functional Differences
  • In struts 1.x declarative validations are done by using validation frame work
    • In 2.x, declarative validations are done by using xwork2 frame work by webwork the reason being, its support valuations through Annotations
  • In struts 1.x an Action class is a single ton class, so Action class object is not a thread safe, as a programmer we need to make it as thread safe by applying synchronization
    • In 2.x an Action class object will be created for each request, so it is by default thread safe, so we no need to take care about safety issues here
  • In struts 1.x we have only jsp as a view technology
    • In 2.x we have support of multiple view technologies like velocity, Freemarker, jasper reports, jsp bla bla
  • In struts 1.x Action class is having servlet dependency, because in execute() method accepts req, res parameter right ! so.
    • In 2.x Action class doesn’t have any servlet dependency, because its execute() method doesn’t accepts any parameters, however we can access all servlet objects with dependency injection

Struts Execution Flow Diagram, How Struts Works




Execution flow of struts

  • When a client request is given, a web container will receive request
  • Web container loads web.xml and verifies whether the url-patterns are verified or not, if matches web-container transfer the request to FilterDispatcher
  • FilterDispatcher hand overs the request to ActionProxy, it is a proxy class which is responsible to apply before and after services to original business logic
  • ActionProxy contacts ConfiguraionManager class, to know the suitable Action for the request and the needed services for the request
  • ConfigurationManager class loads structs.xml and provides the required information back to ActionProxy
  • ActionPorxy delegates the request along with its information to ActionInvocation
  • ActionInvocation executes the interceptors added to an Action from 1 – N, after that it will calls the business logic implemented from N – 1 in reverse order
  • ActionInvocation receives finally result produced by an action aclass
  • ActionProxy transfers the result back to FilterDispatcher
  • FilterDispatcher selects an appropriate view, basing on the result
  • Finally FilterDispatcher uses RequestDispatchers forwarding mechanism and forward a view as a response back to the client



No comments:

Post a Comment