Java Web Application Framework (WAF) Melek OKTAY 50050403

Java Web Application
Framework (WAF)
Melek OKTAY
50050403
[email protected]
Outline
□ Introduction
□ Java Web Aplication Framework
□ Conclusion
Outline
□ Introduction
□ What is Framework
□ What is WAF
□ Java Web Aplication Framework
□ Conclusion
What is Framework?
□ Introduction
□ What is Framework
□ What is WAF
□ Java Web Aplication Framework
□ Conclusion
What is Framework?
□ In information systems environment, a framework is
a defined support structure in which other software
applications can be organized and developed.
□ A software framework is a reusable design and
building blocks for a software system and/or
subsystem
What is Framework? (cont.)
□ In an object-oriented environment, a framework
consists of abstract and concrete classes.
Instantiation of such a framework consists of
composing and subclassing the existing classes
□ Software frameworks rely on the Hollywood
Principle: "Don’t call us, we’ll call you."
What is Framework? (cont.)
Why we use Framework?
□ The software frameworks significantly reduce the
amount of time, effort, and resources required to
develop and maintain applications.
What is Framework?
□ Introduction
□ What is Framework
□ What is WAF
□ Java Web Aplication Framework
□ Conclusion
What is WAF?
□ A Web Application Framework (WAF) is a reusable,
skeletal, semi-complete modular platform that can
be specialized to produce custom web
applications , which commonly serve the web
browsers via the Http's protocol.
□ WAF usually implements the Model-View-Controller
(MVC) design pattern, typically in the Model 2
architecture to develop request-response webbased applications on the Java EE and .Net
models.
What is WAF? (cont.)
□ Model 1 Architecture
What is WAF? (cont.)
□ Model 2 Architecture
Model-View-Controller
Why we use WAF?
□ Virtually all web applications have a common set of
basic requirements, such as user management e.g.,
secure user login, password recovery), group
management, and access authorization.
□ A Web Application Framework usually includes all
these functionalities, refined through hundreds of
production deployments, freeing developers to
focus on the needs of their specific application.
Why we use WAF?
□ WAFs store important data in a relational database
and they interact with users via a web-based user
interface.
□ Any application written on top of a Web
Application Framework can transparently and
immediately take advantage of these basic
services.
□ Introduction
□ Java Web Aplication Framework
□ Conclusion
Java Web Aplication Framework
□ Introduction
□ Java Web Aplication Framework
□ Request-based Framework
□ Component-based Framework
□ Hybrid – Meta Framework
□ RIA-based Framework
□ Conclusion
Request-based Framework
□ Introduction
□ Java Web Aplication Framework
□ Request-based Framework
□ Component-based Framework
□ Hybrid – Meta Framework
□ RIA-based Framework
□ Conclusion
Request-based Framework
□ A Request-based Framework is very close to the
original CGI specification.
□ It uses controllers and actions that directly handle
incoming requests.
□ Each request is essentially stateless.
Request-based Framework
□ Introduction
□ Java Web Aplication Framework
□ Request-based Framework
□ Struts
□ WebWork
□ Beehive , Stripes
□ Component-based Framework
□ Hybrid – Meta Framework
□ RIA-based Framework
□ Conclusion
Request-based Framework
□ Introduction
□ Java Web Aplication Framework
□ Request-based Framework
□ Struts
□ WebWork
□ Beehive , Stripes
□ Component-based Framework
□ Hybrid – Meta Framework
□ RIA-based Framework
□ Conclusion
Struts
□ Struts was originally developed by Craig
McClanahan and donated to the Apache
Foundation in May 2000.
□ Struts has been a de facto framework with a strong
and vibrant user community.
Struts (cont.)
□ Struts uses and extends the Java Servlet API to
adopt the "Model 2" approach, a variation of the
classic Model-View-Controller (MVC) design
pattern.
Struts (cont.)
MVC Design pattern
Struts Tag Libraries
□
□
□
□
□
HTML Tags
Bean Tags
Logic Tags
Template Tags
Custom Tags
Struts HTML Tags
□ The tags in the Struts HTML library form a bridge
between a JSP view and the other components of
a Web application.
□ Since a dynamic Web application often depends
on gathering data from a user, input forms play an
important role in the Struts framework
Struts HTML Tags
□ HTML "form" tags
□
□
□
□
□
□
□
□
□
□
button
cancel
checkboxes
file
hidden
image
multibox
password input fields
radio buttons
reset buttons
□ HTML "form" tags
□ select lists with
embedded
□ option
□ options
□ submit buttons
□ text input fields
□ textareas
HTML Tags – Typical HTML Form
□
□
□
□
□
□
□
□
□
□
□
□
□
□
□
□
□
□
□
□
<HTML>
<BODY>
<FORM>
<TABLE WIDTH="100%">
<TR><TD>First Name</TD>
<TD><INPUT TYPE="TEXT" NAME="Name" SIZE="40" MAXLENGTH="40"></TD></TR>
<TR><TD>Street Address</TD>
<TD><INPUT TYPE="TEXT" NAME="Address" SIZE="40" MAXLENGTH="40"></TD></TR>
<TR><TD>City</TD>
<TD><INPUT TYPE="TEXT" NAME="City" SIZE="20" MAXLENGTH="20"></TD></TR>
<TR><TD>State</TD>
<TD><INPUT TYPE="TEXT" NAME="State" SIZE="2" MAXLENGTH="2"></TD></TR>
<TR><TD>Postal Code</TD>
<TD><INPUT TYPE="TEXT" NAME="ZipCode" SIZE="9" MAXLENGTH="9"></TD></TR>
<TR><TD ALIGN=CENTER><INPUT TYPE="SUBMIT" NAME="Submit" VALUE="Save"></TD>
<TD><INPUT TYPE="RESET" NAME="Reset" VALUE="Cancel"></TD></TR>
</TABLE>
</FORM>
</BODY>
</HTML>
Project Refinery, Inc.
28
HTML Tags – Typical Struts Form
□
□
□
□
□
□
□
□
□
□
□
□
□
□
□
□
□
□
□
□
<HTML:HTML>
<BODY>
<HTML:FORM Action="/CustomerForm" focus=“name” >
<TABLE WIDTH="100%">
<TR><TD><bean:message key="customer.name"/></TD>
<TD><HTML:TEXT property="name" size="40" maxlength="40" /></TD></TR>
<TR><TD><bean:message key="customer.address"/></TD>
<TD><HTML:TEXT property="address" size ="40" maxlength ="40" /></TD></TR>
<TR><TD><bean:message key="customer.city"/></TD>
<TD><HTML:TEXT property="city" size ="20" maxlength ="20" /></TD></TR>
<TR><TD><bean:message key="customer.state"/></TD>
<TD><HTML:TEXT property="state" size ="2" maxlength ="2" /></TD></TR>
<TR><TD><bean:message key="customer.zip"/></TD>
<TD><HTML:TEXT property="zip" size ="9" maxlength ="9" /></TD></TR>
<TR><TD ALIGN=CENTER><html:submit property="action" value ="Save"/></TD>
<TD><html:reset property="action" value ="Reset"/></TD></TR>
</TABLE>
</HTML:FORM>
</BODY>
</HTML:HTML>
Project Refinery, Inc.
29
Application Set-up
•Jar files
•Tag libraries
•Struts-config dtd
•Application.properties
•Apache vhost file
•Web.xml
•Struts-config.xml
Project Refinery, Inc.
30
Some Struts Sites: Travel
Project Refinery, Inc.
31
Some Struts Sites: Government
Project Refinery, Inc.
32
Conservatives and Liberals Use It
Project Refinery, Inc.
33
WebWork
□ Introduction
□ Java Web Aplication Framework
□ Request-based Framework
□ Struts
□ WebWork
□ Beehive , Stripes
□ Component-based Framework
□ Hybrid – Meta Framework
□ RIA-based Framework
□ Conclusion
WebWork
□ WebWork was originally developed by Rickard
Oberg in 2001, and released as an open source
project on SourceForge in March 2002.
□ WebWork provides robust support for building
reusable UI templates, such as form controls, UI
themes, internationalization, dynamic form
parameter mapping to JavaBeans, and robust
client and server side validation.
Component-based Framework
□ Introduction
□ Java Web Aplication Framework
□ Request-based Framework
□ Component-based Framework
□ Hybrid – Meta Framework
□ RIA-based Framework
□ Conclusion
Component-based Framework
□ A Component-based Framework abstracts the
internals of the request handling and encapsulates
the logic into reusable components, often
independent from the web medium
□ The state is automatically handled by the
framework, based on the data that is present in
each component instance.
□ Together with some form of event handling, this
development model is very similar to the features
offered by desktop GUI toolkits.
Component-based Framework
□ Introduction
□ Java Web Aplication Framework
□ Request-based Framework
□ Component-based Framework
□ JSF
□ Tapestry
□ Wicket
□ Hybrid – Meta Framework
□ RIA-based Framework
□ Conclusion
Component-based Framework
□ Introduction
□ Java Web Aplication Framework
□ Request-based Framework
□ Component-based Framework
□Jave Server Faces (JSF)
□ Tapestry
□ Wicket
□ Hybrid – Meta Framework
□ RIA-based Framework
□ Conclusion
Jave Server Faces (JSF)
□ JavaServer Faces (JSF) is a server-side user interface
component framework for Java-based Web
applications.
□ JSF contains an API for representing UI components
and managing their state; handling events, serverside validation, and data conversion; defining page
navigation; supporting internationalization and
accessibility; and providing extensibility for all these
features
JSF Solutions







UI components
State management
Event handling
Input validation
Page navigation
Internationalization and accessibility.
Custom tag library
JSF Life Cycle
UI Components (Standard)
Some of the standard JavaServer Faces Components
UI Components (Custom)
Some custom JavaServer Faces Components
UI Components (Open Source)
Some open source JavaServer Faces Components
UI Components (Third Party)
Some third-party JavaServer Faces Components
UI Components (Code)
Syntax for a text box component:
<h:inputText/>
Syntax for a calendar component:
<v:calendar/>
Syntax for a bean backed calendar
component:
<v:calendar value=“#{bean.date}”/>
State Management
□ JSF maintains the state of components
over several requests.
□ Example 1
□ Example 2
□ Code:
□ None Required
Event Handling
□ Method Bindings
<h:outputText value=“#{bundle.welcome}”
rendered=“#{bean.showWelcome}”/>
□ Value Change Listeners
<h:selectOneMenu value=“#{bean.type}” onchange=“submit()”
immediate=“true” valueChangeListener=“#{bean.change}”>
<f:selectItems value=“#{bean.types}”>
</h:selectOneMenu>
□ Command Actions
<h:commandButton action=“#{bean.submit}”/>
□ Action Listeners
<h:commandButton actionListener=“#{bean.listen}”
action=“#{bean.submit}”/>
Input Validation
□ Standard Validators
□ <h:inputText id=“card”
value=“#{bean.card}” required=“true”>
<f:validateLength minimum=“13”/>
</h:inputText>
□ f:validateDoubleRange
□ f:validateLongRange
□ f:validateLength
□ Custom Validators
Input Validation - Errors
□ Validation Errors
□ <h:message for=“card”/>
□ <h:messages/>
Input Validation - Converters
□ Standard Converters
□ <h:inputText value=“bean.date”>
<f:convertDateTime
pattern=“MM/dd/yyyy”/>
</h:inputText>
□ f:convertNumber
□ f:convertDateTime
□ Custom Converters
□ <h:inputText value=“bean.user”
converter=“com.ihc.custom”>
Page Navigation
□ Struts-like config file navigation
<navigation-rule>
<from-view-id>/index.jsp</from-view-id>
<navigation-case>
<from-outcome>Success</from-outcome>
<to-view-id>/thankyou.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>Error</from-outcome>
<to-view-id>/error.jsp</to-view-id>
</navigation-case>
</navigation-rule>
Internationalization and
accessibility
□ Components and Converters support multiple
locales
□ Resource Bundle Support
□ <f:loadBundle basename="resources" var="res"/>
□ Define supported locales
<application>
<message-bundle>resources</message-bundle>
<locale-config>
<default-locale>en</default-locale>
<supported-locale>fr</supported-locale>
<supported-locale>es</supported-locale>
</locale-config>
</application>
Custom tag library
□ You have already seen it
□ html-basic.tld <h:…/>
□ jsf-core.tld <f:…/>
Gotchas





Deployment
Embedding HTML
Components and Renderers
Validation
Bundle Keys “x.y.z”
Deployment
□ BEA WebLogic Server 8.1 SP3
□ The JavaServer Faces required jars
□
□
□
□
□
□
□
□
commons-beanutils.jar
commons-collections.jar
commons-digester.jar
commons-logging.jar
jsf-api.jar
jsf-impl.jar
jstl.jar (must be version 1.0)
standard.jar (must be version 1.0)
Embedding HTML
□ HTML within JSF tags does not work
without f:verbatim
<h:panelGroup>
<f:verbatim>html</f:verbatim>
</h:panelGroup>
□ Use Exadels htmLib.jar instead
Components and Renderers
□ Building custom components
□ No simple task
□ Separate the renderer (easy to do)
Validation
□ If validation or conversion fails nothing
happens
□ Action method bindings do not execute
□ Page just comes back
□ Most common JSF forum post
□ Use h:message or h:messages
Bundle Keys “x.y.z”
□ Resource Bundles are loaded as maps
□ #{bundle.userslastname} – works
□ #{bundle.user.name.last} – fails
□ #{bundle[‘user.name.last’]} – works
□ For properties:
□ #{bean.user.address.street} – works
Tool Support
□ Most IDEs have limited JSF support
Eclipse*
IntelliJ*
JBuilder
IBM WSAD
Studio Creator JDeveloper
Netbeans*
Notepad**
□ The following IDEs provide the ability to
drag and drop components onto a
page:
□
□
□
□
IBM WSAD
Borland JBuilder
Oracle JDeveloper
Sun Java Studio Creator
MyEclipse – Drag and Drop
Political Support
□ Sun
□ Oracle
□ IBM
□ …and a bunch of little people but
after those three it really doesn’t
matter
Recommended Reading
(the end)
Books
Books I can recommend:
□ Core JavaServer Faces
by David Geary, Cay Horstmann
□ JavaServer Faces in Action
by Kito D. Mann
Other books
□ JavaServer Faces
by Hans Bergsten
□ Mastering JavaServer Faces
by Bill Dudney, Jonathan Lehr, Bill Willis, LeRoy Mattingly
□ JavaServer Faces Programming
by Budi Kurniawan
□ Javaserver Faces Kick Start (Kick Start)
by James Turner, Craig McClanahan, Kunal Mittal
Sites
□ Sun Official JavaServer Faces Page
http://java.sun.com/j2ee/javaserverfaces
□ Sun Official JavaServer Faces Forum
http://forum.java.sun.com/forum.jspa?forumID=427
□ Java Community Process JavaServer Faces Page
http://www.jcp.org/en/jsr/detail?id=127
□ Sun Official JavaServer Faces implementation
project
https://javaserverfaces.dev.java.net/
□ Components and resources
□ http://www.jsfcentral.com/
□ http://www.jamesholmes.com/JavaServerFaces/
Component-based Framework
□ Introduction
□ Java Web Aplication Framework
□ Request-based Framework
□ Component-based Framework
□ Jave Server Faces (JSF)
□ Tapestry
□ Wicket
□ Hybrid – Meta Framework
□ RIA-based Framework
□ Conclusion
Component-based Framework
□ Introduction
□ Java Web Aplication Framework
□ Request-based Framework
□ Component-based Framework
□ Jave Server Faces (JSF)
□ Tapestry
□ Wicket
□ Hybrid – Meta Framework
□ RIA-based Framework
□ Conclusion
Component-based Framework
□ Introduction
□ Java Web Aplication Framework
□ Request-based Framework
□ Component-based Framework
□ Hybrid – Meta Framework
□ RIFE
□ Spring Framework
□ RIA-based Framework
□ Conclusion
Component-based Framework
□ Introduction
□ Java Web Aplication Framework
□ Request-based Framework
□ Component-based Framework
□ Hybrid – Meta Framework
□ RIA-based Framework
□ Conclusion
Component-based Framework
□ Introduction
□ Java Web Aplication Framework
□
□
□
□
Request-based Framework
Component-based Framework
Hybrid – Meta Framework
RIA-based Framework
□ DWR
□ Echo2
□ JSON-RPC-Java
□ Conclusion
Java EE and .NET tiers
Java EE frameworks
References
□
T. C. Shan, W. W. Hua, “Taxonomy of Java Web Application
Frameworks,” in Conf. Rec. 1995 IEEE Int. Conf. on e-Business
Engineering, pp. 378–385.
□
M. Fowler,”Patterns of Enterprise Application Architecture”,
Addison-Wesley, 2003.
□
Melek Oktay, Ayşe Betül Gülbağcı, Mustafa Sarıöz
“Architectural, Technological and Performance Issues in
Enterprise Applications”,not published yet...
Thanks