Developing Rich Web Applications with Spring

Preview:

DESCRIPTION

 

Citation preview

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Developing Rich Web Applications with Spring

Keith DonaldScott Andrews

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 2

Agenda

• A little bit about your speakers

• Developing rich web applications– Programming model– Convention-over-configuration– Ajax– Flow– Security– JavaServerFaces– Better modularity with OSGi

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 3

Speaker Background

• Keith Donald– SpringSource Co-Founder– Spring Project Lead– Author

• Several Spring books• Spring Training Curriculum

– Conference Director, The Spring Experience

• Scott Andrews– Application Developer– Member of the Spring Web Team– Creator, SpringSource Enteprise Bundle Repository

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 4

Where We Work

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 5

Our Open Source Projects

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 6

Our Commercial Products

SpringSourcePerformance

Suite

SpringEnterprise

Edition

SpringSourceSupport

SpringSource Enterprise

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 7

SpringSource Enterprise

AMS

STS

RAC

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 8

SpringSource dm Server™

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 9

Agenda

• A little bit about your speakers

• Developing rich web applications– Programming model– Convention-over-configuration– Ajax– Flow– Security– JavaServerFaces

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 10

Modules Covered

• Spring Web MVC– foundation for all other web modules

• Spring JavaScript– Ajax support

• Spring Web Flow– framework for stateful interactions

• Spring Faces– JavaServer Faces support

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 11

Layered Web Modules

Spring Web Modules

Spring Web MVCSpring Web MVC

Spring Web FlowSpring Web Flow Spring JavaScriptSpring JavaScript

Spring Faces Spring Faces

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 12

Obtaining Code

• See www.springframework.org/download

• Web MVC– Download Spring Framework 2.5.x

• JavaScript, Web Flow, and Faces– Download Spring Web Flow 2.0.x

• Sample Application– See www.springframework.org/webflow-samples

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 13

Spring Web MVC

• Popular web framework

• Foundation for all other web modules

• Significantly enhanced in Spring 2.5– Annotated controller model– Convention-over-configuration

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 14

Annotated Controller Model

• Annotate a plain Java™ class as a Controller

• Map HTTP requests to methods– Bind request parameters to method

arguments– Populate Model to export data to the view– Return a String to select a view

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 15

Example

• @Controller to manage hotels

• GET /hotels/list– List hotels available for booking

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 16

Example @Controller

@Controllerpublic class HotelsController {

@RequestMapping(“/hotels/list”, method=GET) public String list(Model model) { model.add(“hotels”, hotelService.findAll()); return “/hotels/list”; }

}

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 17

Example Request Lifecycle

DispatcherServlet

HotelsController.list(Model)

/hotels/list.jsp

/hotels/list

/hotels/list

invoke

render Model {hotels}

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 18

Before Spring Web MVC 2.5

public class HotelsController extends MultiActionController {

public ModelAndView list( HttpServletRequest request, HttpServletResponse response) { ModelAndView mv = new ModelAndView(); mv.add(“hotels”, hotelService.findAll()); mv.setViewName(“/hotels/list”); return mv; }

} + External XML URL Mapping Configuration

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 19

Convention over configuration

• Write less code, get consistency

• Conventions available for– Request mapping– View name selection– Model population

• Can always override when needed

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 20

With Conventions

@Controllerpublic class HotelsController {

@RequestMapping public void list(Model model) { model.add(hotelService.findAll()); }

}

Mapping to class + method name

Model entry name generated from object type

Viewselectedfromrequestpath

GET /hotels/list

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 21

Simplest Signature Possible

@Controllerpublic class HotelsController {

@RequestMapping public List<Hotel> list() { return hotelService.findAll(); }

}

Added tothe Modelfor you

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 22

Multi-Action Convention Example

@Controllerpublic class HotelsController {

@RequestMapping public void index(…) {…}

@RequestMapping public void show(…) {…}

@RequestMapping public void update(…) {…}}

/hotels/index

/hotels/update

/hotels/show

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 23

Data Binding

@Controllerpublic class HotelsController {

@RequestMapping public void list(Criteria c, Model m) { model.add(hotelService.find(c)); }

@RequestMapping public void show(@RequestParam Long id, Model m) { model.add(hotelService.get(id)); }

}

/hotels/list?searchString=Westin&pageSize=5

/hotels/show?id=1

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 24

@Controller Deployment

• Found in classpath

• Auto-wired as Spring beans

<!-- Scan for components to deploy as beans --><context:component-scan base-package=”example.hotels”/>

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 25

Autowiring Hints

@Controllerpublic class HotelsController {

@Autowired public HotelsController(HotelService service) { }

}@Servicepublic class HibernateHotelService implements HotelService {

@Autowired public HibernateHotelService(DataSource ds) { }

@Transactional public List<Hotels> find(Criteria c) {}}

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 26

Mixing Annotations and XML

<beans>

<context:component-scan base-package=”example.hotels”/>

<jee:jndi-lookup id=”dataSource” jndi-name=”eis/jdbc/travelDataSource”/>

</beans>

Configure your application beans

Link with environment-specific infrastructure

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Demo

Essential Spring MVC Features

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 28

Web MVC Summary

• Favor @Controller model over old styles

• Favor convention-over-configuration

• Favor strongly typed handler methods

• Consider grouping control logic by Resource– e.g. “HotelsController” for acting on Hotel resources

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 29

Spring JavaScript

Spring Web Modules

Spring Web MVCSpring Web MVC

Spring Web FlowSpring Web Flow Spring JavaScript

Spring Faces Spring Faces

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 30

Spring JavaScript

• JavaScript abstraction framework– Use to enhance HTML elements with

behavior

• Integrates the Dojo Toolkit

• In Web Flow 2 distribution

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 31

Goals of Spring JavaScript

• Simplify use of Dojo for common enterprise use cases– Ajax– Client-side validation

• Promote progressive enhancement– Graceful degradation– Accessibility

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 32

Other Spring JavaScript Value Adds

• ResourceServlet– Efficient serving of static resources– Meets Yahoo performance guidelines

• CSS Framework– Structure for common page layouts

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 33

Using Spring JavaScript

• Include public API, Dojo, and API implementation in your pages

<script type="text/javascript" src="/resources/spring/Spring.js"></script>

<script type="text/javascript" src="/resources/dojo/dojo.js"></script>

<script type="text/javascript” src="/resources/spring/Spring-Dojo.js"></script>

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 34

Working with the API

• Use API to apply decorations to HTML elements

• Different types of decorations– WidgetDecoration– AjaxEventDecoration– ValidateAllDecoration

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 35

Adding Hover Effect

<form:input id="searchString" path="searchString"/><script type="text/javascript"> Spring.addDecoration(new Spring.ElementDecoration({ elementId : "searchString", widgetType : "dijit.form.ValidationTextBox", widgetAttrs : { promptMessage : "Search hotels by name or location.” } }));</script>

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 36

Ajax with Partial Rendering

<a id="moreResultsLink” href="search?q=${criteria.q}&page=${criteria.page+1}">

More Results</a><script type="text/javascript"> Spring.addDecoration(new Spring.AjaxEventDecoration({ elementId: "moreResultsLink", event: "onclick", params: { fragments: "searchResults” } }));</script>

Name of tile to re-render on server

No callback function necessary to link in response

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 37

Form Validation

<form:input path="creditCard"/><script type="text/javascript"> Spring.addDecoration(new Spring.ElementDecoration({ elementId : "creditCard", widgetType : "dijit.form.ValidationTextBox", widgetAttrs : { required : true, invalidMessage : "A 16-digit number is required.", regExp : "[0-9]{16}” } }));</script>

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 38

Combining with Dojo Query

dojo.query('.spring-titlePane-open > h2'). forEach(function(titleElement) { Spring.addDecoration(new Spring.ElementDecoration({ elementId : titleElement.parentNode.id, widgetType : 'dijit.TitlePane', widgetAttrs : { title : titleElement.innerHTML, open : true }} ));}).style('display','none');

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Demo

Progressive Enhancement with Spring JavaScript

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 40

Summary

• Simple yet powerful API

• Write consistent JavaScript

• Promote progressive enhancement

• Manage partial update complexities

• Full-power of underlying toolkit available

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 41

Spring Web Flow

Spring Web Modules

Spring Web MVCSpring Web MVC

Spring Web Flow Spring JavaScriptSpring JavaScript

Spring Faces Spring Faces

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 42

Spring Web Flow Overview

• For implementing stateful flows– Reusable multi-step user dialogs

• Plugs into Spring MVC

• Spring Web Flow 2 available now– Incorporates lessons learned from 1.0– Offers many new features

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 43

Web Flow Sweet Spot

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 44

New Web Flow 2 Features

• Ajax support– Partial page re-rendering in flow DSL

• Spring security integration

• Flow-managed persistence

• Convention-over-configuration– View rendering– Data binding and validation

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Demo

Essential Web Flow 2 features

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 46

Summary

• Use Web Flow for stateful use cases– Wizards are a good example

• Run flows alongside stateless Controllers

• Web Flow 2 is a big step forward– Most sophisticated flow engine available

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 47

Spring Faces

Spring Web Modules

Spring Web MVCSpring Web MVC

Spring Web FlowSpring Web Flow Spring JavaScriptSpring JavaScript

Spring Faces

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 48

Spring Faces

• Makes JSF a view technology in Spring– Render JSF views from Spring MVC

Controllers and Web Flows

• Drives JSF lifecycle from within Spring environment

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 49

Spring Faces

• All native Spring MVC features available

• All phases of the JSF lifecycle implemented– Stateless MVC views execute render lifecycle– Stateful web flows execute render and

postback lifecycles

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 50

Key Benefits

• Action-oriented (Spring MVC)– Flexible URL mapping– REST-ful controller programming model– Model binding and validation– Request interception– Exception handling– Web Flow

• Component-oriented (JSF)– Composite views (Facelets)– Ecosystem of available component libraries– Ability to create new components to enable reuse

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Demo

Spring FacesCombining the best of action-oriented and component-oriented development

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 52

Summary

• Spring Faces enables the best of action-oriented and component-oriented development– Work with Spring MVC and JSF in the same application

• Stateless Spring MVC Controllers can render transient JSF views

• Stateful Spring Web Flows can render JSF views and process view post backs

• Major JSF component libraries supported

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Spring 3.0 Roadmap

• REST support– URI templates– Content negotiation– JSON, Flex remoting

• Declarative Validation• @Flow, as an alternative to XML• Improved packaging• Optimized for Java 5 and >

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 54

Presentation Summary

• Spring offers a lot for rich web application development

• Get involved at www.springframework.org

• Get enterprise support and tools at www.springsource.com

• Join us for a rich web training workshop at www.springsource.com/training

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 55Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

55

Questions?

Recommended