0% found this document useful (0 votes)
153 views33 pages

Struts 2006 3

Struts 2006 was an embarrassment of riches, with many Struts frameworks emerging, including Struts Action 1.3, Struts Shale, Struts OverDrive, and Struts Ti. Struts Action 1.3 introduced a composable request processor, arbitrary configuration properties, and other improvements. Struts Shale is a new MVC2 framework based on JSF that provides a front controller layer like Struts Action. WebWork is also merging with Struts, bringing innovations like scripted actions, continuations-based flows, and direct AJAX support using Dojo. The merger establishes a dual processor approach and shared resources to ease migration between the frameworks.

Uploaded by

api-3696230
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
153 views33 pages

Struts 2006 3

Struts 2006 was an embarrassment of riches, with many Struts frameworks emerging, including Struts Action 1.3, Struts Shale, Struts OverDrive, and Struts Ti. Struts Action 1.3 introduced a composable request processor, arbitrary configuration properties, and other improvements. Struts Shale is a new MVC2 framework based on JSF that provides a front controller layer like Struts Action. WebWork is also merging with Struts, bringing innovations like scripted actions, continuations-based flows, and direct AJAX support using Dojo. The merger establishes a dual processor approach and shared resources to ease migration between the frameworks.

Uploaded by

api-3696230
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 33

Struts 2006

An Embarrassment of Riches

Struts University Series


Abstract
Apache Struts is a hotbed of activity.
Struts Action 1.3, Struts Shale,
Struts OverDrive, Struts Ti.
Why so many frameworks? How are they
different? Why are they all called Struts? Which
is the best choice for my next project?
In this session, we step back and look at Struts
through a wide-angle lens.
The Story So Far
Struts 0.5 – May 2000 - Prototype release
Struts 1.0 – Jun 2001 - Initial release
Struts 1.1 – Jun 2003 - Commons release
Struts 1.2 – Dec 2004 - Wildcard release
Struts 1.3 – xxx 2006 - Subproject release
The Upcoming 1.3 Release
Divided project into subprojects
 Action, Apps, EL, Extras, Site, Taglibs, Tiles
 Faces
 Scripting (new)
 Flow (new)
 Shale (new)
Subprojects are the "unit of release"
Seven subprojects from 1.2 are bundled as
"Struts Action Library"
Complete Maven build
Struts Action 1.3
Composable Request Processor
Arbitrary configuration properties
Command and Catalog elements
"Extends" attribute
"isCommitted" Exception Handling
Postback Actions
Wildcard ActionConfig properties
Request Processor for 1.2
public void process(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {

processLocale(request, response);
if (!processRoles(request, response, mapping)) {
return;
}
/// ...
ActionForward forward =
processActionPerform(request, response,
action, form, mapping);
processForwardConfig(request, response, forward);
}
Composable Request Processor for 1.3

<chain name="process-action">
<command className= "...SelectLocale"/>
<command className= "...AuthorizeAction"/>
<!-- ... -->
<command className= "...CreateAction"/>
<command className= "...ExecuteAction"/>
</chain>
Arbitrary Configuration Attributes
<action path="/EditSubscription"
extends="Editor">
<set-property key="foo" value="bar"
/>
</action>

public ActionForward execute(


ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
string foo = getProperty("foo");
// ...
Catalog and Command elements
catalog - Name of commons-chain catalog for command.
command - Name of commons-chain command which
should be looked up and executed as part of servicing this
request.
Available for both the Controller and any Action Mapping

<controller
inputForward="true"
catalog="Foo"
command="FooBar"
/>
"extends" attribute
<struts-config>

<form-beans>
<form-bean name="registrationForm"
type="org.apache.struts.action.DynaValidatorForm">
<form-property name="firstName" type="java.lang.String" />
<form-property name="lastName" type="java.lang.String" />
</form-bean>

<form-bean name="managerRegistrationForm"
type="org.apache.struts.action.DynaValidatorForm"
extends="registrationForm">
<form-property name="department" type="java.lang.String"
/>
</form-bean>
</form-beans>
...
</struts-config>
"isCommitted" Exception Handling
<exception
key="GlobalExceptionHandler.default"
type="java.lang.Exception"
path="/ErrorPage.jsp">
<set-property key="INCLUDE_PATH"
value="/error.jsp" />
</exception>

<exception
key="GlobalExceptionHandler.default"
type="java.lang.Exception"
path="/ErrorPage.jsp">
<set-property key="SILENT_IF_COMMITTED"
value="true" />
</exception>
PostBack Actions
The action attribute of the Form taglib is now optional.
If omitted, the original URI of the original request is used.

<html:form
onsubmit="return validateLogonForm(this);">
Wildcard ActionConfig properties
Wildcards (introduced in 1.2) can now be used in the
properties of an ActionConfig.
This makes it easier to pass multiple request-time values to
the Action without complicating the "parameter" attribute.

<action path="/Save*"
name="Save{1}"
extends="BaseSave">
<set-properties key="Save" value="{1}"/>
</action>
New Project Organization
Struts Action Library
 Action - Controller and Validator
 Apps - Example applications

 EL - The JSTL EL extended JSP taglibs

 Extras - Optional Actions and Plugins

 Site - The top-level Struts website

 Taglibs - The original Struts JSP taglibs

 Tiles - The Tiles templating framework


New Project Organization
Building on Struts Action
 Scripting - Scripted Actions using BSF
 Flow - Continuation-based process flow

 Faces - Utilize Struts Actions via JSF

New Horizons
 Shale – MVC2 framework based on JSF
 OverDrive – C# framework for ASP.NET

 Action 2.x – Struts only better


Struts Scripting
Implement Actions with JavaScript,
BeanShell, Groovy, Jython, etc.

<action path="/logoff"
type="org.apache.struts.bsf.ScriptAction"
parameter="/WEB-INF/scripts/Logoff.bsh">

<forward name="success" path="/index.jsp"/>


</action>
Struts Flow
Introduces server-side, Continuations-based
JavaScript flows
function login() {
while (struts.sessionScope["curUser"] == null) {

forwardAndWait("loginForm", {"error" : error});


user = struts.param["user"];
passwd = struts.param["passwd"];
if (userManager.login(user, passwd)) {
struts.sessionScope["curUser"] = user;
} else error = "Invalid login, please try again";

}
}
Struts Shale
Web framework based on JSF
 Created by Craig McClanahan
Provides a "Front Controller" layer
 Like Struts Action
Shale and Action are both first-class
citizen of Apache Struts
 One project, two frameworks
Struts OverDrive
Unofficial whiteboard proposal
 Being developed with C# for ASP.NET

Business logic framework


 Based on Commons Chain of Responsibility

Reduces complex business logic


 Single command or chain of commands

Handles data conversion, formatting,


validation, localization
Exposed through a Helper object
Future of Action 1.x
Apache Struts is a set of products, each
with its own label and lifecycle
Struts Action 1.x line has been
evolutionary not revolutionary
 Deprecate, Release, Remove

Same codebase, same major release


Struts 2006
WebWork Merger

Struts University Series


Abstract

Apache Struts,
the leading web application framework for Java,
and Open Symphony WebWork,
a leader in technical innovation,
are working to merge their
communities and codebases.
The Story So Far
WebWork 1.0 – Mar 2002 – Initial release
WebWork 1.2 – Aug 2002 – OS release
WebWork 1.4 – Nov 2003
WebWork 2.0 – Feb 2004 – XWork release
WebWork 2.1 – Sep 2005
WebWork 2.2 – Dec 2005 (Beta 4)
WebWork joining Struts
October 2005
 Java Web Alignment Group

November 2005
 Mailing list announcements

December 2005
 ApacheCon announcement
Migration
Well-paved migration paths
 Tools
 Examples

 Dual Processors, Shared Resources


Migration
Tools for source migration
 Work in progress
Examples for developer migration
 MailReader
 IBATIS JPetstore

 and others
Migration
Dual processors / Shared resources
 *.do – Struts Action 1.x
 *.action – Struts Action 2.x

What breaks? -- nothing!


Brave New World
Familiar action-centric paradigm
Interface based
POJO forms and actions
HTTP independence
Explicit AJAX support using Dojo
Direct support for Action Chaining
Continuations
Extensible response types
Action 2.x RoadMap
Phase 1
 WebWork 2.2 codebase,
 Struts Action 1.x migration tools,

 Commons Chain integration.

Phase 2
 Zero XML configuration
 Annotated stateful POJO controllers

 Dialog / workflow support


Struts Ti – Phase 2
Exploring how to simplify development of
MVC web applications
Prefers convention over configuration
Including features like annotations and
automatic compilation
Builds on WebWork, Beehive, and Spring
Still in the design phase although working
code and examples are available
Struts Action Glossary
Actions – Actions
ActionForms – Action properties
 Or POJOs
Commons Chain -- XWork Interceptors
Request Processor – Interceptor Stack
 Per Action
Final Thoughts
Apache Struts is both evolving and
plunging ahead
Struts Action 1.x will being actively
developed and supported for a long time
Offering both Shale and Action future-
proofs Apache Struts
Bottom line: use what works for you.
Struts University Series

You might also like