55
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. Developing Rich Web Applications with Spring Keith Donald Scott Andrews

Developing Rich Web Applications with Spring

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Developing Rich Web Applications with Spring

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

Developing Rich Web Applications with Spring

Keith DonaldScott Andrews

Page 2: Developing Rich Web Applications with Spring

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

Page 3: Developing Rich Web Applications with Spring

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

Page 4: Developing Rich Web Applications with Spring

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

Where We Work

Page 5: Developing Rich Web Applications with Spring

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

Our Open Source Projects

Page 6: Developing Rich Web Applications with Spring

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

Our Commercial Products

SpringSourcePerformance

Suite

SpringEnterprise

Edition

SpringSourceSupport

SpringSource Enterprise

Page 7: Developing Rich Web Applications with Spring

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

SpringSource Enterprise

AMS

STS

RAC

Page 8: Developing Rich Web Applications with Spring

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

SpringSource dm Server™

Page 9: Developing Rich Web Applications with Spring

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

Page 10: Developing Rich Web Applications with Spring

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

Page 11: Developing Rich Web Applications with Spring

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

Page 12: Developing Rich Web Applications with Spring

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

Page 13: Developing Rich Web Applications with Spring

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

Page 14: Developing Rich Web Applications with Spring

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

Page 15: Developing Rich Web Applications with Spring

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

Page 16: Developing Rich Web Applications with Spring

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”; }

}

Page 17: Developing Rich Web Applications with Spring

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}

Page 18: Developing Rich Web Applications with Spring

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

Page 19: Developing Rich Web Applications with Spring

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

Page 20: Developing Rich Web Applications with Spring

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

Page 21: Developing Rich Web Applications with Spring

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

Page 22: Developing Rich Web Applications with Spring

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

Page 23: Developing Rich Web Applications with Spring

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

Page 24: Developing Rich Web Applications with Spring

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”/>

Page 25: Developing Rich Web Applications with Spring

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) {}}

Page 26: Developing Rich Web Applications with Spring

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

Page 27: Developing Rich Web Applications with Spring

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

Demo

Essential Spring MVC Features

Page 28: Developing Rich Web Applications with Spring

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

Page 29: Developing Rich Web Applications with Spring

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

Page 30: Developing Rich Web Applications with Spring

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

Page 31: Developing Rich Web Applications with Spring

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

Page 32: Developing Rich Web Applications with Spring

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

Page 33: Developing Rich Web Applications with Spring

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>

Page 34: Developing Rich Web Applications with Spring

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

Page 35: Developing Rich Web Applications with Spring

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>

Page 36: Developing Rich Web Applications with Spring

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

Page 37: Developing Rich Web Applications with Spring

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>

Page 38: Developing Rich Web Applications with Spring

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');

Page 39: Developing Rich Web Applications with Spring

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

Demo

Progressive Enhancement with Spring JavaScript

Page 40: Developing Rich Web Applications with Spring

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

Page 41: Developing Rich Web Applications with Spring

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

Page 42: Developing Rich Web Applications with Spring

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

Page 43: Developing Rich Web Applications with Spring

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

Web Flow Sweet Spot

Page 44: Developing Rich Web Applications with Spring

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

Page 45: Developing Rich Web Applications with Spring

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

Demo

Essential Web Flow 2 features

Page 46: Developing Rich Web Applications with Spring

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

Page 47: Developing Rich Web Applications with Spring

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

Page 48: Developing Rich Web Applications with Spring

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

Page 49: Developing Rich Web Applications with Spring

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

Page 50: Developing Rich Web Applications with Spring

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

Page 51: Developing Rich Web Applications with Spring

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

Page 52: Developing Rich Web Applications with Spring

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

Page 53: Developing Rich Web Applications with Spring

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 >

Page 54: Developing Rich Web Applications with Spring

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

Page 55: Developing Rich Web Applications with Spring

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?