people.apache.org
Download
Report
Transcript people.apache.org
The Struts Framework
Community
Craig McClanahan
BOF #1820 -- The Struts Framework Community
Agenda
Welcome
Struts 1.1 – New Features
What Does The Future Hold?
Questions and Answers
Beginning
1
BOF #1820 -- The Struts Framework Community
Welcome
The "Struts Community" is growing ...
Users (STRUTS-USER mailing list has 1750
subscribers)
Downloads (1000/day first two weeks of March)
Plug-in and Add-on technologies
Publications and books
Awareness (try a Google search on "struts")
The future looks even brighter
1
BOF #1820 -- The Struts Framework Community
Struts 1.1 – New Features
Jakarta Commons Libraries
DynaActionForm
Declarative Exception Handling
Nested Tag Library
PlugIn API
Multiple Application Support
1
BOF #1820 -- The Struts Framework Community
Jakarta Commons Libraries
COMMONS-BEANUTILS
Pluggable type converters
Mapped properties
contact.phone(Work)
DynaBeans
Transparently supported by BeanUtils and
PropertyUtils
1
BOF #1820 -- The Struts Framework Community
Commons-Beanutils -- DynaBeans
public interface DynaBean {
public Object get(String name);
public Object get(String name, int index);
public Object get(String name, String key);
public void set(String name, Object value);
public void set(String name, int index,
Object value);
public void set(String name, String key,
Object value);
}
1
BOF #1820 -- The Struts Framework Community
Jakarta Commons Libraries
COMMONS-LOGGING
Wrapper around any logging API
Intelligent discovery mechanism
Did I ask for a particular factory? Use it
Is Log4J available? Use it
Is JDK1.4 logging available? Use it
Default to "no-op" logger
Simple System.err logging implementation
available
Relies on underlying logging implementation for
configuration
1
BOF #1820 -- The Struts Framework Community
Jakarta Commons Libraries
COMMONS-DBCP and COMMONS-POOL
Provide javax.sql.DataSource implementation
Connection timeouts
Both getConnection() methods supported
Idle connections can be released
For backwards compatibility,
org.apache.struts.util.GenericDataSource is a
wrapper around this
Bridges the JDBC API changes in JDK 1.4
1
BOF #1820 -- The Struts Framework Community
DynaActionForm – 1
A common user complaint: writing ActionForm
beans is a pain
Now, in many cases you will not have to!
Only necessary to provide non-default reset()
and/or validate() methods
Configure the properties and their types in your
struts-config.xml file
Transparently supported by all of the existing
Struts machinery
1
BOF #1820 -- The Struts Framework Community
DynaActionForm – 2
<form-bean
name="logonForm"
type="org.apache.struts.action.DynaActionForm">
<form-property name="username"
type="java.lang.String"/>
<form-property name="password"
type="java.lang.String"/>
</form-bean>
1
BOF #1820 -- The Struts Framework Community
Declarative Exception Handling – 1
Previously, an Action had to deal with all
business logic exceptions itself
Now, you can choose to delegate exception
handling to other application resources
Global and per-Action mapping declared in
struts-config.xml (like forwards):
From a particular Exception class or superclass
To an application-relative path
Requires a small change to your Action to
leverage this feature ...
1
BOF #1820 -- The Struts Framework Community
Declarative Exception Handling – 2
public ActionForward execute
(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
...
throw new PasswordExpiredException(...);
...
}
1
BOF #1820 -- The Struts Framework Community
Declarative Exception Handling – 3
<action path="/logon" ...>
...
<exception key="expired.password"
type="o.a.s.w.e.ExpiredPasswordException"
path="/changePassword.jsp"/>
...
</action>
1
BOF #1820 -- The Struts Framework Community
The "Nested" Tag Library – 1
If you ever programmed in Pascal, you might
remember the "with" statement ...
Nested tags allow you to establish a default
bean for nested property references
1:1 correspondence, and identical functionality,
of other Struts tags
Except the "name" property gets set for you
automatically ...
1
BOF #1820 -- The Struts Framework Community
The "Nested" Tag Library – 2
Before using the nested tags:
<bean:write property="address.city"/>
<bean:write property="address.state"/>
<bean:write property="address.zip"/>
After using the nested tags:
<nested:nest property="address">
<nested:write property="city"/>
<nested:write property="state"/>
<nested:write property="zip"/>
</nested:nest>
1
BOF #1820 -- The Struts Framework Community
Plug-In API
Before, you had to subclass ActionServlet (or
define a separate servlet) to initialize
application resources at startup time
Now, you can declare a PlugIn that receives
notification of application startup and
shutdown
public interface PlugIn {
public void destroy();
public void init(ActionServlet servlet,
ApplicationConfig config)
throws ServletException;
}
1
BOF #1820 -- The Struts Framework Community
Multiple Application Support – 1
Very popular user request for large scale
applications
Design goals:
Support multiple independent struts-config.xml
files in the same webapp
Sub-applications are identified by an
"application prefix" that follows the context path
Existing Struts-based applications should be
able to be installed individually, or as a subapplication, with no changes to the pages,
Actions, form beans, or other code
1
BOF #1820 -- The Struts Framework Community
Multiple Application Support – 2
Implications of the design goals:
1
"Default" sub-application with a zero-length
prefix (like the ROOT context in Tomcat)
"Context-relative" paths must now be treated as
"sub-application-relative"
ActionServlet initialization parameters migrate
to the struts-config.xml file
Controller must identify the relevant subapplication, and make its resources available
(as request attributes)
APIs must be reviewed for assumptions about
there being (for example) only one set of
ActionMappings
BOF #1820 -- The Struts Framework Community
Multiple Application Support – 3
The goals appear to have been achieved:
Please download the beta and help us by
testing your apps as sub-applications
Current restrictions:
All requests must flow through the
controller – no direct hyperlinks to JSP
pages with Struts tags
Can be lifted by implementing the controller
as a Filter in Servlet 2.3
Works only for extension-mapped paths to
the controller servlet (*.do)
1
BOF #1820 -- The Struts Framework Community
Current Status
Struts 1.1-beta-1 released on March 19, 2002
After the download counts referenced earlier
...
http://jakarta.apace.org/struts/
Please try it out with your own applications,
and report any compatibility (or other)
bugs:
http://nagoya.apache.org/bugzilla/
I anticipate at least one more beta, but there
might well be more
1
It will be released when we're satisfied that
BOF #1820 -- The Struts Framework Community
What Does The Future Hold?
In the mean time, the Java world around web
applications is changing ...
Servlet 2.4 (JSR-154)
JSP 1.3 (JSR-152)
JSP Standard Tag Library 1.0 (JSR-52)
JavaServer Faces (JSR-127)
And new things are becoming popular ...
Web services
Portals
1
BOF #1820 -- The Struts Framework Community
Servlet 2.4
Some nice additions
Request lifecycle events
Request dispatcher events
But not likely to affect Struts in the near term
However, is it time to migrate Struts to be
based on Servlet 2.3 (and JSP 1.2)?
Filters and lifecycle listeners
Request and response wrappers
JSP Standard Tag Library ...
1
BOF #1820 -- The Struts Framework Community
JSP 1.3
Expression Language
Available now in JSP Standard Tags Library
In JSP 1.3, can use in all tag attributes, as
well as in template text
We can help the transition by supporting
this in Struts tags
JSP Fragments
Create parameterized "custom actions"
1
BOF #1820 -- The Struts Framework Community
JSP Standard Tag Library
Currently in beta, will be final in June
RI implemented at Jakarta
http://jakarta.apache.org/taglibs/
Core library has familiar functionality
URL, XML, and I18N tags also very useful
Expression language allows for much simpler
tags
JSP containers can optimize performance
Struts users should definitely plan
on utilizing these tag libraries
1
BOF #1820 -- The Struts Framework Community
JavaServer Faces – 1
The most popular question at JavaOne this
year:
What's the deal with Struts and JavaServer
Faces?
The short version of the answer:
JavaServer Faces will be a useful
mechanism to build the UI for Struts-based
web applications
For the longer version of the answer, let's
go back into history for a moment ...
1
BOF #1820 -- The Struts Framework Community
JavaServer Faces – 2
Where did Struts come from?
Two years of discussion about MVC and
Model 1 versus Model 2
My experience building a large scale web
application that was fully internationalized
The key feature – separation of concerns
The key technologies enforcing separation
Logical name mappings in struts-config.xml
View --> Controller encapsulated in a form
submit, matched to a form bean
Controller --> View via RequestDispatcer
1
BOF #1820 -- The Struts Framework Community
JavaServer Faces – 3
Where is JavaServer Faces coming from?
The need to provide rich UI components to
page developers
The need for a standard set of components
to ease learning (and enable tools support)
But UI components are not enough by
themselves:
Event handling
Validation
Navigation
There needs to be enough there to be
usable out of the box
1
BOF #1820 -- The Struts Framework Community
JavaServer Faces – 4
So what do we do about the overlap?
Use the parts that are helpful, ignore the parts
that are not
The ideal scenario:
Struts provides a JSF-compliant tag library
that provides the functionality we know and
love
Context-relative paths, URL rewriting, ...
Struts applications can migrate their UI to
use Faces, one page at a time, with no
changes to the Actions, form beans, or
business logic
1
This is an entirely feasible endgame
BOF #1820 -- The Struts Framework Community
Questions and Answers
Phew, that's a lot of information ...
So, what's on your minds?
1
BOF #1820 -- The Struts Framework Community
BOF #1820 -- The Struts Framework Community