Difference between struts1.2 and struts2.0?

Answer Posted / 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       View All Answers


Please Help Members By Posting Answers For Below Questions

What is the purpose of @key annotation annotation?

598


How can duplicate form submission be handled in struts 2?

539


What does action do in struts?

534


Explain the life cycle of a request in struct2 application?

492


Name some useful annotations introduced in Struts2?

530






Why it called struts?

559


What does validation interceptor?

546


What is http redirect?

568


What inbuilt themes are provided by struts2?

589


What is actionmapping?

598


What is the purpose of global-forwards tag in struct-config.xml?

582


What are the main classes which are used in struts application?

499


What is the naming convention for a resource bundle file in struts2?

541


Which technologies can be used at view layer in struts?

644


What is action class? What are the types of action class?

528