SlideShare a Scribd company logo
Spring Web
MVC
By: Zeeshan Hanif
Sr. Software Engineer
Etilize Pvt. Ltd.
A GfK Product data company
Agenda
 What is spring MVC
 Features
 Spring MVC Workflow
 Important Components of Spring MVC
 Demo – External configuration
 Demo – Annotation
 Convention over Configuration
 World without Rules
 Demo – Form Submission
 Demo – Session Storage
 Demo – REST based URL
 Demo – Ajax
Prerequisite
 Spring Core
 IOC & Dependency Injection
Source: www.springsource.org
Spring MVC
 The Spring Web MVC Framework is a
robust, flexible, and well-designed
framework for rapidly developing web
applications using the MVC design
pattern.
Features
 Clear separation of roles. Each role —
controller, validator, command object,
form object, model object, handler
mapping, view resolver and so on.
 Powerful and straightforward
configuration of both framework and
application classes as JavaBeans
 Adaptability and flexibility. Define any
controller method signature you need for
a given scenario
Features (cont.)
 Use existing business objects as command
or form objects instead of mirroring them
to extend a particular framework base
class
 Flexible model transfer. Model transfer
with a name/value Map supports easy
integration with any view technology
 A simple yet powerful JSP tag library
 Easier testing
 REST based URL support
Spring MVC Workflow
Source: www.springsource.org
Important Components
 DispatcherServlet
 Controller
 HandlerMapping/@RequestMapping
 ModelAndView
 Model & @ModelAttribute
 ViewResolver
DispatcherServlet
 The Dispatcher Servlet follows the Front
Controller Design Pattern for handling
Client Requests.
 It means that whatever Url comes from
the Client, this Servlet will intercept the
Client Request before passing the
Request Object to the Controller.
DispatcherServlet (cont.)
<web-app>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.gfk</url-pattern>
</servlet-mapping>
</web-app>
Controller
 Controllers are components that are
being called by the Dispatcher Servlet for
doing any kind of Business Logic
 Spring Distribution already comes with a
variety of Controller Components each
doing a specific purpose - spring 2.x
 SimpleFormController
 AbstractController
 MultiActionController
 Spring 3 Controller
 @Controller Annotation
Controller (Cont.)
 Old School of Spring MVC
public class MySimpleController extends AbstractController
{
public ModelAndView handleRequestInternal
(HttpServletRequest request,
HttpServletResponse response)
{
return new ModelAndView("myView");
}
}
Controller (Cont.)
 Spring MVC 3.0
@Controller
public class DemoSpring3Controller {
@RequestMapping("/demoSpring3")
public ModelAndView helloWorld() {
String msg = "Hello Spring 3 World! Etilize -- GfK";
return new ModelAndView("demosp",
"message", msg);
}
}
<context:component-scan base-package="com.gfk.etilize.controller" />
HandlerMapping
 A Handler Mapping provides an abstract
way that tell how the Client's Url has to be
mapped to the Handlers.
 Four concrete variation of Handler
Mapping are available
 BeanNameUrl HandlerMapping
 CommonsPathMap HandlerMapping
 ControllerClassName HandlerMapping
 SimpleUrl HandlerMapping
HandlerMapping (Cont.)
 BeanNameUrl HandlerMapping
 URL request
http://localhost:8080/spweb/showStudents
 Bean Mapping
<beans>
<bean id="beanNameUrl"
class="org.springframework.web.servlet.handler.
BeanNameUrlHandlerMapping"/>
<bean name="/showStudents.jsp"
class="com.gfk.etilize.ShowStudentsController">
</bean>
</beans>
HandlerMapping (Cont.)
 SimpleUrlHandlerMapping
<bean id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHan
dlerMapping">
<property name="urlMap">
<map>
<entry key="/demoSpring.gfk">
<ref bean="demoSpringController"/>
</entry>
</map>
</property>
</bean>
<bean id="demoSpringController"
class="com.gfk.etilize.controller.DemoSpringController" />
HandlerMapping (Cont.)
 Spring 3.0 uses @RequestMapping for
Mapping
@Controller
public class DemoSpring3Controller {
@RequestMapping("/demoSpring3")
public ModelAndView helloWorld() {
String msg = "Hello Spring 3 World";
return new ModelAndView("demosp",
"message", msg);
}
}
ModelAndView
 ModelandView is returned by the
Controller object back to the Dispatcher
Servlet.
 This class is just a Container class for
holding the Model and the View
information.
 This way of specifying a View is called a
Logical View. It means that demosp either
can point to something called demosp.jsp
or demosp.pdf or demosp.xml
ModelAndView(viewName, “Key”, object);
return new ModelAndView("demosp", "message", msg);
Model & @ModelAttribute
 Model object Automatically created on
every request
@RequestMapping
public void showList(Model model){
model.addAttribute("studentList",
studentService.getAllStudents());
}
Implicitly added to Model and can be accessed with key
“student”
@RequestMapping
public Student showList(){
return studentService.getStudent();
}
Model & @ModelAttribute
@ModelAttribute – customized name
@RequestMapping
public @ModelAttribute(“stu”) Student showList(){
return studentService.getStudent();
}
@ModelAttribute – Form values
@RequestMapping("/new")
public ModelAndView getStudentForm(){
return new ModelAndView("studentForm","student",new Student());
}
<form:form action="add.gfk" method="POST" commandName=" student " >
Name:<form:input path="name" size="60" /><br>
<input type="submit" value="Register" /></td>
</form:form>
@RequestMapping
public void saveStudent(@ModelAttribute Student stu){
studentService.saveStudent(stu);
}
View Resolver
 The mapping between the Logical name
and the Physical View Location is taken
care by the View Resolver object.
 Spring comes with a set of Built-In Spring
Resolvers.
 We can write Custom View Resolvers by
implementing the
org.springframework.web.servlet.ViewResolver
interface
View Resolver (Cont.)
 BeanNameViewResolver
 FreeMarkerViewResolver
 InternalResourceViewResolver
 JasperReportsViewResolver
 ResourceBundleViewResolver
 UrlBasedViewResolver
 VelocityLayoutViewResolver
 VelocityViewResolver
 XmlViewResolver
 XsltViewResolver
View Resolver (Cont.)
 InternalResourceViewResolver
Controller returns - new ModelAndView("myView1")
<bean id="viewResolver“
class="org.springframework.web.servlet.view.InternalResourceVie
wResolver">
<property name="prefix">
<value>/WEB-INF/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
the prefix + the logical View Name + the suffix
/WEB-INF/myView.jsp
View Resolver (Cont.)
 BeanNameViewResolver
 One of the dis-advantage of
using InternalResourceViewResolver is that
the name of the View file (jsp or pdf) must
be present in the Web Application Context.
 Dynamically generated View files may not
be possible.
 In such a case, we may use the BeanName
ViewResolver which will dynamically
generate View in Pdf or Excel Formats.
View Resolver (Cont.)
Controller returns - new ModelAndView(“excel")
<bean id="beanNameResolver"
class="org.springframework.web.servlet.view.BeanNameViewReso
lver"/>
<bean id = “excel" class = "MyExcelGenerator"/>
Demo – External configuration
Demo – Annotation
Convention over Configuration
 Write less code, get consistency
 Conventions available for
 Request mapping
 View name selection
 Model population
Convention over Configuration
 Mapping By RequestMapping
@Controller
public class DemoSpring3Controller {
@RequestMapping("/demoSpring3")
public void helloWorld(){}
}
Convention over Configuration
@Controller
public class StudentController {
@RequestMapping
public void listAll(Model model){
model.addAttribute(new Student("Test",23));
}
}
GET /student/listAll
Mapping of class and
method name
View with method name
selected from request path
Model key generated from object type
Convention over Configuration
 Mapping By Convention
@Controller
public class StudentController {
URL  /student/showList , View  showList.jsp
@RequestMapping
public void showList(Model model){}
URL  /student/getStudent, View  getStudent.jsp
@RequestMapping
public Student getStudent(){
…
return stu;
}
}
World without Rules
 Return Type?
 Return Type Can be:
 ModelAndViewObject
 Model
 Map
 View
 String
 Void
 Any Custom or built-in datatype
 e.g. Student, Student[],ArrayList etc.
World without Rules (Cont.)
 Parameter Type?
 Parameter can be in any order:
 ServletRequest/HttpServletRequest
 ServletResponse/HttpServletResponse
 HttpSession
 InputStream/java.io.Reader
 OutputStream/java.io.Writer
 @RequestParam("product") int id or any type
 @PathVariable String name or any type
 @CookieValue("cookie_name") String or any type
 @RequestHeader("content") String or any type
 @ModelAttribute User us or any custom object
 Errors
 BindingResult
 SessionStatus
Demo – Form Submission
@RequestParam
 Type Conversion
@RequestMapping("/login")
public void login(@RequestParam String userName,
@RequestParam int age){
}
 Optional Request parameter -- must use
object for optional
@RequestMapping("/login")
public void login(@RequestParam(required=false) String
userName){
}
Demo – @RequestParam
@SessionAttribute
@Controller
@SessionAttributes("user")
public class LoginController {
@RequestMapping("/login")
public User login(@RequestParam int id){
return loginService.login(id);
}
}
User Object will be stored in session with key “user”
Demo – @SessionAttribute
@PathVariable – REST URLs
 GET /students/find/5
@RequestMapping(“/find/{id}")
public ModelAndView findStudent(@PathVariable int id ,
Model model){
model.addAttribute("stu", studentService.getStudent(id));
return new ModelAndView("searchStudent");
}
Demo – @PathVariable – REST URLs
Demo – Ajax
 @ResponseBody annotation instructs
Spring MVC to serialize the Student to the
client.
 Spring MVC automatically serializes to
JSON because the client accepts that
content type
@RequestMapping(value="/student")
public @ResponseBody Student getStudent(
@RequestParam int id) {
return studentService.getStudent(id);
}
Q & A
 Source Code
http://www.4shared.com/zip/sHRtnXXd/De
moSpringMVC.html
 You can find this presentation on
slideshare
http://www.slideshare.net/zeeshanhanif
Contact
zeeshanhanif@gmail.com
http://www.linkedin.com/in/zeeshanhanif
http://www.facebook.com/zeeshanhanif

More Related Content

What's hot

Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
Antoine Rey
 
Spring boot introduction
Spring boot introductionSpring boot introduction
Spring boot introduction
Rasheed Waraich
 
Spring Boot Tutorial
Spring Boot TutorialSpring Boot Tutorial
Spring Boot Tutorial
Naphachara Rattanawilai
 
Spring Framework - Core
Spring Framework - CoreSpring Framework - Core
Spring Framework - Core
Dzmitry Naskou
 
Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introduction
Jonathan Holloway
 
Spring Data JPA from 0-100 in 60 minutes
Spring Data JPA from 0-100 in 60 minutesSpring Data JPA from 0-100 in 60 minutes
Spring Data JPA from 0-100 in 60 minutes
VMware Tanzu
 
REST APIs with Spring
REST APIs with SpringREST APIs with Spring
REST APIs with Spring
Joshua Long
 
Java Spring Framework
Java Spring FrameworkJava Spring Framework
Java Spring Framework
Mehul Jariwala
 
Introduction to Spring Boot
Introduction to Spring BootIntroduction to Spring Boot
Introduction to Spring Boot
Purbarun Chakrabarti
 
Building a REST Service in minutes with Spring Boot
Building a REST Service in minutes with Spring BootBuilding a REST Service in minutes with Spring Boot
Building a REST Service in minutes with Spring Boot
Omri Spector
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBoot
Josué Neis
 
Express js
Express jsExpress js
Express js
Manav Prasad
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
NexThoughts Technologies
 
Spring boot
Spring bootSpring boot
Spring boot
Bhagwat Kumar
 
Spring Boot
Spring BootSpring Boot
Spring Boot
koppenolski
 
Spring MVC 3.0 Framework
Spring MVC 3.0 FrameworkSpring MVC 3.0 Framework
Spring boot
Spring bootSpring boot
Spring boot
Gyanendra Yadav
 
Introduction to spring boot
Introduction to spring bootIntroduction to spring boot
Introduction to spring boot
Santosh Kumar Kar
 
Spring Core
Spring CoreSpring Core
Spring Core
Pushan Bhattacharya
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
Hùng Nguyễn Huy
 

What's hot (20)

Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Spring boot introduction
Spring boot introductionSpring boot introduction
Spring boot introduction
 
Spring Boot Tutorial
Spring Boot TutorialSpring Boot Tutorial
Spring Boot Tutorial
 
Spring Framework - Core
Spring Framework - CoreSpring Framework - Core
Spring Framework - Core
 
Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introduction
 
Spring Data JPA from 0-100 in 60 minutes
Spring Data JPA from 0-100 in 60 minutesSpring Data JPA from 0-100 in 60 minutes
Spring Data JPA from 0-100 in 60 minutes
 
REST APIs with Spring
REST APIs with SpringREST APIs with Spring
REST APIs with Spring
 
Java Spring Framework
Java Spring FrameworkJava Spring Framework
Java Spring Framework
 
Introduction to Spring Boot
Introduction to Spring BootIntroduction to Spring Boot
Introduction to Spring Boot
 
Building a REST Service in minutes with Spring Boot
Building a REST Service in minutes with Spring BootBuilding a REST Service in minutes with Spring Boot
Building a REST Service in minutes with Spring Boot
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBoot
 
Express js
Express jsExpress js
Express js
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Spring boot
Spring bootSpring boot
Spring boot
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Spring MVC 3.0 Framework
Spring MVC 3.0 FrameworkSpring MVC 3.0 Framework
Spring MVC 3.0 Framework
 
Spring boot
Spring bootSpring boot
Spring boot
 
Introduction to spring boot
Introduction to spring bootIntroduction to spring boot
Introduction to spring boot
 
Spring Core
Spring CoreSpring Core
Spring Core
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 

Similar to Spring Web MVC

Spring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topicsSpring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topics
Guy Nir
 
ASP.NET MVC Controllers & Actions
ASP.NET MVC Controllers & ActionsASP.NET MVC Controllers & Actions
ASP.NET MVC Controllers & Actionsonsela
 
Spring MVC Basics
Spring MVC BasicsSpring MVC Basics
Spring MVC Basics
Bozhidar Bozhanov
 
Backbone js
Backbone jsBackbone js
Backbone js
Rohan Chandane
 
Building Modern Websites with ASP.NET by Rachel Appel
Building Modern Websites with ASP.NET by Rachel AppelBuilding Modern Websites with ASP.NET by Rachel Appel
Building Modern Websites with ASP.NET by Rachel Appel
.NET Conf UY
 
ASP .net MVC
ASP .net MVCASP .net MVC
ASP .net MVC
Divya Sharma
 
Asp.net mvc
Asp.net mvcAsp.net mvc
Asp.net mvc
erdemergin
 
Build your website with angularjs and web apis
Build your website with angularjs and web apisBuild your website with angularjs and web apis
Build your website with angularjs and web apis
Chalermpon Areepong
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
nagarajupatangay
 
angularJs Workshop
angularJs WorkshopangularJs Workshop
angularJs Workshop
Ran Wahle
 
Controllers & actions
Controllers & actionsControllers & actions
Controllers & actionsEyal Vardi
 
Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5
Tuna Tore
 
springmvc-150923124312-lva1-app6892
springmvc-150923124312-lva1-app6892springmvc-150923124312-lva1-app6892
springmvc-150923124312-lva1-app6892Tuna Tore
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
Knoldus Inc.
 
Asp.NET MVC
Asp.NET MVCAsp.NET MVC
Asp.NET MVC
vrluckyin
 
Introduction to Spring MVC
Introduction to Spring MVCIntroduction to Spring MVC
Introduction to Spring MVC
Richard Paul
 
Introduction to Struts 1.3
Introduction to Struts 1.3Introduction to Struts 1.3
Introduction to Struts 1.3
Ilio Catallo
 
Retrofit Web Forms with MVC & T4
Retrofit Web Forms with MVC & T4Retrofit Web Forms with MVC & T4
Retrofit Web Forms with MVC & T4
soelinn
 
Asp.Net Mvc
Asp.Net MvcAsp.Net Mvc
Asp.Net Mvc
micham
 

Similar to Spring Web MVC (20)

Spring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topicsSpring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topics
 
ASP.NET MVC Controllers & Actions
ASP.NET MVC Controllers & ActionsASP.NET MVC Controllers & Actions
ASP.NET MVC Controllers & Actions
 
Spring MVC Basics
Spring MVC BasicsSpring MVC Basics
Spring MVC Basics
 
Backbone js
Backbone jsBackbone js
Backbone js
 
Building Modern Websites with ASP.NET by Rachel Appel
Building Modern Websites with ASP.NET by Rachel AppelBuilding Modern Websites with ASP.NET by Rachel Appel
Building Modern Websites with ASP.NET by Rachel Appel
 
ASP .net MVC
ASP .net MVCASP .net MVC
ASP .net MVC
 
Asp.net mvc
Asp.net mvcAsp.net mvc
Asp.net mvc
 
Build your website with angularjs and web apis
Build your website with angularjs and web apisBuild your website with angularjs and web apis
Build your website with angularjs and web apis
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
angularJs Workshop
angularJs WorkshopangularJs Workshop
angularJs Workshop
 
Controllers & actions
Controllers & actionsControllers & actions
Controllers & actions
 
Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5
 
springmvc-150923124312-lva1-app6892
springmvc-150923124312-lva1-app6892springmvc-150923124312-lva1-app6892
springmvc-150923124312-lva1-app6892
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
Asp.NET MVC
Asp.NET MVCAsp.NET MVC
Asp.NET MVC
 
Jsf intro
Jsf introJsf intro
Jsf intro
 
Introduction to Spring MVC
Introduction to Spring MVCIntroduction to Spring MVC
Introduction to Spring MVC
 
Introduction to Struts 1.3
Introduction to Struts 1.3Introduction to Struts 1.3
Introduction to Struts 1.3
 
Retrofit Web Forms with MVC & T4
Retrofit Web Forms with MVC & T4Retrofit Web Forms with MVC & T4
Retrofit Web Forms with MVC & T4
 
Asp.Net Mvc
Asp.Net MvcAsp.Net Mvc
Asp.Net Mvc
 

Recently uploaded

Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
Paul Groth
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 

Recently uploaded (20)

Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 

Spring Web MVC

  • 1. Spring Web MVC By: Zeeshan Hanif Sr. Software Engineer Etilize Pvt. Ltd. A GfK Product data company
  • 2. Agenda  What is spring MVC  Features  Spring MVC Workflow  Important Components of Spring MVC  Demo – External configuration  Demo – Annotation  Convention over Configuration  World without Rules  Demo – Form Submission  Demo – Session Storage  Demo – REST based URL  Demo – Ajax
  • 3. Prerequisite  Spring Core  IOC & Dependency Injection
  • 5. Spring MVC  The Spring Web MVC Framework is a robust, flexible, and well-designed framework for rapidly developing web applications using the MVC design pattern.
  • 6. Features  Clear separation of roles. Each role — controller, validator, command object, form object, model object, handler mapping, view resolver and so on.  Powerful and straightforward configuration of both framework and application classes as JavaBeans  Adaptability and flexibility. Define any controller method signature you need for a given scenario
  • 7. Features (cont.)  Use existing business objects as command or form objects instead of mirroring them to extend a particular framework base class  Flexible model transfer. Model transfer with a name/value Map supports easy integration with any view technology  A simple yet powerful JSP tag library  Easier testing  REST based URL support
  • 8. Spring MVC Workflow Source: www.springsource.org
  • 9. Important Components  DispatcherServlet  Controller  HandlerMapping/@RequestMapping  ModelAndView  Model & @ModelAttribute  ViewResolver
  • 10. DispatcherServlet  The Dispatcher Servlet follows the Front Controller Design Pattern for handling Client Requests.  It means that whatever Url comes from the Client, this Servlet will intercept the Client Request before passing the Request Object to the Controller.
  • 12. Controller  Controllers are components that are being called by the Dispatcher Servlet for doing any kind of Business Logic  Spring Distribution already comes with a variety of Controller Components each doing a specific purpose - spring 2.x  SimpleFormController  AbstractController  MultiActionController  Spring 3 Controller  @Controller Annotation
  • 13. Controller (Cont.)  Old School of Spring MVC public class MySimpleController extends AbstractController { public ModelAndView handleRequestInternal (HttpServletRequest request, HttpServletResponse response) { return new ModelAndView("myView"); } }
  • 14. Controller (Cont.)  Spring MVC 3.0 @Controller public class DemoSpring3Controller { @RequestMapping("/demoSpring3") public ModelAndView helloWorld() { String msg = "Hello Spring 3 World! Etilize -- GfK"; return new ModelAndView("demosp", "message", msg); } } <context:component-scan base-package="com.gfk.etilize.controller" />
  • 15. HandlerMapping  A Handler Mapping provides an abstract way that tell how the Client's Url has to be mapped to the Handlers.  Four concrete variation of Handler Mapping are available  BeanNameUrl HandlerMapping  CommonsPathMap HandlerMapping  ControllerClassName HandlerMapping  SimpleUrl HandlerMapping
  • 16. HandlerMapping (Cont.)  BeanNameUrl HandlerMapping  URL request http://localhost:8080/spweb/showStudents  Bean Mapping <beans> <bean id="beanNameUrl" class="org.springframework.web.servlet.handler. BeanNameUrlHandlerMapping"/> <bean name="/showStudents.jsp" class="com.gfk.etilize.ShowStudentsController"> </bean> </beans>
  • 17. HandlerMapping (Cont.)  SimpleUrlHandlerMapping <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHan dlerMapping"> <property name="urlMap"> <map> <entry key="/demoSpring.gfk"> <ref bean="demoSpringController"/> </entry> </map> </property> </bean> <bean id="demoSpringController" class="com.gfk.etilize.controller.DemoSpringController" />
  • 18. HandlerMapping (Cont.)  Spring 3.0 uses @RequestMapping for Mapping @Controller public class DemoSpring3Controller { @RequestMapping("/demoSpring3") public ModelAndView helloWorld() { String msg = "Hello Spring 3 World"; return new ModelAndView("demosp", "message", msg); } }
  • 19. ModelAndView  ModelandView is returned by the Controller object back to the Dispatcher Servlet.  This class is just a Container class for holding the Model and the View information.  This way of specifying a View is called a Logical View. It means that demosp either can point to something called demosp.jsp or demosp.pdf or demosp.xml ModelAndView(viewName, “Key”, object); return new ModelAndView("demosp", "message", msg);
  • 20. Model & @ModelAttribute  Model object Automatically created on every request @RequestMapping public void showList(Model model){ model.addAttribute("studentList", studentService.getAllStudents()); } Implicitly added to Model and can be accessed with key “student” @RequestMapping public Student showList(){ return studentService.getStudent(); }
  • 21. Model & @ModelAttribute @ModelAttribute – customized name @RequestMapping public @ModelAttribute(“stu”) Student showList(){ return studentService.getStudent(); } @ModelAttribute – Form values @RequestMapping("/new") public ModelAndView getStudentForm(){ return new ModelAndView("studentForm","student",new Student()); } <form:form action="add.gfk" method="POST" commandName=" student " > Name:<form:input path="name" size="60" /><br> <input type="submit" value="Register" /></td> </form:form> @RequestMapping public void saveStudent(@ModelAttribute Student stu){ studentService.saveStudent(stu); }
  • 22. View Resolver  The mapping between the Logical name and the Physical View Location is taken care by the View Resolver object.  Spring comes with a set of Built-In Spring Resolvers.  We can write Custom View Resolvers by implementing the org.springframework.web.servlet.ViewResolver interface
  • 23. View Resolver (Cont.)  BeanNameViewResolver  FreeMarkerViewResolver  InternalResourceViewResolver  JasperReportsViewResolver  ResourceBundleViewResolver  UrlBasedViewResolver  VelocityLayoutViewResolver  VelocityViewResolver  XmlViewResolver  XsltViewResolver
  • 24. View Resolver (Cont.)  InternalResourceViewResolver Controller returns - new ModelAndView("myView1") <bean id="viewResolver“ class="org.springframework.web.servlet.view.InternalResourceVie wResolver"> <property name="prefix"> <value>/WEB-INF/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> the prefix + the logical View Name + the suffix /WEB-INF/myView.jsp
  • 25. View Resolver (Cont.)  BeanNameViewResolver  One of the dis-advantage of using InternalResourceViewResolver is that the name of the View file (jsp or pdf) must be present in the Web Application Context.  Dynamically generated View files may not be possible.  In such a case, we may use the BeanName ViewResolver which will dynamically generate View in Pdf or Excel Formats.
  • 26. View Resolver (Cont.) Controller returns - new ModelAndView(“excel") <bean id="beanNameResolver" class="org.springframework.web.servlet.view.BeanNameViewReso lver"/> <bean id = “excel" class = "MyExcelGenerator"/>
  • 27. Demo – External configuration Demo – Annotation
  • 28. Convention over Configuration  Write less code, get consistency  Conventions available for  Request mapping  View name selection  Model population
  • 29. Convention over Configuration  Mapping By RequestMapping @Controller public class DemoSpring3Controller { @RequestMapping("/demoSpring3") public void helloWorld(){} }
  • 30. Convention over Configuration @Controller public class StudentController { @RequestMapping public void listAll(Model model){ model.addAttribute(new Student("Test",23)); } } GET /student/listAll Mapping of class and method name View with method name selected from request path Model key generated from object type
  • 31. Convention over Configuration  Mapping By Convention @Controller public class StudentController { URL  /student/showList , View  showList.jsp @RequestMapping public void showList(Model model){} URL  /student/getStudent, View  getStudent.jsp @RequestMapping public Student getStudent(){ … return stu; } }
  • 32. World without Rules  Return Type?  Return Type Can be:  ModelAndViewObject  Model  Map  View  String  Void  Any Custom or built-in datatype  e.g. Student, Student[],ArrayList etc.
  • 33. World without Rules (Cont.)  Parameter Type?  Parameter can be in any order:  ServletRequest/HttpServletRequest  ServletResponse/HttpServletResponse  HttpSession  InputStream/java.io.Reader  OutputStream/java.io.Writer  @RequestParam("product") int id or any type  @PathVariable String name or any type  @CookieValue("cookie_name") String or any type  @RequestHeader("content") String or any type  @ModelAttribute User us or any custom object  Errors  BindingResult  SessionStatus
  • 34. Demo – Form Submission
  • 35. @RequestParam  Type Conversion @RequestMapping("/login") public void login(@RequestParam String userName, @RequestParam int age){ }  Optional Request parameter -- must use object for optional @RequestMapping("/login") public void login(@RequestParam(required=false) String userName){ }
  • 37. @SessionAttribute @Controller @SessionAttributes("user") public class LoginController { @RequestMapping("/login") public User login(@RequestParam int id){ return loginService.login(id); } } User Object will be stored in session with key “user”
  • 39. @PathVariable – REST URLs  GET /students/find/5 @RequestMapping(“/find/{id}") public ModelAndView findStudent(@PathVariable int id , Model model){ model.addAttribute("stu", studentService.getStudent(id)); return new ModelAndView("searchStudent"); }
  • 40. Demo – @PathVariable – REST URLs
  • 41. Demo – Ajax  @ResponseBody annotation instructs Spring MVC to serialize the Student to the client.  Spring MVC automatically serializes to JSON because the client accepts that content type @RequestMapping(value="/student") public @ResponseBody Student getStudent( @RequestParam int id) { return studentService.getStudent(id); }
  • 42. Q & A
  • 43.  Source Code http://www.4shared.com/zip/sHRtnXXd/De moSpringMVC.html  You can find this presentation on slideshare http://www.slideshare.net/zeeshanhanif