SlideShare una empresa de Scribd logo
1 de 16
Struts 2 + Spring Aug 19th, 2009 Bryan Hsueh
Agenda ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Layer Architecture ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Spring Modules Core Struts or Spring MVC Context Web AOP JMS JCA DAO ORM (Hibernate) JMX … … DB browser
Model-View-Controller Controller Model DB Business Service Object Front Controller Servlet Controller View JSP Browser Server API getXyz()
Model-View-Controller ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Struts 2 DB * One way of interpreting Struts 2 MVC. Why put Action in Model?
A Simple POJO (case A) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],public class  User  { private String name; private String gender; private Date birth; public String getName() { return name; } void setName(String s) { name = s; }  public Date getBirth() { ... } void setBirth(Date d) { ... } public String getGender() { ... } void setGender(String s) { ... } Could use simple POJO as Action in Struts 2
In struts.xml <action name=“user_add&quot; class=&quot; xxx.User &quot; method=&quot; add &quot;>  <result>/jsp/user.jsp</result> <result name=“error”>/jsp/error.jsp</result> </action>  <action name=“user_delete&quot; class=&quot; xxx.User &quot; method=“ update &quot;>  <result>/jsp/user.jsp</result>  </action>  <action name=“user_login&quot; class=&quot; xxx.User &quot; method=“ login &quot;>  <result name=“ success ”>/jsp/user.jsp</result> <result name=“ error ”>error.jsp</result> </action> <action name=“user_ * &quot; class=&quot; xxx.User &quot; method=“ {1} &quot;>  <result>/jsp/user.jsp</result> <result name=“error”>/jsp/error.jsp</result> </action>
The Action in Struts 2 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
ActionSupport class (case B) public class  UserAction  extends  ActionSupport { private User user; private String name; private String gender; private Date birth; public String getName() { return name; } void setName(String s) { name = s; }  public Date getBirth() { ... } void setBirth(Date d) { ... } public String getGender() { ... } void setGender(String s) { ... } public class  ActionSupport   implements  Action ,  Validateable ,  ValidationAware ,  TextProvider ,  LocaleProvider ,  Serializable public String  add () { user.add();   .... return “success”; } public String  update () { user.update(); .... return “success”; } public String  login () { user.login(); .... if (ok) return “success”; else return “error”; } } Decouple business service from web layer
In struts.xml <action name=“user_add&quot; class=&quot; xxx.UserAction &quot; method=&quot; add &quot;>  <result>/jsp/user.jsp</result> <result name=“ error ”>/jsp/error.jsp</result> </action>  <action name=“user_delete&quot; class=&quot; xxx.UserAction &quot; method=“ update &quot;>  <result>/jsp/user.jsp</result>  </action>  <action name=“user_login&quot; class=&quot; xxx.UserAction &quot; method=“ login &quot;>  <result name=“ success ”>/jsp/user.jsp</result> <result name=“ error ”>error.jsp</result> </action> <action name=“user_ * &quot; class=&quot; xxx.UserAction &quot; method=“ {1} &quot;>  <result>/jsp/user.jsp</result> <result name=“error”>/jsp/error.jsp</result> </action>
Service and DTO (case C) public class  UserAction  extends ActionSupport { private  AccountService accountService; private  User user; public AccountService  getAccountServic () { return user; } void  setAccountServic (AccountService s) { accountService = s; } public User  getUser () { return user; } void  setUser (User u) { user = u; } public String  add () { accountService.add(user);   .... return “success”; } public String  update () { accountService.update(user); .... return “success”; } public String  login () { accountService.login(user); .... if (ok) return “success”; else return “error”; } } Use Business Service and DTO (Data Transfer Object)
Service and DTO ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],public class  User  { private String name; private String gender; private Date birth; public String getName() { return name; } void setName(String s) { name = s; }  public Date getBirth() { ... } void setBirth(Date d) { ... } public String getGender() { ... } void setGender(String s) { ... } } DTO: simple Java bean, reduce overhead Business Service Object:  - implement business logic and provide service API to upper layers - managed by container - usually fewer service objects than DTOs - use Data Access Object (DAO) to get data (DTO) from DB
Web and Business Layers DB Business Service Object Web Service, XML-RPC, etc. * Business layer should not tie to web layer framework. Spring MVC Struts
Integration between layers ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

Más contenido relacionado

La actualidad más candente

Executing Sql Commands
Executing Sql CommandsExecuting Sql Commands
Executing Sql Commands
phanleson
 
ASPNET_MVC_Tutorial_06_CS
ASPNET_MVC_Tutorial_06_CSASPNET_MVC_Tutorial_06_CS
ASPNET_MVC_Tutorial_06_CS
tutorialsruby
 
Introduction to Everit Component Registry - B Zsoldos
Introduction to Everit Component Registry - B ZsoldosIntroduction to Everit Component Registry - B Zsoldos
Introduction to Everit Component Registry - B Zsoldos
mfrancis
 

La actualidad más candente (18)

Behavioral pattern 4
Behavioral pattern 4Behavioral pattern 4
Behavioral pattern 4
 
TY.BSc.IT Java QB U1
TY.BSc.IT Java QB U1TY.BSc.IT Java QB U1
TY.BSc.IT Java QB U1
 
ADO.NET Entity Framework by Jose A. Blakeley and Michael Pizzo
ADO.NET Entity Framework by Jose A. Blakeley and Michael PizzoADO.NET Entity Framework by Jose A. Blakeley and Michael Pizzo
ADO.NET Entity Framework by Jose A. Blakeley and Michael Pizzo
 
Executing Sql Commands
Executing Sql CommandsExecuting Sql Commands
Executing Sql Commands
 
MongoDB Stitch Tutorial
MongoDB Stitch TutorialMongoDB Stitch Tutorial
MongoDB Stitch Tutorial
 
MVC on the Server and on the Client: How to Integrate Spring MVC and Backbone...
MVC on the Server and on the Client: How to Integrate Spring MVC and Backbone...MVC on the Server and on the Client: How to Integrate Spring MVC and Backbone...
MVC on the Server and on the Client: How to Integrate Spring MVC and Backbone...
 
#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구...
#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구...#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구...
#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구...
 
DOM and Events
DOM and EventsDOM and Events
DOM and Events
 
A GWT Application with MVP Pattern Deploying to CloudFoundry using Spring Roo
A GWT Application with MVP Pattern Deploying to CloudFoundry using  Spring Roo A GWT Application with MVP Pattern Deploying to CloudFoundry using  Spring Roo
A GWT Application with MVP Pattern Deploying to CloudFoundry using Spring Roo
 
Android Testing
Android TestingAndroid Testing
Android Testing
 
The jOOQ Talk at the JUG-HH in Hamburg, Jan 14, 2014
The jOOQ Talk at the JUG-HH in Hamburg, Jan 14, 2014The jOOQ Talk at the JUG-HH in Hamburg, Jan 14, 2014
The jOOQ Talk at the JUG-HH in Hamburg, Jan 14, 2014
 
Introduction to Struts 2
Introduction to Struts 2Introduction to Struts 2
Introduction to Struts 2
 
ASPNET_MVC_Tutorial_06_CS
ASPNET_MVC_Tutorial_06_CSASPNET_MVC_Tutorial_06_CS
ASPNET_MVC_Tutorial_06_CS
 
Introduction to Everit Component Registry - B Zsoldos
Introduction to Everit Component Registry - B ZsoldosIntroduction to Everit Component Registry - B Zsoldos
Introduction to Everit Component Registry - B Zsoldos
 
Jasig Cas High Availability - Yale University
Jasig Cas High Availability -  Yale UniversityJasig Cas High Availability -  Yale University
Jasig Cas High Availability - Yale University
 
How to implement golang jwt authentication and authorization
How to implement golang jwt authentication and authorizationHow to implement golang jwt authentication and authorization
How to implement golang jwt authentication and authorization
 
Metaworks3
Metaworks3Metaworks3
Metaworks3
 
AJAX
AJAXAJAX
AJAX
 

Destacado

Destacado (20)

Hybernat and structs, spring classes in mumbai
Hybernat and structs, spring classes in mumbaiHybernat and structs, spring classes in mumbai
Hybernat and structs, spring classes in mumbai
 
jsp, javaserver pages, Card20
jsp, javaserver pages, Card20jsp, javaserver pages, Card20
jsp, javaserver pages, Card20
 
Build Java Web Application Using Apache Struts
Build Java Web Application Using Apache Struts Build Java Web Application Using Apache Struts
Build Java Web Application Using Apache Struts
 
Struts Basics
Struts BasicsStruts Basics
Struts Basics
 
Spring MVC - Web Forms
Spring MVC  - Web FormsSpring MVC  - Web Forms
Spring MVC - Web Forms
 
Testing Spring MVC and REST Web Applications
Testing Spring MVC and REST Web ApplicationsTesting Spring MVC and REST Web Applications
Testing Spring MVC and REST Web Applications
 
Struts Ppt 1
Struts Ppt 1Struts Ppt 1
Struts Ppt 1
 
Boostrap - Start Up
Boostrap - Start UpBoostrap - Start Up
Boostrap - Start Up
 
Authentication and Authorization
Authentication and AuthorizationAuthentication and Authorization
Authentication and Authorization
 
Node.js căn bản
Node.js căn bảnNode.js căn bản
Node.js căn bản
 
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho ltNetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
 
Building RESTful applications using Spring MVC
Building RESTful applications using Spring MVCBuilding RESTful applications using Spring MVC
Building RESTful applications using Spring MVC
 
Spring MVC - The Basics
Spring MVC -  The BasicsSpring MVC -  The Basics
Spring MVC - The Basics
 
Front end architecture
Front end architectureFront end architecture
Front end architecture
 
Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)
 
JSP Standard Tag Library
JSP Standard Tag LibraryJSP Standard Tag Library
JSP Standard Tag Library
 
#jjug_ccc #ccc_gh5 What's new in Spring Framework 4.3 / Boot 1.4 + Pivotal's ...
#jjug_ccc #ccc_gh5 What's new in Spring Framework 4.3 / Boot 1.4 + Pivotal's ...#jjug_ccc #ccc_gh5 What's new in Spring Framework 4.3 / Boot 1.4 + Pivotal's ...
#jjug_ccc #ccc_gh5 What's new in Spring Framework 4.3 / Boot 1.4 + Pivotal's ...
 
C++ Standard Template Library
C++ Standard Template LibraryC++ Standard Template Library
C++ Standard Template Library
 
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)
 
Tools For jQuery Application Architecture (Extended Slides)
Tools For jQuery Application Architecture (Extended Slides)Tools For jQuery Application Architecture (Extended Slides)
Tools For jQuery Application Architecture (Extended Slides)
 

Similar a Struts 2 + Spring

Liferay Training Struts Portlet
Liferay Training Struts PortletLiferay Training Struts Portlet
Liferay Training Struts Portlet
Saikrishna Basetti
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet
Sagar Nakul
 

Similar a Struts 2 + Spring (20)

Struts Overview
Struts OverviewStruts Overview
Struts Overview
 
Struts2
Struts2Struts2
Struts2
 
Migrating from Struts 1 to Struts 2
Migrating from Struts 1 to Struts 2Migrating from Struts 1 to Struts 2
Migrating from Struts 1 to Struts 2
 
Os Leonard
Os LeonardOs Leonard
Os Leonard
 
Android best practices
Android best practicesAndroid best practices
Android best practices
 
Introducing Struts 2
Introducing Struts 2Introducing Struts 2
Introducing Struts 2
 
Codemotion appengine
Codemotion appengineCodemotion appengine
Codemotion appengine
 
DWR, Hibernate and Dojo.E - A Tutorial
DWR, Hibernate and Dojo.E - A TutorialDWR, Hibernate and Dojo.E - A Tutorial
DWR, Hibernate and Dojo.E - A Tutorial
 
ActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group PresentationActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group Presentation
 
Data binding w Androidzie
Data binding w AndroidzieData binding w Androidzie
Data binding w Androidzie
 
Interoperable Web Services with JAX-WS
Interoperable Web Services with JAX-WSInteroperable Web Services with JAX-WS
Interoperable Web Services with JAX-WS
 
What's Coming in Spring 3.0
What's Coming in Spring 3.0What's Coming in Spring 3.0
What's Coming in Spring 3.0
 
Javascript Design Patterns
Javascript Design PatternsJavascript Design Patterns
Javascript Design Patterns
 
Introduction to Spring MVC
Introduction to Spring MVCIntroduction to Spring MVC
Introduction to Spring MVC
 
Struts2
Struts2Struts2
Struts2
 
Liferay Training Struts Portlet
Liferay Training Struts PortletLiferay Training Struts Portlet
Liferay Training Struts Portlet
 
Struts,Jsp,Servlet
Struts,Jsp,ServletStruts,Jsp,Servlet
Struts,Jsp,Servlet
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet
 
First Failure Data Capture for your enterprise application with WebSphere App...
First Failure Data Capture for your enterprise application with WebSphere App...First Failure Data Capture for your enterprise application with WebSphere App...
First Failure Data Capture for your enterprise application with WebSphere App...
 

Último

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Último (20)

Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Introduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDMIntroduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDM
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 

Struts 2 + Spring

  • 1. Struts 2 + Spring Aug 19th, 2009 Bryan Hsueh
  • 2.
  • 3.
  • 4. Spring Modules Core Struts or Spring MVC Context Web AOP JMS JCA DAO ORM (Hibernate) JMX … … DB browser
  • 5. Model-View-Controller Controller Model DB Business Service Object Front Controller Servlet Controller View JSP Browser Server API getXyz()
  • 6.
  • 7. Struts 2 DB * One way of interpreting Struts 2 MVC. Why put Action in Model?
  • 8.
  • 9. In struts.xml <action name=“user_add&quot; class=&quot; xxx.User &quot; method=&quot; add &quot;> <result>/jsp/user.jsp</result> <result name=“error”>/jsp/error.jsp</result> </action> <action name=“user_delete&quot; class=&quot; xxx.User &quot; method=“ update &quot;> <result>/jsp/user.jsp</result> </action> <action name=“user_login&quot; class=&quot; xxx.User &quot; method=“ login &quot;> <result name=“ success ”>/jsp/user.jsp</result> <result name=“ error ”>error.jsp</result> </action> <action name=“user_ * &quot; class=&quot; xxx.User &quot; method=“ {1} &quot;> <result>/jsp/user.jsp</result> <result name=“error”>/jsp/error.jsp</result> </action>
  • 10.
  • 11. ActionSupport class (case B) public class UserAction extends ActionSupport { private User user; private String name; private String gender; private Date birth; public String getName() { return name; } void setName(String s) { name = s; } public Date getBirth() { ... } void setBirth(Date d) { ... } public String getGender() { ... } void setGender(String s) { ... } public class ActionSupport implements Action , Validateable , ValidationAware , TextProvider , LocaleProvider , Serializable public String add () { user.add(); .... return “success”; } public String update () { user.update(); .... return “success”; } public String login () { user.login(); .... if (ok) return “success”; else return “error”; } } Decouple business service from web layer
  • 12. In struts.xml <action name=“user_add&quot; class=&quot; xxx.UserAction &quot; method=&quot; add &quot;> <result>/jsp/user.jsp</result> <result name=“ error ”>/jsp/error.jsp</result> </action> <action name=“user_delete&quot; class=&quot; xxx.UserAction &quot; method=“ update &quot;> <result>/jsp/user.jsp</result> </action> <action name=“user_login&quot; class=&quot; xxx.UserAction &quot; method=“ login &quot;> <result name=“ success ”>/jsp/user.jsp</result> <result name=“ error ”>error.jsp</result> </action> <action name=“user_ * &quot; class=&quot; xxx.UserAction &quot; method=“ {1} &quot;> <result>/jsp/user.jsp</result> <result name=“error”>/jsp/error.jsp</result> </action>
  • 13. Service and DTO (case C) public class UserAction extends ActionSupport { private AccountService accountService; private User user; public AccountService getAccountServic () { return user; } void setAccountServic (AccountService s) { accountService = s; } public User getUser () { return user; } void setUser (User u) { user = u; } public String add () { accountService.add(user); .... return “success”; } public String update () { accountService.update(user); .... return “success”; } public String login () { accountService.login(user); .... if (ok) return “success”; else return “error”; } } Use Business Service and DTO (Data Transfer Object)
  • 14.
  • 15. Web and Business Layers DB Business Service Object Web Service, XML-RPC, etc. * Business layer should not tie to web layer framework. Spring MVC Struts
  • 16.