Post on 26-Nov-2014
Copyright @ 2011 LANDBANK eBSD
Introduction to Spring MVC
Emmanuel S. GarciaeBSD, ADTST
Copyright @ 2011 LANDBANK eBSD
What is a Framework• When you start development, you can
– Build everything from scratch– Reuse code from an existing application– Use a framework to build around it
“a set of programs demanding a specific design pattern from which you can build the rest of your application”
e.garcia
Spring MVC is an architectural design pattern used for web development
Copyright @ 2011 LANDBANK eBSD
What is a Framework
The Spring Framework is a lightweight solution and a potential one-stop-shop for building your enterprise-ready applications.
Spring Framework is a Java platform that provides comprehensive infrastructure support for developing Java applications.
Spring handles the infrastructure so youcan focus on your application
Copyright @ 2011 LANDBANK eBSD
So…. tell me,
What is a Model?What is a View?
What is a Controller?
Copyright @ 2011 LANDBANK eBSD
Model-View-Controller (MVC)
ModelObjects which represent something
EntityBusiness RuleA ValidatorA ServiceA POJOData Access Object
Copyright @ 2011 LANDBANK eBSD
Model-View-Controller (MVC)
View
Things that display something/anythingModels (Dynamic Data)BlurbsStatic Data
Copyright @ 2011 LANDBANK eBSD
Model-View-Controller (MVC)
ControllerThings that orchestrate the models and views
Copyright @ 2011 LANDBANK eBSD
Model-View-Controller (MVC)
Copyright @ 2011 LANDBANK eBSD
Basics of Spring MVC
Spring Configuration Files
web.xml All calls go through the DispatcherServlet Defines the Spring config file (*-servlet.xml by default)
*-servlet.xml Where the rest of your application components are
registered Where you define the Spring objects you need in your
application
Copyright @ 2011 LANDBANK eBSD
Basics of Spring MVCStep 1 – User sends request to server by submitting form / by clicking hyperlink etc. Request is initially given to WEB.XML. Step 2 – WEB.XML routes request to DispatcherServlet by looking at <servlet-mapping> tag. Step 3 – Inside DispatcherServlet, ‘HandlerMapping’ hands over request to suitable ‘Controller’. Step 4 – Controller maps request to proper Model class. All BUSINESS LOGIC is done inside Model classes. Step 5 – If database operation is needed then Model class will route request to suitable DAO. All database operations should be carried out in DAO. Step 6 – If needed, attach attributes into request /session/application scope and return back to Model. Step 7 – If needed, attach attributes into request /session/application scope and return back to Controller. Step 8 – Controller simply returns View (JSP/HTML etc). Step 9 – JSP/Html is viewed back to user
Copyright @ 2011 LANDBANK eBSD
Basics of Spring MVC
Copyright @ 2011 LANDBANK eBSD
Basics of Spring MVC
Spring Configuration Files
web.xml All calls go through the DispatcherServlet Spring config file (*-servlet.xml by default)
*-servlet.xml Where the rest of your application components are
registered Where you define the Spring objects you need in your
application
Copyright @ 2011 LANDBANK eBSD
web.xml
web.xml sample
Copyright @ 2011 LANDBANK eBSD
Basics of Spring MVC
Spring Configuration Files
web.xml All calls go through the DispatcherServlet Spring config file (*-servlet.xml by default)
*-servlet.xml Where the rest of your application components are
registered Where you define the Spring objects you need in your
application
Copyright @ 2011 LANDBANK eBSD
*-servlet.xml
Copyright @ 2011 LANDBANK eBSD
*-servlet.xml
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping what controller to call given a URL
org.springframework.web.servlet.view.InternalResourceViewResolver how to determine what view to show
org.springframework.context.support.ReloadableResourceBundleMessageSource support for blurbsorg.springframework.web.multipart.MultipartResolver
how to handle filesorg.springframework.web.servlet.HandlerExceptionResolver
what to do with an Exceptionorg.springframework.web.servlet.ThemeResolver
where to get css, images, pages fromorg.springframework.web.servlet.HandlerAdapter
wrapper around the controller (or servlet)
Spring Configuration Support Goodies
Copyright @ 2011 LANDBANK eBSD
*-servlet.xml (Handler Mapping)
Given a URL, figures out what Controller to use:
SimpleUrlHandlerMapping define mappings with Map or Properties
BeanNameUrlHandlerMapping bean names have same names as URL
CommonsPathMapHandlerMapping use Commons Attributes to determine mapping
Handling Requests with Handler Mapping
Copyright @ 2011 LANDBANK eBSD
*-servlet.xml (Messages)
Define the bean messageSource with a MessageSource to set the resources:
ResourceMessageBundleMessageSource - load messages from .properties filesReloadableResourceMessageBundleMessageSource - same as above, but reloads!StaticMessageSource - set messages within the object
The spring tag <spring:message> picks the resource
Messages/Blurbs
Copyright @ 2011 LANDBANK eBSD
*-servlet.xml (Views)
JstlView map to a JSP page
RedirectView Perform an HTTP Redirect
TilesView, TilesJstlView integration with tiles
VelocityLayoutView, VelocityToolboxView, VelocityView Integration with the Velocity templating tool
FreeMarkerView use the FreeMarker templating tool
JasperReportsView, JasperReportsMultiFormatView, JasperReportsMultiFormatView, JasperReportsPdfView, JasperReportsXlsView
Support for Jasper Reports
Different Views
Copyright @ 2011 LANDBANK eBSD
*-servlet.xml (Form Handling)
Copyright @ 2011 LANDBANK eBSD
Spring Controllers
Copyright @ 2011 LANDBANK eBSD
Spring Controllers
AbstractController basic controller, knows about caching, turning on/off get/set/post/head
ParameterizableViewController always go to the same view
UrlFileNameViewController parses the URL to return a view (http://blah/foo.html -> foo)
SimpleFormController for form handling, hooks for attaching commands, validator
AbstractWizardFormController easy wizard controller
ServletWrappingController delegates to a servlet
Spring MVC includes lots of Controllers to extend from:
Copyright @ 2011 LANDBANK eBSD
Is this picture still hazy?
Copyright @ 2011 LANDBANK eBSD
Project ExplorerSample Spring Project Artifacts
Copyright @ 2011 LANDBANK eBSD
Thank you!
Copyright @ 2011 LANDBANK eBSD
Introduction to Spring Annotations
Emmanuel S. GarciaeBSD, ADTST
Copyright @ 2011 LANDBANK eBSD
Annotations
“annotations make life easier by reducing bean registration on the Spring xml configuration file”
e.garcia
Copyright @ 2011 LANDBANK eBSD
Annotations*-servlet.xml configurations
Copyright @ 2011 LANDBANK eBSD
Annotations
@Controller
Copyright @ 2011 LANDBANK eBSD
Annotations
The @Controller annotation is used to mark any java class as a controller
The @RequestMapping annotation is used to map the web request "/userRegistration.htm" to the UserController class.
The @SessionAttributes annotation is used to store the model object in the session. In our case the model object is user
In the controller class you need to specify two methods, one for handling the HTTP GET request and the other for handling the HTTP POST request. The @RequestMapping(method) annotation is used to indicate the type of HTTP request
Notes:
Copyright @ 2011 LANDBANK eBSD
Annotations
@Controller
Copyright @ 2011 LANDBANK eBSD
Annotations
Copyright @ 2011 LANDBANK eBSD
Annotations
@Controller
@ModelAttribute
Copyright @ 2011 LANDBANK eBSD
Annotations
@Controller
@ModelAttribute
Copyright @ 2011 LANDBANK eBSD
Annotations
@Autowired
Dependency Injection Overview
Copyright @ 2011 LANDBANK eBSD
Annotations
@Autowired
Dependency Injection Overview
Copyright @ 2011 LANDBANK eBSD
Annotations
@Autowired
Dependency Injection Overview
Copyright @ 2011 LANDBANK eBSD
Annotations
@AutowiredDependency Injection Overview Summary
Java components / classes should be as independent as possible of other Java classes. This increases the possibility to reuse these classes and to test them independently of other classes(Unit Testing). To decouple Java components from other Java components the dependency to a certain other class should get injected into them rather that the class itself instantiates this object.
Class A has a dependency to class B if class uses class B as a variable.
If dependency injection is used then the class B is given to class A via the constructor of the class A - this is then called construction injectiona setter - this is then called setter injection
The general concept between dependency injection is called Inversion of Control. A class should not configure itself but should be configured from outside.
Copyright @ 2011 LANDBANK eBSD
Annotations
@Autowired
Copyright @ 2011 LANDBANK eBSD
Annotations
@Autowired
Dependency Injection in Spring
@Autowired - autowires by type @Qualifier - provide more specific autowiring behavior if there will be multiple beans of the same type in the IoC container /spring xml file (e.g. multiple data source beans connecting to different DBs) @Configurable - used to mark a class eligible for Spring dependency injection, but it's typically used with classes instantiated outside of the IoC container @Resource - autowires by name and is from JSR-250, which is the specification for Commons Annotations
Copyright @ 2011 LANDBANK eBSD
AnnotationsAnnotations from org.springframework.stereotype
Annotation Target Description
@Component Class Indicates this class is eligible for registration as a Spring bean when detected by a classpath scanner (context:component-scan).
@Controller ClassIndicates this class is a Web Controller eligible for registration as a Spring bean when detected by a classpath scanner (context:component-scan). It is a specialized form of @Component.
@Repository ClassIndicates this class is a Repository (DAO) eligible for registration as a Spring bean when detected by a classpath scanner (context:component-scan). It is a specialized form of @Component.
@Service ClassIndicates this class is a Service (business service facade) eligible for registration as a Spring bean when detected by a classpath scanner (context:component-scan). It is a specialized form of @Component.
Copyright @ 2011 LANDBANK eBSD
AnnotationsAnnotations from org.springframework.context.annotation
Annotation Target Description
@Scope Class Indicates scope of the bean
Copyright @ 2011 LANDBANK eBSD
Thank you!
Copyright @ 2011 LANDBANK eBSD
Sources• http://mhimu.wordpress.com/2007/11/27/spring-mvc-tutorial/• http://mhimu.wordpress.com/2009/11/16/spring-mvc-tutorial-
hibernate-integration/• http://www.vaannila.com/spring/spring-mvc-tutorial-1.html• http://www.vaannila.com/spring/spring-annotation-controller-1.html• http://www.vogella.de/articles/SpringDependencyInjection/
article.html• http://www.goospoos.com/2009/12/spring-mvc-application-flow-with-
diagram/• http://www.springsource.com• http://www.springindepth.com• http://tutorials.jenkov.com/dependency-injection/index.html