Title: Michael Rimov Centerline Computers Craig McClanahan Sun Microsystems OReilly Open Source Convention
1Michael RimovCenterline ComputersCraig
McClanahanSun MicrosystemsOReilly Open Source
ConventionJuly 7 - 11, 2003
2Introduction
Presentation Slides, Notes and Samples Available
Athttp//www.centercomp.com/beyondstruts/
3What Defines Struts?
- Lightweight Model 2 J2EE framework for the HTTP
Servlet portion of the application. - NOT Meant to dictate the entire J2EE
implementation.
4Model 2 Typical Flow
MVC Based Model 2 Architecture Diagram
5Abbreviated Model
6What Makes Struts So Extensible?
- Lightweight and Focused Doesnt Try To Do
Everything. - Well Designed Very good separation of concerns,
very clean coding implementation. - Uses Java Reflection to allow freedom of objects.
7Case Studies
8Case Studies
- Struts and Expresso
- Struts and Macromedia Flash
- Struts and XML
- Struts and Java Server Faces
9Case Study Expresso 5http//www.jcorporate.com/
10Case Study Expresso 5
11Case Study Expresso 5
- Controller Extension
- Provided Application Level Security Matrix
- Added in-request routing ability.
- Provided mostly-Servlet Independent flow of
control.
12Case Study Expresso 5
- Struts Action
- public ActionForward perform(
- ActionMapping mapping,ActionForm form,
- HttpServletRequest request,
- HttpServletResponse response)
- Expresso Version
- protected void runPromptLoginState(ControllerReq
uest request, ControllerResponse response)
13Case Study Expresso 5
- Model Extension
- ControllerRequest / ControllerResponse objects.
- ControllerResponse is populated with
Inputs/Outputs/Blocks/Transitions. - Can use Struts Beans as well.
- Added Database Access Layer
14Case Study Expresso 5
- View Extension
- Default UI Renderer
- Customizable XSLT Processing Capabilities.
- Compatible with Struts Views.
15Case Study Expresso 5
- Integration Experiences
- Extremely supportive community
- Reaped Performance Improvements
- Partial Integrations still work well.
- Easy to extend even the Struts internals.
16Case Study Macromedia Flashhttp//www.macromedia
.com/software/flash
17Case Study Macromedia Flash
18Case Study Macromedia Flash
- Integration Methods
- XMLSocket and XML formatted pages.
- LoadVariables and property formatted pages.
- NOT covering Flash Remoting
- All Integration methods need some sort of
template view system such as JSP or Velocity.
19Case Study Macromedia Flash
- Start Page
- Tell Flash Where To Get Its Data.
- ltobject classid"clsidD27CDB6E-AE6D-11cf-96B8-444
553540000" codebase"http//download.macromedia.co
m/pub/shockwave/cabs/flash/swflash.cabversion6,0
,29,0" width"445" height"244"gt - ltparam name"movie" value mymovie.swf?datahtt
p//www.example.org/MyAction.donexthttp//www.ex
ample.org/NextAction.do"gt - ltparam name"quality" value"high"gt
- ltembed src mymovie.swf?datahttp//www.example.o
rg/MyAction.donexthttp//www.example.org/NextAct
ion.do" quality"high" pluginspage"http//www.mac
romedia.com/go/getflashplayer" type"application/x
-shockwave-flash" width"445" height"244"gtlt/embed
gt - lt/objectgt
20Case Study Macromedia Flash
- XML Socket Method
- Create Flash Starting Page
- Load initial data through the data parameter.
- On-submit, the movie opens an XML Socket to the
server and Struts. - Struts formats return data as XML.
21Case Study Macromedia Flash
- XML Socket Method Drawbacks
- XML Parsing on the Client Side.
- XML Parsing on the Server Side
- Expansion of Bandwidth
22Case Study Macromedia Flash
- Load Variables Method
- Create Flash Starting Page
- Load initial data through the data parameter.
- On-submit, the movie opens an http request to the
server. - Struts formats return data in a propertyvalue
format.
23Case Study Macromedia Flash
- Load Variables Method Drawbacks
- Simple format of return data only.
- Fancier formats require parsing again. Similar
drawbacks as XMLSocket. - Recommended you use simple beans for rendering
only - Flash 6 Only
24Quick ActionScript Sample
- on (release)
- LoadVars lv new LoadVars()
- LoadVars receiveVars new LoadVars()
- lv.loginNameLoginName
- lv.password Password
- receiveVars.onLoad processResult //Not
Shown Here - lv.sendAndLoad(data,receiveVars,"POST")
25Introducing Craig McClanahan
26Case Study Struts and XML
27Case Study Struts and XML
- Most Struts apps generate HTML
- With the Struts HTML tags (JSP)
- With alternative presentation systems like
Velocity and Freemarker - Templates accessed via RequestDispatcher.
forward() call, but there's another way ... - Action.execute() -- return null to indicate that
the response has been created already - Opens the door to XML-based output
28Struts and XML General Approach
- Form submitted to Action, as usual
- Action creates result beans, as usual, or renders
XML objects - Action renders XML directly (or forwards to an
XML-generating template) - Template incorporates dynamic data from result
beans or rendered XML objects - XSLT stylesheet(s) transform to HTML or other
markup language
29Struts and XML Resources
- JSP and JSTL can be used directly instead of HTML
tags - Two Popular Struts and XML Extensions
- StrutsCX
- Http//it.cappuccinonet.com/strutscx/
- Stxx
- http//www.openroad.ca/opencode/
- More information online, on the Struts Resources
pages - http//jakarta.apache.org/struts/resources/
30Case Study Struts and JavaServer Faces
31Case Study JavaServer Faces
- What Is JavaServer Faces?
- Server-side user interface component framework
for Java-based web apps - Under development in the Java Community Process
(JSR-127) - Currently at Public Draft 2 in the process
- Early Access 4 of Reference Implementation is
available - http//java.sun.com/j2ee/javaserverfaces/
32JavaServer Faces Goals
- Accessible to corporate developers
- Usable via tools and by hand
- Usable with and without JSP
- Usable with and without HTML
- Usable with servlet and portlet APIs
- Can be adopted immediately
- Minimum platform Servlet 2.3, JSP 1.2
- Final 1.0 version 4QCY2003
33JavaServer Faces Features
- Extensible UI component model
- Flexible rendering model
- Standard HTML renderkit included
- Event and listener model
- Validation framework
- Basic page navigation support
- Internationalization and accessibility
34JavaServer Faces Sample Page
- ltfuse_facesgt
- lthform formNamelogonFormgt
- lthpanel_grid columns2gt
- lthoutput_text valueUsername/gt
- lthinput_text idusername length16
- valueReflogonBean.username/gt
- lthoutput_text valuePassword/gt
- lthinput_secret idpassword
- length16
- valueReflogonBean.password/gt
35JavaServer Faces Sample Page
- lthcommand_button typesubmit
- labelLog On
- actionReflogonBean.logon/gt
- lthcommand_button typereset
- labelReset/gt
- lt/hpanel_gridgt
- lt/hformgt
- lt/fuse_facesgt
36JavaServer Faces Managed Bean
- ltmanaged-beangt
- ltmanaged-bean-namegt
- logonBean
- lt/managed-bean-namegt
- ltmanaged-bean-classgt
- mypackage.mybeans.LogonBean
- lt/managed-bean-classgt
- ltmanaged-bean-scopegt
- request
- lt/managed-bean-scopegt
- lt/managed-beangt
37JavaServer Faces Bean Class
- public class LogonBean // No base class!
- // The usual property getters/setters
- public String getUsername() ...
- public void setUsername(String username)
- ...
- public String getPassword() ...
- public void setPassword(String password)
- ...
38JavaServer Faces Bean Class
- ...
- // Getter returns Action for button
- public Action getLogon()
- // Anonymous inner class used here
- return new Action()
- public String invoke()
- // Invoke method on bean class
- return (logon())
-
-
-
39JavaServer Faces Bean Class
- ...
- protected String logon()
- // Business logic can access form fields
- // as instance variables
- if (username/password combo is ok)
- return (success) // Logical outcome
- else
- return (null)
-
-
40JavaServer Faces Navigation
- ltnavigation-rulegt
- // Wildcard and global patterns ok
- ltfrom-tree-idgt /logon.jsp lt/from-tree-idgt
- ltnavigation-casegt
- ltfrom-action-refgt // Optional
- logonBean.logon lt/from-action-refgt
- ltfrom-outcomegt // Optional
- success lt/from-outcomegt
- ltto-tree-idgt
- /mainmenu.jsp lt/to-tree-idgt
- lt/navigation-casegt
- lt/navigation-rulegt
41JavaServer Faces and Struts
- So, is JavaServer Faces Replacing Struts?
- NO!!!
- Struts 1.1 is and remains very popular
- Struts will continue to innovate advance
- Then, can I use them together?
- YES!!!
- With the Struts-Faces Integration Library
- http//jakarta.apache.org/builds/jakarta-struts/
- release/struts-faces/
42JavaServer Faces And Struts
- Replaces Struts HTML Tags With More Powerful
JavaServer Faces Components - Continue to use struts-config.xml file
- Integrates with Struts RequestProcessor
- Supports Standard Struts Features
- Form Beans and Actions
- Validator Framework
- Tiles Framework (coming soon ...)
43JavaServer Faces and Struts
- To use the library with an existing app
- Get the JavaServer Faces RI
- Drop it and struts-faces.jar into your
/WEB-INF/lib directory - Change HTML tags on one page at a time
- Tweak your forward paths, and
- Don't touch your form beans or actions
- MVC works ... what a concept -).
44Conclusion
45Presentation Information
- Michael Rimov rimovm_at_centercomp.com
- Craig McClanahancraigmcc_at_apache.org
- Slides, Notes and Sample Code Available
- http//www.centercomp.com/beyondstruts/
46(No Transcript)