Michael Rimov Centerline Computers Craig McClanahan Sun Microsystems O’Reilly Open Source Convention July 7 - 11, 2003

Download Report

Transcript Michael Rimov Centerline Computers Craig McClanahan Sun Microsystems O’Reilly Open Source Convention July 7 - 11, 2003

Michael Rimov
Centerline Computers
Craig McClanahan
Sun Microsystems
O’Reilly Open Source Convention
July 7 - 11, 2003
Introduction
Presentation Slides, Notes and Samples
Available At:
http://www.centercomp.com/beyondstruts/
Michael Rimov & Craig McClanahan
What Defines Struts?
• Lightweight Model 2 J2EE framework
for the HTTP Servlet portion of the
application.
• NOT Meant to dictate the entire J2EE
implementation.
Michael Rimov & Craig McClanahan
Model 2 Typical Flow
Controller
Model
Browser
View
MVC Based Model 2 Architecture Diagram
Michael Rimov & Craig McClanahan
Abbreviated Model
Controller
Model
View
Michael Rimov & Craig McClanahan
What Makes Struts So Extensible?
• Lightweight and Focused: Doesn’t Try
To Do Everything.
• Well Designed: Very good separation of
concerns, very clean coding
implementation.
• Uses Java Reflection to allow freedom
of objects.
Michael Rimov & Craig McClanahan
Case Studies
Michael Rimov & Craig McClanahan
Case Studies
•
•
•
•
Struts and Expresso
Struts and Macromedia Flash
Struts and XML
Struts and Java Server Faces
Michael Rimov & Craig McClanahan
Case Study: Expresso 5
http://www.jcorporate.com/
Michael Rimov & Craig McClanahan
Case Study: Expresso 5
Controller
Model
View
Expresso
Controller
Controller
Response
Default
JSP
XSLT
Michael Rimov & Craig McClanahan
Case Study: Expresso 5
Controller Extension:
• Provided Application Level Security
Matrix
• Added in-request routing ability.
• Provided mostly-Servlet Independent
flow of control.
Michael Rimov & Craig McClanahan
Case Study: Expresso 5
Struts Action:
public ActionForward perform(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
Expresso Version:
protected void runPromptLoginState
(ControllerRequest request,
ControllerResponse response)
Michael Rimov & Craig McClanahan
Case 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
Michael Rimov & Craig McClanahan
Case Study: Expresso 5
View Extension:
• Default UI Renderer
• Customizable XSLT Processing
Capabilities.
• Compatible with Struts Views.
Michael Rimov & Craig McClanahan
Case Study: Expresso 5
Integration Experiences:
• Extremely supportive community
• Reaped Performance Improvements
• Partial Integrations still work well.
• Easy to extend even the Struts internals.
Michael Rimov & Craig McClanahan
Case Study: Macromedia Flash
http://www.macromedia.com/software/flash
Michael Rimov & Craig McClanahan
Case Study: Macromedia Flash
Controller
Model
View
JSP / Flash
Michael Rimov & Craig McClanahan
Case 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.
Michael Rimov & Craig McClanahan
Case Study: Macromedia Flash
Start Page
• Tell Flash Where To Get Its Data.
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swfl
ash.cab#version=6,0,29,0" width="445" height="244">
<param name="movie" value=
“mymovie.swf?data=http://www.example.org/MyAction.do&
next=http://www.example.org/NextAction.do">
<param name="quality" value="high">
<embed src=
“mymovie.swf?data=http://www.example.org/MyAction.do&
next=http://www.example.org/NextAction.do"
quality="high"
pluginspage="http://www.macromedia.com/go/getflashplayer"
type="application/x-shockwave-flash" width="445" height="244"></embed>
</object>
Michael Rimov & Craig McClanahan
Case 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.
Michael Rimov & Craig McClanahan
Case Study: Macromedia Flash
XML Socket Method: Drawbacks
• XML Parsing on the Client Side.
• XML Parsing on the Server Side
• Expansion of Bandwidth
Michael Rimov & Craig McClanahan
Case 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
“property=value” format.
Michael Rimov & Craig McClanahan
Case 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
Michael Rimov & Craig McClanahan
Quick ActionScript Sample
on (release) {
LoadVars lv = new LoadVars();
LoadVars receiveVars = new LoadVars();
lv.loginName=LoginName;
lv.password = Password;
receiveVars.onLoad = processResult; //Not Shown Here
lv.sendAndLoad(data,receiveVars,"POST");
}
Michael Rimov & Craig McClanahan
Introducing Craig McClanahan
Michael Rimov & Craig McClanahan
Case Study: Struts and XML
Michael Rimov & Craig McClanahan
Case 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
Michael Rimov & Craig McClanahan
Struts 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
Michael Rimov & Craig McClanahan
or other markup language
Struts 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/
Michael Rimov & Craig McClanahan
Case Study: Struts and JavaServer
Faces
Michael Rimov & Craig McClanahan
Case 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/
Michael Rimov & Craig McClanahan
JavaServer 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
Michael Rimov & Craig McClanahan
JavaServer 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
Michael Rimov & Craig McClanahan
JavaServer Faces: Sample Page
<f:use_faces>
<h:form formName=”logonForm”>
<h:panel_grid columns=”2”>
<h:output_text value=”Username:”/>
<h:input_text id=”username” length=”16”
valueRef=”logonBean.username”/>
<h:output_text value=”Password:”/>
<h:input_secret id=”password”
length=”16”
valueRef=”logonBean.password”/>
Michael Rimov & Craig McClanahan
JavaServer Faces: Sample Page
<h:command_button type=”submit”
label=”Log On”
actionRef=”logonBean.logon”/>
<h:command_button type=”reset”
label=”Reset”/>
</h:panel_grid>
</h:form>
</f:use_faces>
Michael Rimov & Craig McClanahan
JavaServer Faces: Managed Bean
<managed-bean>
<managed-bean-name>
logonBean
</managed-bean-name>
<managed-bean-class>
mypackage.mybeans.LogonBean
</managed-bean-class>
<managed-bean-scope>
request
</managed-bean-scope>
</managed-bean>
Michael Rimov & Craig McClanahan
JavaServer 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)
{ ... }
Michael Rimov & Craig McClanahan
JavaServer 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());
}
};
}
Michael Rimov & Craig McClanahan
JavaServer 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);
}
}
}
Michael Rimov & Craig McClanahan
JavaServer Faces: Navigation
<navigation-rule>
// Wildcard and global patterns ok
<from-tree-id> /logon.jsp </from-tree-id>
<navigation-case>
<from-action-ref> // Optional
logonBean.logon </from-action-ref>
<from-outcome>
// Optional
success </from-outcome>
<to-tree-id>
/mainmenu.jsp </to-tree-id>
</navigation-case>
</navigation-rule>
Michael Rimov & Craig McClanahan
JavaServer 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/jakartastruts/
Michael Rimov & Craig McClanahan
JavaServer 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 ...)
Michael Rimov & Craig McClanahan
JavaServer Faces and Struts
• To use the library with an existing app:
– Get the JavaServer Faces RI
– Drop it and struts-faces.jar into your /WEBINF/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 :-).
Michael Rimov & Craig McClanahan
Conclusion
Michael Rimov & Craig McClanahan
Presentation Information
Michael Rimov:
[email protected]
Craig McClanahan:
[email protected]
Slides, Notes and Sample Code Available
http://www.centercomp.com/beyondstruts/
Michael Rimov & Craig McClanahan
Michael Rimov & Craig McClanahan