Java Building Web Apps with Spring Rob Harrop, Interface21 Ltd.

6 downloads 197 Views 731KB Size Report
JMX 2.0 Expert Group Member ... Create a Spring Web Application config ... Flow. • Web Flow is integrated with Spring MVC. – View resolution works the same ...
Java Building Web Apps with Spring Rob Harrop, Interface21 Ltd.

About the Speaker • • • • •

VP at Interface21 Core Developer on Spring Founder of Spring Modules JMX 2.0 Expert Group Member Author of Pro Spring

• Contact me at [email protected]

Agenda • • • • • • • •

Tools for Web Development Getting Started Basic User Interactions Handling Site Formatting User Conversations with Web Flow Adding Security Handling Exceptions Interception and Filtering

Tools for Web Development • Get a good IDE: – IntelliJ IDEA – Eclipse with WTP – NetBeans

• Consider using Jetty for development – Rapid turn around – Easy to edit view files, flow definitions etc

• Maven is a good tool for managing Jetty

Tools for Web Development • Spring and Spring Web Flow • Site Formatting – SiteMesh – Tiles

• CSS Framework – ContentWithStyle.co.uk

Getting Started 1.Create basic web application skeleton 1.Consider Maven as a kick start

2.Configure Spring's DispatcherServlet 3.Create a Spring Web Application config file 4.Configure ContextLoaderListener and middle tier configuration files as needed

DEMO: Basic Web Application Configuration

Basic User Interactions • Logic encapsulated in Controllers – Implement Controller directly – Extend AbstractController, MultiActionController or SimpleFormController

Basic User Interactions • Controllers return a ModelAndView which describes: – The view to render – Data for that view

View Resolution • Typically views are represented as String names – Decoupled from the actual view implementation – Easy to test

View Resolution • These names are mapped to concrete views using a ViewResolver: – InternalResourceViewResolver – BeanNameViewResolver – VelocityViewResolver

• Many applications have multiple ViewResolvers configured in a chain

Mapping Controllers to URIs • Controllers are configured as beans in the web application config file – Can have injected dependencies – Declarative services

Mapping Controllers to URIs • These Controller beans are mapped to URIs using a HandlerMapping: – SimpleUrlHandlerMapping – BeanNameHandlerMapping

• HandlerMappings are also configured in the web application config file

DEMO: Creating and Configuring a Controller

Site-Wide Formatting • Most web applications require consistent formatting across the site – Headers – Navigation – Footers – Ads

• Adding this by hand can be painful and error-prone

Handling Site-Wide Formatting • Site-wide formatting can be applied automatically – Do not cut and paste across pages!

• Use a pre-built tool – SiteMesh and Tiles are good candidates

• Couple this with a strong CSS-based layout – I use a pre-built CSS framework from ContentWithStyle

Site-Wide Formatting with SiteMesh 1. Configure the SiteMesh filter 2. Create a decorators.xml file 1. Define your page decorators

3. Create your decorator(s)

DEMO: SiteMesh in Action

User Conversations with Web Flow

• Web Flow provides a sophisticated mechanism for controlling long running user interactions

• Conversations are mapped as fa low using standard state machines concepts

User Conversations with Web Flow

• Web Flow is integrated with Spring MVC – View resolution works the same way – Exception resolution works the same way

Web Flow Concepts • State – A single stage in the execution of a flow

• Action – A piece of logic that can be executed a various points during the flow

Web Flow Concepts • Event – A user or action initiated event such as “submit” or “process”

• Transition – A movement from one state to another in response to some event

Web Flow Concepts • View State – A state that constitutes a pause in the flow execution and renders a view for the user

• Action State – A state type that executes one or more Actions before proceeding to another State

Web Flow Concepts • Flow Executor – Manages flow execution. Resumes and pauses flows as they proceed

• Flow Repository – Store in-progress flow execution state – Simple and continuation-based implementations provided

Web Flow Concepts • Flow Registry – Registry of flow definitions

Getting Started with Web Flow 1.Configure Flow Registry 2.Configure Flow Executor 3.Optionally configure Flow Repository 4.Create Flow Definition 5.Configure a FlowController for your flow

Configuring Web Flow • Configure the FlowExecutor and FlowRegistry •

• •





Flows are XML files stored in /WEB-INF/flows

Configuring a FlowController • •







DEMO: Order Process with Spring Web Flow

Handling Exceptions • Exceptions that cannot be handled should be allowed to propagate • These can be handled by some last-ditch process – Servlet error pages – Spring HandlerExceptionResolvers

Handling Exceptions • HandlerExceptionResolver allows for: – Last ditch processing – Same contract as a Controller – Access to thrown Exception – Auto detected from the ApplicationContext

Handling Exceptions • Spring provides SimpleMappingExceptionResolver – Configurable mapping of Exception type to error view name

DEMO: Configuring a HandlerExceptionResolver

Interception and Filtering • Spring web applications have three options for interception: – Servlet Filters – Spring HandlerInterceptors – AOP

Interception and Filtering • All three options can be treated as normal Spring beans: – Dependency Injection – Remote/JMX exposure

Uses for Interception and Filtering • Conditional request processing – Maintenance mode – Redirect based on user type

• Tracing and profiling • Thread local management

DEMO: Filtering and Interception in Action

Further Information • Blog - http://blog.interface21.com/ • SiteMesh http://www.opensymphony.com/sitemes h • ContentWithStyle http://www.contentwithstyle.co.uk

Q&A

Suggest Documents