Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… ·...

25
1 April 05 Prof. Ismael H. F. Santos - [email protected] 1 Modulo I Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - [email protected] 2 Spring in Action Craig Walls and Ryan Breidenbach Professional Java Development with Spring Rod Johnson, Juergen Hoeller and Team Bibliografia

Transcript of Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… ·...

Page 1: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

1

April 05 Prof. Ismael H. F. Santos - [email protected] 1

Modulo I Frameworks Web

Prof. Ismael H F Santos

April 05 Prof. Ismael H. F. Santos - [email protected] 2

Spring in ActionCraig Walls and Ryan Breidenbach

Professional Java Development with SpringRod Johnson, Juergen Hoeller and Team

Bibliografia

Page 2: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

2

April 05 Prof. Ismael H. F. Santos - [email protected] 3

Ementa

Modelos MVC (Model View Controller) e MVC2Application LayeringComparação Frameworks Web

April 05 Prof. Ismael H. F. Santos - [email protected] 4

ModelosMVC e MVC2

WebApp

Page 3: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

3

April 05 Prof. Ismael H. F. Santos - [email protected] 5

Arquitetura MVC

Divide a aplicação em trespartes fundamentais

Model – Representa os dados da aplicação e as regras de negócio (business logic) View – Representa a informação recebida e enviada ao usuárioController – Recebe as informações da entrada e controla o fluxo da aplicação

Surgiu nos anos 80 com a linguagem SmallTalk

April 05 Prof. Ismael H. F. Santos - [email protected] 6

MVC original

O padrão de arquitetura MVC(model-view-controller) surgiu na comunidade smalltalk.

Criado por Trygve Reenskaug no fim dos anos 70 Usado no desenvolvimento de aplicações desktop por facilitar o desenvolvimento em camadas de aplicações que usam a orientação a objetos

Page 4: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

4

April 05 Prof. Ismael H. F. Santos - [email protected] 7

MVC Next – Steve Jobs

A next (Steve Jobs), resolveu modificar esse modelo oferecendo uma alternativa para sua linguagem de programação objective-c.

Delega a responsabilidade de observar o modelo para a camada de Controller que, por sua vez, envia para a camada de visão as alterações ao invés da camada de View obter esses dados do Model.

April 05 Prof. Ismael H. F. Santos - [email protected] 8

MVC Model 2 Com o crescimento das aplicações web baseadas no protocolo HTTP que é sem estado, não temos mais uma sessão permanentemente aberta entre o cliente e o servidor. Além disso o HTTP não prevê uma forma de “enviar” (push) informações do servidor para o cliente.

Isto impede o trabalho do Controller que não pode mais enviar informações para a View sem ser solicitado. Para contornar o problema a Suncriou o MVC Model 2, baseado no padrão FrontController.

Agora a camada Controller submete ações tentando acompanhar o processo de request-response do protocolo HTTP ao invés de observar a camada Model, criando um fluxo linear para a arquitetura das aplicações.

Page 5: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

5

April 05 Prof. Ismael H. F. Santos - [email protected] 9

Padrão Front ControllerPadrão que consolida todas as requisições web em um único objeto manipulador, despachando o tratamento adequado dessas requisições conforme o comportamento esperado.

A seguir apresentamos mais detalhes do padrão

April 05 Prof. Ismael H. F. Santos - [email protected] 10

Implementação do MVC para Web

Page 6: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

6

April 05 Prof. Ismael H. F. Santos - [email protected] 11

JSP Model I - Centrado em páginas

April 05 Prof. Ismael H. F. Santos - [email protected] 12

JSP Model II - Centrado em servlet

Page 7: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

7

April 05 Prof. Ismael H. F. Santos - [email protected] 13

Como implementar ?

April 05 Prof. Ismael H. F. Santos - [email protected] 14

Pattern Command (GoF)

Page 8: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

8

April 05 Prof. Ismael H. F. Santos - [email protected] 15

Pattern Command (GoF)

April 05 Prof. Ismael H. F. Santos - [email protected] 16

FrontController + Command

Page 9: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

9

April 05 Prof. Ismael H. F. Santos - [email protected] 17

Exemplo de Implementação –hellojsp_2

April 05 Prof. Ismael H. F. Santos - [email protected] 18

Mapemamentos de comandos ou ações

Page 10: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

10

April 05 Prof. Ismael H. F. Santos - [email protected] 19

Comandos ou ações (Service to Worker)

April 05 Prof. Ismael H. F. Santos - [email protected] 20

Data Access Objects (DAO)

Page 11: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

11

April 05 Prof. Ismael H. F. Santos - [email protected] 21

Controlador (FrontController)

April 05 Prof. Ismael H. F. Santos - [email protected] 22

ValueBean ViewHelper (Model)

Page 12: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

12

April 05 Prof. Ismael H. F. Santos - [email protected] 23

Pagina JSP (View) com custom tags

April 05 Prof. Ismael H. F. Santos - [email protected] 24

Application Layering

WebApp

Page 13: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

13

April 05 Prof. Ismael H. F. Santos - [email protected] 25

Application LayeringA clear separation of application component responsibility.

Presentation layerConcentrates on request/response actionsHandles UI rendering from a model. Contains formatting logic and non-business related validation logic.Handles exceptions thrown from other layers

Persistence layerUsed to communicate with a persistence store such as a relational DBProvides a query languagePossible O/R mapping capabilities

JDBC, Hibernate, iBATIS, JDO, Entity Beans, etc.Domain layer

Contains business objects that are used across above layers.Contain complex relationships between other domain objectsMay be rich in business logicMay have ORM mappingsDomain objects should only have dependencies on other domain objs

April 05 Prof. Ismael H. F. Santos - [email protected] 26

Application Layering (cont)

Where do we code business logic?Domain objects

Heavy domain model / thin service layer approachBusiness logic is embedded in domain objectsTakes advantage of OO programmingBehavior rich domain model

Service LayerThin domain model / heavy service layer approachWraps procedural business logic over domain objectsAnti-pattern according to Fowler – ‘Anemic Domain Model’Provides a separation of business logic concerns from the domain modelTreats the domain model as ORM objects

Page 14: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

14

April 05 Prof. Ismael H. F. Santos - [email protected] 27

Application Layering (cont)

More Architectural decisions…How do we achieve independent layers of code that can provide clear separation, loose coupling, and allow communication with each other?How can we design an architecture that can allow layer replacement without affecting existing layers?What technologies, and frameworks, should be implemented in each layer? How will we implement security? Will the application be flexible to technology changes?How will the application handle enterprise level services such as transactions, security, logging, resource pooling, profiling, etc?

April 05 Prof. Ismael H. F. Santos - [email protected] 28

Application Layering (cont)

Service layerGateway to expose business logic to the outside worldManages ‘container level services’ such as transactions, security, data access logic, and manipulates domain objectsNot well defined in many applications today or tightly coupled in an inappropriate layer.

Page 15: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

15

April 05 Prof. Ismael H. F. Santos - [email protected] 29

Service Layer

• Where do we position loosely-coupled business logic? What is service logic?

• How should container level services be implemented?

• How do we support transactions in a POJO based application?

• How do we communicate from our presentation layer to our persistence layer?

• How do we get to services that contain business logic?

• How should our business objects communicate with our persistence layer?

• How do we get objects retrieved from our persistence layer to our UI layer?

April 05 Prof. Ismael H. F. Santos - [email protected] 30

More about the Service LayerOften tightly coupled with other layers

Struts is not where you place business logic and persistence logic!

The missing link IMHO in most applications today.EJB – SLSB, SFSB provide the common J2EE business layer enterprise solutions for transactions within a container. What about POJO?Hand code transaction logic with JTAFrameworks – Spring, Picocontainer, HiveMind, etc.Lighterweight containers use

IoC/Dependency InjectionAOP

Page 16: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

16

April 05 Prof. Ismael H. F. Santos - [email protected] 31

Real World EJB Usage

Stateless Session Beans (SLSBs)One of the easiest beans to program, but still want to program with POJOs.Local interfaces alleviate remote interface performance issues.Used as facades to other objectsAllows developers to provide declarative transaction management.

Message Driven Beans (MDBs)Easy to programProvides asynchronous messaging

Distributed Transaction ManagementRMI RemotingHow do we get the benefits of EJB without using an EJB container?

April 05 Prof. Ismael H. F. Santos - [email protected] 32

Proposed Web App Layering

Page 17: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

17

April 05 Prof. Ismael H. F. Santos - [email protected] 33

More Application Layering Combinations

Presentation/Business/PersistenceStruts+Spring+HibernateStruts + Spring + EJBJavaServer Faces + Spring + iBATISSpring + Spring + JDOFlex + Spring + HibernateStruts + Spring + JDBC

You decide…

April 05 Prof. Ismael H. F. Santos - [email protected] 34

ComparaçãoWebApp

Page 18: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

18

April 05 Prof. Ismael H. F. Santos - [email protected] 35

Comparação entre Framewoks Web

Struts - http://struts.apache.orgPros:

The “Standard” - lots of Struts jobsLots of information and examplesHTML tag library is one of the best

Cons:ActionForms - they’re a painCan’t unit test - StrutsTestCase only does integrationMailing list volume is overwhelming

April 05 Prof. Ismael H. F. Santos - [email protected] 36

Comparação entre Framewoks Web

Spring MVC - http://www.springframework.orgPros:

Lifecyle for overriding binding, validation, etc.Integrates with many view options seamlessly: JSP/JSTL,Tiles, Velocity, FreeMarker, Excel, XSL, PDFInversion of Control makes it easy to test

Cons:Not many using itRequires writing lots of code in JSPsAlmost too flexible - no common parent Controller

Page 19: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

19

April 05 Prof. Ismael H. F. Santos - [email protected] 37

Comparação entre Framewoks Web

WebWork - http://opensymphony.org/webworkPros:

Simple architecture - easy to extendTag Library is easy to customize - backed by VelocityInterceptors are pretty slick

Cons:Documentation only recently written, few examplesClient-side validation immature

April 05 Prof. Ismael H. F. Santos - [email protected] 38

Comparação entre Framewoks Web

Tapestry - http://jakarta.apache.org/tapestryPros:

Very productive once you learn itTemplates are HTML - great for designersHealthy and smart user community

Cons:Documentation very conceptual, rather thanpragmaticSteep learning curve - very few examplesImpossible to test - page classes are abstract

Page 20: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

20

April 05 Prof. Ismael H. F. Santos - [email protected] 39

Comparação entre Framewoks Web

JSF - http://java.sun.com/j2ee/javaserverfaces & http://myfaces.org

Pros:J2EE Standard - lots of demand and jobsFast and easy to develop with Rich Navigationframework

Cons:Tag soup for JSPsImmature technology - doesn’t come with everythingNo single source for implementation

April 05 Prof. Ismael H. F. Santos - [email protected] 40

Controllers and ViewsStruts:

UserAction extends DispatchActionSpring MVC:

UserFormController extends SimpleFormControllerWebWork:

UserAction extends ActionSupportTapestry:

UserForm extends BasePageJSF:

UserForm

Page 21: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

21

April 05 Prof. Ismael H. F. Santos - [email protected] 41

List Screens

How easy is it to integrate a sortable/pageablelist of data?

Struts, Spring MVC and WebWorkall use Tag Libraries like the Display Tag

Tapestry has a contrib:Table component

JSF has a dataTable with no sorting – have to write yourown logic if you want it

April 05 Prof. Ismael H. F. Santos - [email protected] 42

Bookmarking and URLsUsing container-managed authentication (or otherfilterbased security systems) allow users to bookmark pages. They can click the bookmark, login and go directlyto the page.WebWork

has namespaces - makes it easyStruts and Spring

allow full URL controlTapestry

has ugly URLs - difficult to segment the app for differentroles

JSF does a POST for everything

Page 22: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

22

April 05 Prof. Ismael H. F. Santos - [email protected] 43

ValidationValidation should be easy to configure, be robust on theclient side and either provide good out of the boxmessages or allow you to easily customize them.Struts and Spring MVC

use Commons Validator – a mature solutionWebWork

uses OGNL for powerful expressions - client-side supportvery new

Tapestryhas very robust validation - good messages without need to customize

JSFugly default messages, but easiest to configure

April 05 Prof. Ismael H. F. Santos - [email protected] 44

TestabilityStruts

can use StrutsTestCaseSpring and WebWork

allow easy testing with mocks (i.e. EasyMock, jMock, Spring Mocks)

Tapestryis impossible to test because page classes are abstract

JSF page classes can be easily tested and actually look a lotlike WebWork actions

Page 23: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

23

April 05 Prof. Ismael H. F. Santos - [email protected] 45

Success MessagesThe duplicate-post problem, what is it?

Easiest way to solve: redirect after POSTStruts

is the only framework that allows success messages to livethrough a redirect

Spring and WebWorkrequire custom solutions

Tapestryrequires you to throw an Exception to redirect

JSF requires a custom solution, i18n messages difficult to get in page beans

April 05 Prof. Ismael H. F. Santos - [email protected] 46

Spring Integration

All frameworks have integration with SpringStruts:

ContextLoaderPlugin and Base classesWebWork:

SpringObjectFactoryTapestry:

override base engine, grab from servlet context, put into global map

JSF: DelegateVariableResolver or JSF-Spring Library

Page 24: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

24

April 05 Prof. Ismael H. F. Santos - [email protected] 47

Internationalization

JSTL’s <fmt:message> tag makes it easyNo standard for getting i18n messages in controller classesStruts, Spring and JSF

encourage one ResourceBundle per localeWebWork and Tapestry

advocate separate files for each page/action

April 05 Prof. Ismael H. F. Santos - [email protected] 48

Page Decoration

Used Tiles since it first came out in 2001SiteMesh is much easier to setup and useTiles can be used in:

Struts, Spring and JSFRequires configuration for each pageSiteMesh can be used with all frameworks

Requires very little maintenance after setup

Page 25: Modulo I Frameworks Webwebserver2.tecgraf.puc-rio.br/.../Modulo1_FrameworksWeb/0-Frame… · Frameworks Web Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

25

April 05 Prof. Ismael H. F. Santos - [email protected] 49

ToolsStruts

has a lot of IDE support and even has frameworks built ontop of it (i.e. Beehive’s PageFlow)

Spring has Spring IDE, only does XML validation, not a UI/web tool

WebWorkhas none

Tapestryhas Spindle - great for coders

JSF has many, all cost money and hook into proprietary appservers