Difference between struts1.2 and struts2.0?




Answers were Sorted based on User's Feedback



Difference between struts1.2 and struts2.0?..

Answer / sunil kumar suman

1. Servlet Dependency:

Actions in Struts1 have dependencies on the servlet API
since the HttpServletRequest and HttpServletResponse
objects are passed to the execute method when an Action is
invoked but in case of Struts 2, Actions are not container
dependent because they are made simple POJOs. In struts 2,
the servlet contexts are represented as simple Maps which
allows actions to be tested in isolation. Struts 2 Actions
can access the original request and response, if required.
However, other architectural elements reduce or eliminate
the need to access the HttpServetRequest or
HttpServletResponse directly.

2. Action classes

Programming the abstract classes instead of interfaces is
one of design issues of struts1 framework that has been
resolved in the struts 2 framework.
Struts1 Action classes needs to extend framework dependent
abstract base class. But in case of Struts 2 Action class
may or may not implement interfaces to enable optional and
custom services. In case of Struts 2 , Actions are not
container dependent because they are made simple POJOs.
Struts 2 provides a base ActionSupport class to implement
commonly used interfaces. Albeit, the Action interface is
not required. Any POJO object with an execute signature can
be used as an Struts 2 Action object.

3. Validation

Struts1 and Struts 2 both supports the manual validation
via a validate method.
Struts1 uses validate method on the ActionForm, or
validates through an extension to the Commons Validator.
However, Struts 2 supports manual validation via the
validate method and the XWork Validation framework. The
Xwork Validation Framework supports chaining validation
into sub-properties using the validations defined for the
properties class type and the validation context.

4. Threading Model

In Struts1, Action resources must be thread-safe or
synchronized. So Actions are singletons and thread-safe,
there should only be one instance of a class to handle all
requests for that Action. The singleton strategy places
restrictions on what can be done with Struts1 Actions and
requires extra care to develop. However in case of Struts
2, Action objects are instantiated for each request, so
there are no thread-safety issues. (In practice, servlet
containers generate many throw-away objects per request,
and one more object does not impose a performance penalty
or impact garbage collection.)

5. Testability

Testing Struts1 applications are a bit complex. A major
hurdle to test Struts1 Actions is that the execute method
because it exposes the Servlet API. A third-party
extension, Struts TestCase, offers a set of mock object for
Struts1. But the Struts 2 Actions can be tested by
instantiating the Action, setting properties and invoking
methods. Dependency Injection support also makes testing
simpler. Actions in struts2 are simple POJOs and are
framework independent, hence testability is quite easy in
struts2.

6. Harvesting Input

Struts1 uses an ActionForm object to capture input. And all
ActionForms needs to extend a framework dependent base
class. JavaBeans cannot be used as ActionForms, so the
developers have to create redundant classes to capture
input.
However Struts 2 uses Action properties (as input
properties independent of underlying framework) that
eliminates the need for a second input object, hence
reduces redundancy. Additionally in struts2, Action
properties can be accessed from the web page via the
taglibs. Struts 2 also supports the ActionForm pattern, as
well as POJO form objects and POJO Actions. Even rich
object types, including business or domain objects, can be
used as input/output objects.

7. Expression Language

Struts1 integrates with JSTL, so it uses the JSTL-EL. The
struts1 EL has basic object graph traversal, but relatively
weak collection and indexed property support. Struts 2 can
also use JSTL, however it supports a more powerful and
flexible expression language called "Object Graph Notation
Language" (OGNL).

8. Binding values into views

In the view section, Struts1 uses the standard JSP
mechanism to bind objects (processed from the model
section) into the page context to access. However Struts 2
uses a "ValueStack" technology so that the taglibs can
access values without coupling your view to the object type
it is rendering. The ValueStack strategy allows the reuse
of views across a range of types which may have the same
property name but different property types.

9. Type Conversion

Usually, Struts1 ActionForm properties are all Strings.
Struts1 uses Commons-Beanutils for type conversion. These
type converters are per-class and not configurable per
instance. However Struts 2 uses OGNL for type conversion.
The framework includes converters for basic and common
object types and primitives.

10. Control Of Action Execution

Struts1 supports separate Request Processor (lifecycles)
for each module, but all the Actions in a module must share
the same lifecycle. However Struts 2 supports creating
different lifecycles on a per Action basis via Interceptor
Stacks. Custom stacks can be created and used with
different Actions as needed.

Is This Answer Correct ?    53 Yes 4 No

Difference between struts1.2 and struts2.0?..

Answer / sunil kumar suman

Feature Struts 1 Struts 2
Action classes Struts 1 requires Action classes to extend
an abstract base class. A common problem in Struts 1 is
programming to abstract classes instead of interfaces. An
Struts 2 Action may implement an Action interface, along
with other interfaces to enable optional and custom
services. Struts 2 provides a base ActionSupport class to
implement commonly used interfaces. Albeit, the Action
interface is not required. Any POJO object with a execute
signature can be used as an Struts 2 Action object.
Threading Model Struts 1 Actions are singletons and must be
thread-safe since there will only be one instance of a
class to handle all requests for that Action. The singleton
strategy places restrictions on what can be done with
Struts 1 Actions and requires extra care to develop. Action
resources must be thread-safe or synchronized. Struts 2
Action objects are instantiated for each request, so there
are no thread-safety issues. (In practice, servlet
containers generate many throw-away objects per request,
and one more object does not impose a performance penalty
or impact garbage collection.)
Servlet Dependency Struts 1 Actions have dependencies on
the servlet API since the HttpServletRequest and
HttpServletResponse is passed to the execute method when an
Action is invoked. Struts 2 Actions are not coupled to a
container. Most often the servlet contexts are represented
as simple Maps, allowing Actions to be tested in isolation.
Struts 2 Actions can still access the original request and
response, if required. However, other architectural
elements reduce or eliminate the need to access the
HttpServetRequest or HttpServletResponse directly.
Testability A major hurdle to testing Struts 1 Actions is
that the execute method exposes the Servlet API. A third-
party extension, Struts TestCase, offers a set of mock
object for Struts 1. Struts 2 Actions can be tested by
instantiating the Action, setting properties, and invoking
methods. Dependency Injection support also makes testing
simpler.
Harvesting Input Struts 1 uses an ActionForm object to
capture input. Like Actions, all ActionForms must extend a
base class. Since other JavaBeans cannot be used as
ActionForms, developers often create redundant classes to
capture input. DynaBeans can used as an alternative to
creating conventional ActionForm classes, but, here too,
developers may be redescribing existing JavaBeans.
Struts 2 uses Action properties as input properties,
eliminating the need for a second input object. Input
properties may be rich object types which may have their
own properties. The Action properties can be accessed from
the web page via the taglibs. Struts 2 also supports the
ActionForm pattern, as well as POJO form objects and POJO
Actions. Rich object types, including business or domain
objects, can be used as input/output objects. The
ModelDriven feature simplifies taglb references to POJO
input objects.

Expression Language Struts 1 integrates with JSTL, so it
uses the JSTL EL. The EL has basic object graph traversal,
but relatively weak collection and indexed property
support. Struts 2 can use JSTL, but the framework also
supports a more powerful and flexible expression language
called "Object Graph Notation Language" (OGNL).
Binding values into views Struts 1 uses the standard JSP
mechanism for binding objects into the page context for
access. Struts 2 uses a "ValueStack" technology so that the
taglibs can access values without coupling your view to the
object type it is rendering. The ValueStack strategy allows
reuse of views across a range of types which may have the
same property name but different property types.

Type Conversion Struts 1 ActionForm properties are usually
all Strings. Struts 1 uses Commons-Beanutils for type
conversion. Converters are per-class, and not configurable
per instance. Struts 2 uses OGNL for type conversion. The
framework includes converters for basic and common object
types and primitives.
Validation Struts 1 supports manual validation via a
validate method on the ActionForm, or through an extension
to the Commons Validator. Classes can have different
validation contexts for the same class, but cannot chain to
validations on sub-objects. Struts 2 supports manual
validation via the validate method and the XWork Validation
framework. The Xwork Validation Framework supports chaining
validation into sub-properties using the validations
defined for the properties class type and the validation
context.
Control Of Action Execution Struts 1 supports separate
Request Processors (lifecycles) for each module, but all
the Actions in the module must share the same lifecycle.
Struts 2 supports creating different lifecycles on a per
Action basis via Interceptor Stacks. Custom stacks can be
created and used with different Actions, as needed.

Is This Answer Correct ?    35 Yes 7 No

Difference between struts1.2 and struts2.0?..

Answer / kondu.mani@gmail.com

the main difference is in struts 1.x we use classes and
some degineatterns but in case of struts2.x we use
interfaces .its more flexible.but complex issues also we cna
handle easly ye useing interface concept.


Feature


Struts 1


Struts 2

Action classes


Struts1 extends the abstract base class by its action class.
The problem with struts1 is that it uses the abstract
classes rather than interfaces.


While in Struts 2, an Action class implements an Action
interface, along with other interfaces use optional and
custom services. Struts 2 provides a base ActionSupport
class that implements commonly used interfaces. Although an
Action interface is not necessary, any POJO object along
with an execute signature can be used as an Struts 2 Action
object.

Threading Model


Struts 1 Actions are singletons therefore they must be
thread-safe because only one instance of a class handles all
the requests for that Action. The singleton strategy
restricts to Struts 1 Actions and requires extra care to
make the action resources thread safe or synchronized while
developing an application.


Struts 2 doesn't have thread-safety issues as Action objects
are instantiated for each request. A servlet container
generates many throw-away objects per request, and one more
object does not impose a performance penalty or impact
garbage collection.

Servlet Dependency


Actions are dependent on the servlet API because
HttpServletRequest and HttpServletResponse is passed to the
execute method when an Action is invoked therefore Struts1.


Container does not treat the Struts 2 Actions as a couple.
Servlet contexts are typically represented as simple Maps
that allow Actions to be tested in isolation. Struts 2
Actions can still access the original request and response,
if required. While other architectural elements directly
reduce or eliminate the need to access the HttpServetRequest
or HttpServletResponse.

Testability


Struts1 application has a major problem while testing the
application because the execute method exposes the Servlet
API. Struts TestCase provides a set of mock object for Struts 1.


To test the Struts 2 Actions instantiate the Action, set the
properties, and invoking methods. Dependency Injection also
makes testing easier.

Harvesting Input


Struts 1 recieves an input by creating an ActionForm object.
Like the action classes, all ActionForms class must extend a
ActionForm base class. Other JavaBeans classes cannot be
used as ActionForms, while developers create redundant
classes to receive the input. DynaBeans is the best
alternative to create the conventional ActionForm classes.


Struts 2 requires Action properties as input properties that
eliminates the need of a second input object. These Input
properties may be rich object types, since they may have
their own properties. Developer can access the Action
properties from the web page using the taglibs. Struts 2
also supports the ActionForm pattern, POJO form objects and
POJO Actions as well.

Expression Language


Struts1 integrates with JSTL, so it uses the JSTL EL. The EL
has basic object graph traversal, but relatively weak
collection and indexed property support.


Struts 2 can use JSTL, but the framework also supports a
more powerful and flexible expression language called
"Object Graph Notation Language" (OGNL).

Binding values into views


Struts 1 binds objects into the page context by using the
standard JSP mechanism.


Struts 2 uses a ValueStack technology to make the values
accessible to the taglibs without coupling the view to the
object to which it is rendering. The ValueStack strategy
enables us to reuse views across a range of types, having
same property name but different property types.

Type Conversion


Struts 1 ActionForm properties are almost in the form of
Strings. Commons-Beanutils are used by used by Struts 1 for
type conversion. Converters are per-class, which are not
configurable per instance.


Struts 2 uses OGNL for type conversion and converters to
convert Basic and common object types and primitives as well.

Validation


Struts 1 uses manual validation that is done via a validate
method on the ActionForm, or by using an extension to the
Commons Validator. Classes can have different validation
contexts for the same class, while chaining to validations
on sub-objects is not allowed.


Struts 2 allows manual validation that is done by using the
validate method and the XWork Validation framework. The
Xwork Validation Framework allows chaining of validations
into sub-properties using the validations defined for the
properties class type and the validation context.

Control Of Action Execution


Each module in Struts 1 has a separate Request Processors
(lifecycles), while all the Actions in the module must share
the same lifecycle.


In Struts 2 different lifecycles are created on a per Action
basis via Interceptor Stacks. Custom stacks are created and
used with different Actions, as required.s

Is This Answer Correct ?    18 Yes 4 No



Post New Answer



More Struts Interview Questions

Wat is Difference between Mvc1 architecture and Mvc2 Architecture?

21 Answers   IBM, HCL, Sanyaa Infotech,


How do u provide security to ur project?(Banking domain project)

0 Answers   Polaris,


while working struts in intellij 7.0error unable to initialize tld location cache: zip file is closed is displayed anybdy can answer me immdialy .ungert

0 Answers   Banking,


Is Struts Action class Thread Safe?

14 Answers   Wipro,


What are Struts2 core components?

0 Answers  






What is Request Dispatcher and What is reuest Processor??

2 Answers  


Can we handle exceptions in Struts programmatically?

0 Answers  


What are different ways to create Action classes in Struts2?

0 Answers  


Explain about the future of struts?

0 Answers  


How to explain Software Bank Loan descriptions

0 Answers   Wipro, Kekran Mekran,


what are componeents presents in Strutsconfig.xml?

2 Answers   HCL,


If we close the browser,when the specific user session is active.Again if we open browse how to retrive it same user??what code i have to da???

5 Answers   TCS,






Categories