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.


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

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.


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.


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 do you mean by actionmapping?


State the procedure for using forward attribute of link tag’s.


How interceptor works in struts 2?


What is struts validator framework?


What is the default suffix for struts2 action uri ?


How you will enable front-end validation based on the xml in validation.xml?


What is the purpose of form-beans tag in struct-config.xml?


What is the use of namespace in action mapping in Struts2?


What is the purpose of @before?


What are the struts2 error message keys that can come during file uploading process?


What is interceptor? And life cycle methods of interceptor?


What do you mean by actionservlet?


What is the default suffix for Struts2 action URI and how can we change it?


What is the purpose of @stringlengthfieldvalidator annotation?


What do you mean by struts.dev mode?