SlideShare a Scribd company logo
1 of 35
Download to read offline
Dr. AndersonV. de Araújo
about.me/andvicoso
A intenção aqui não é definir qual é o
MELHOR framework MVC para Java web
É dar opções!
Falar um pouco de cada e mostrar exemplos
em código
Foco no Controller
Matt Raible
Compara frameworks desde 2004
Links para algumas comparações dele no final
Servlets 3.X
JSF 2.X
Struts2
Spring MVC
VRaptor
Play!
Podemos fazer os mapeamentos (Servlets e
Filtros) usando anotações!
UHUUU!
Controller
Deve estender de HttpServlet
Deve ser mapeado a uma URL (XML ou anotações)
Pontos positivos:
Padrão Java EE
Bastante difundido (1.0 em 1997)
Bom para o aprendizado de conceitos básicos:
▪ Request, response, session, parameter, filter, ...
Pontos negativos:
Pegar parâmetros da requisição
Validação
Mensagens/Internacionalização
Etc (muita coisa ruim aqui)
@WebServlet(urlPatterns = { "/view/user/add.do" })
public class AddUserServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest pReq, HttpServletResponse pResp)
throws ServletException, IOException {
String name = pReq.getParameter("name");
String phone = pReq.getParameter("phone");
boolean valid = StringUtils.isNotBlank(name) &&
StringUtils.isNotBlank(phone);
if (valid) {
User user = new User();
user.setName(name);
user.setPhone(phone);
UserDao dao = new UserDaoJPA();//Poderia ser injetada!
dao.create(user);
}
pResp.sendRedirect(valid ? "list.do" : "add.do");
}
}
Component-based framework
Controller:
Todos devem ser anotados com @ManagedBean para
serem visíveis na view
Deve ser anotado com uma anotação de escopo na
qual o bean vai estar disponível
▪ @NoneScoped, @RequestScoped, @ViewScoped,
@SessionScoped, @ApplicationScoped e @CustomScope
Os métodos do managed bean são acessíveis na view
(xhtml) através das tags do JSF
Pontos positivos:
Padrão Java EE
Bastante difundido (1.0 em 2004)
Alta empregabilidade (ainda)
Várias bibliotecas de componentes disponíveis
Facilidade no uso de componentes ricos e “Ajax”
Pontos negativos:
Sopa de tags no jsps
▪ Pode ser ruim para designers
Muito acoplamento entreView e Controller
Chato de testar
“Aprende” menos CSS, HTML e JS
FacesContext.getCurrentInstance().getExternalContext()
@ManagedBean
@ViewScoped //Poderia ser outro escopo
public class UserController implements Serializable {
private UserDao dao;
private User user;
@PostConstruct
public void init() {
user = new User();
dao = new UserDaoJPA();//Poderia ser injetada!
}
public String add() {
dao.create(user);
user = new User();
return "list";
}
//getters e setters omitidos
<html xmlns=http://www.w3.org/1999/xhtml
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head><title>Cadastro de usuários</title></h:head>
<h:body>
<h1>Cadastro de Usuário</h1><br />
<h:messages />
<h:form>
<h:panelGrid columns="2">
<h:outputText value="Nome" />
<h:inputText value="#{userController.user.name}" />
<h:outputText value="Telefone" />
<h:inputText value="#{userController.user.phone}" />
<h:outputText value="Login" />
<h:inputText value="#{userController.user.login}" />
<h:outputText value="Password" />
<h:inputSecret value="#{userController.user.password}" />
<h:commandButton action="#{userController.add}" value="Cadastrar"/>
</h:panelGrid>
</h:form>
</h:body>
</html>
Action-based framework
Junção do Struts com oWebWork
Configuração:
Antigamente tinha muita em XML
Atualmente boa parte pode ser feita usando anotações
Convention Plugin (CP) facilita muito a vida
Convention over configuration (coding by convention)
Controller:
Convention Plugin:
▪ Deve conter um pacote com um dos nomes: struts, struts2, action ou
actions. Nele devem estar as actions
▪ Os paths são definidos por pacotes na hierarquia
As actions devem ser anotadas com @Action(“url”)
Os resultados (retornos) são definidos com @Result
Em geral, estendem de ActionSupport
Pontos positivos:
Bastante difundido (1.0 – 2000, 2.0 - 2007)
Alta empregabilidade (ainda)
Vários plugins: Bootstrap, Convention, JQuery, ...
▪ Com tags de componentes (pode ser um ponto negativo)
Interceptor
Pontos negativos:
Pode ter sopa de tags no jsps
Documentação muito espalhada e mal organizada
▪ Fácil confundir com a versão 1 em uma “googlada”
Pode ter muito XML na configuração, além do properties
@Results({ @Result(name = "success",
type = "redirectAction", params = {"actionName", "list”}),
@Result(name = "input", location = "add.jsp") })
public class AddUserAction extends ActionSupport {
private User user = new User();
@Action("add")
public String add() {
return INPUT;
}
@Action("put")
public String put() {
UserDao dao = new UserDaoJPA();//Poderia ser injetada!
dao.create(user);
return SUCCESS;
}
//getters e setters omitidos
}
Action-based framework
As características do Spring podem ser
utilizadas independentemente (DI, Aspects, ...)
Webservices RESTful podem ser criados através
de anotações.
Controller:
Classe deve ser anotada com @Controller
Método de ação deve ser anotado com
@RequestMapping(“url")
Parâmetros com @RequestParam
Pontos positivos:
Fácil aprendizado
Não precisa de getters e setters como Struts2 e JSF
Fácil aprendizado
▪ Forma de redirecionamento, REST, validação , e
internacionalização são bem fáceis
Comunidade crescendo rapidamente
Pontos negativos:
Pode ter muito XML na configuração
▪ Configuração com anotações ainda muito incipiente
Requer experiência pra configurar inicialmente
@Controller
public class UserController {
@Inject
private UserDao dao;//injetado
@RequestMapping(value = "/user/put", method =
RequestMethod.POST)
public String put(@ModelAttribute User user) {
dao.create(user);
return “redirect:/user/list”;
}
@RequestMapping(value = “/user/add")
public String add() {
return “user/add";
}
}
Caelum
Cursos e apostilas
Brasileiro!
Nasceu em 2003 no IME-USP
Convention over Configuration
Controller:
Deve ser anotado com @Resource e o nome da classe
deve terminar com Controller
Ex.: FuncionarioController.
O path de acesso fica “/funcionario/{nomeDoMetodo}”
O método pode ser anotado com @Path para alterar
Pontos Positivos:
Documentação em português!
Fácil aprendizado
▪ Forma de redirecionamento, REST, validação , injeção de
dependências e internacionalização são bem fáceis
Não precisa de getters e setters como o Struts2 e JSF
Interceptor
Pontos Negativos:
Baixa utilização fora do Brasil
Comunidade pequena
Baixa empregabilidade
@Resource
public class UserController {
private UserDao dao;
private Result result;
private Validator validator;
public UserController(UserDao dao, Result result, Validator validator) {
this.dao = dao;
this.result = result;
this.validator = validator;
}
@Get
public void add() {}
@Post
public void put(User user) {
validator.checking(getValidations(user, false));
validator.onErrorUsePageOf(UserController.class).add();
dao.create(user);
result.redirectTo(this).list();
}
private Validations getValidations(final User user, final boolean isEdit) {
return new Validations() {{
that(StringUtils.isNotBlank(user.getName()), "error", "name.empty");
that(StringUtils.isNotBlank(user.getPhone()), "error", "phone.empty");
}};
}}
Vamos aos fatos!
Servlets** JSF Struts 2 Spring MVC
Livros (Amazon.com) 1,104 334 690 149
Linked in Skills 144k (-7) 77k (-5%) 161k (-10%) 494k***
(+5%)
Índice de pesquisa do
Google EUA (jun13)
5 34 11 14
* vraptor - É zero ou não foi possível pesquisar.
** Difícil de mensurar, pode ser utilizado em conjunto com outras tecnologias.
*** Foi possível a pesquisa apenas por Spring.
Importância dos
frameworks pelos
desenvolvedores
-InfoQ (EUA, Jun13)
Ordem
Matt`s
Weighted
TheServerSide
Java Symposium
The Rich Web
Experience
(RWX) 2010
Devoxx
2010
1 Grails Grails Grails GWT
2 Play GWT GWT Rails
3 Spring MVC Rails Rails Spring MVC
4 Rails / Vaadin Spring MVC Spring MVC Grails
5 GWT Vaadin Tapestry / Vaadin Wicket / Struts 2
Quem disse que seria fácil?
Que tipo de aplicação que você está
construindo?
Projeto Comunitário?
Manutenção
CaracterísticasTécnicas
Não acredite piamente em blogs e artigos
Tente você mesmo!
Acredite desenvolvedores, não evangelistas
Aqueles que têm experiência com o framework e
tenham usado em produção
Cuidado com os interesses corporativos
Os livros são um bom sinal!
Sempre!
Frameworks têm pontos fracos – a sua
aplicação é/possui um deles?
Escolha 2-3 frameworks para o seu tipo de
aplicação ... e protótipo!
Se a prototipagem for dolorosa, mude!
Depois de prototipar, pare e compare os
frameworks
Não tenha medo de:
Experimentar novos frameworks
Usar frameworks antigos
Manter o seu framework existente
Não existe MELHOR framework;
É ótimo ter competição!
Os desenvolvedores deveriam saber mais de
um framework
Você deve tentar um framework antes de ficar
falando mal dele
Fazer uma boa pesquisa pode economizar
tempo e dinheiro no futuro
Matt Raible
Comparative table;
Esta apresentação no slideshare;
http://www.slideshare.net/andvicoso/como-
escolher-o-framework-java-para-web
http://github.com/andvicoso
http://andvicoso.blogspot.com
Perguntas?
about.me/andvicoso

More Related Content

What's hot

Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsIgo Coelho
 
JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010Eder Magalhães
 
Spring Security e Spring Boot Aula - 2018
Spring Security e Spring Boot Aula - 2018Spring Security e Spring Boot Aula - 2018
Spring Security e Spring Boot Aula - 2018André Luiz Forchesatto
 
O framework spring
O framework springO framework spring
O framework springBruno Catão
 
JSF com Primefaces
JSF com PrimefacesJSF com Primefaces
JSF com PrimefacesFabio Noth
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysDr. Spock
 
Jsf com hibernate, spring security e maven
Jsf com hibernate, spring security e mavenJsf com hibernate, spring security e maven
Jsf com hibernate, spring security e mavenLeandro Costa
 
JavaServer Faces Produtividade em Desenvolvimento
JavaServer Faces Produtividade em DesenvolvimentoJavaServer Faces Produtividade em Desenvolvimento
JavaServer Faces Produtividade em DesenvolvimentoEduardo Bregaida
 
Desenvolvimento Web com CakePHP
Desenvolvimento Web com CakePHPDesenvolvimento Web com CakePHP
Desenvolvimento Web com CakePHPSérgio Vilar
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysDr. Spock
 
Anatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesAnatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesRafael Ponte
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendThiago Sinésio
 
Curso Java Web (JAVA, JSF, JPA)
Curso Java Web (JAVA, JSF, JPA)Curso Java Web (JAVA, JSF, JPA)
Curso Java Web (JAVA, JSF, JPA)Marcos Batista
 

What's hot (20)

Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e Servlets
 
JavaFX 1.2
JavaFX 1.2JavaFX 1.2
JavaFX 1.2
 
Aula parte 2 de JSF 2.2
Aula parte 2 de JSF 2.2Aula parte 2 de JSF 2.2
Aula parte 2 de JSF 2.2
 
JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010
 
Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018
 
Spring Security e Spring Boot Aula - 2018
Spring Security e Spring Boot Aula - 2018Spring Security e Spring Boot Aula - 2018
Spring Security e Spring Boot Aula - 2018
 
O framework spring
O framework springO framework spring
O framework spring
 
JSF com Primefaces
JSF com PrimefacesJSF com Primefaces
JSF com Primefaces
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToys
 
Introdução a jsf
Introdução a jsfIntrodução a jsf
Introdução a jsf
 
Framework web 3 - JSF + Spring boot
Framework web 3 - JSF + Spring bootFramework web 3 - JSF + Spring boot
Framework web 3 - JSF + Spring boot
 
Jsf com hibernate, spring security e maven
Jsf com hibernate, spring security e mavenJsf com hibernate, spring security e maven
Jsf com hibernate, spring security e maven
 
JavaServer Faces Produtividade em Desenvolvimento
JavaServer Faces Produtividade em DesenvolvimentoJavaServer Faces Produtividade em Desenvolvimento
JavaServer Faces Produtividade em Desenvolvimento
 
Desenvolvimento Web com CakePHP
Desenvolvimento Web com CakePHPDesenvolvimento Web com CakePHP
Desenvolvimento Web com CakePHP
 
Apresentação JSF
Apresentação JSFApresentação JSF
Apresentação JSF
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToys
 
Introdução Play framework
Introdução Play frameworkIntrodução Play framework
Introdução Play framework
 
Anatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesAnatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer Faces
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
 
Curso Java Web (JAVA, JSF, JPA)
Curso Java Web (JAVA, JSF, JPA)Curso Java Web (JAVA, JSF, JPA)
Curso Java Web (JAVA, JSF, JPA)
 

Viewers also liked

Apostila Java Web com JSF, JPA e Primefaces
Apostila Java Web com JSF, JPA e PrimefacesApostila Java Web com JSF, JPA e Primefaces
Apostila Java Web com JSF, JPA e PrimefacesRosicleia Frasson
 
Persistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPAPersistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPACaelum
 
Implementando aplicativos Web com JSF
Implementando aplicativos Web com JSF Implementando aplicativos Web com JSF
Implementando aplicativos Web com JSF Otávio Santana
 
ruby on rails e o mercado
ruby on rails e o mercadoruby on rails e o mercado
ruby on rails e o mercadoelliando dias
 
Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...
Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...
Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...Fernando Godóy
 
Dicas e Truques sobre Performance em Java EE, JPA e JSF
Dicas e Truques sobre Performance em Java EE, JPA e JSFDicas e Truques sobre Performance em Java EE, JPA e JSF
Dicas e Truques sobre Performance em Java EE, JPA e JSFDr. Spock
 
Software de qualidade e qualidade de código
Software de qualidade e qualidade de códigoSoftware de qualidade e qualidade de código
Software de qualidade e qualidade de códigoGuilherme Silveira
 
Java pra web mais fácil com MVC
Java pra web mais fácil com MVCJava pra web mais fácil com MVC
Java pra web mais fácil com MVCCecilia Fernandes
 
Apostila Java Web (Servlets e JSPs)
Apostila Java Web (Servlets e JSPs)Apostila Java Web (Servlets e JSPs)
Apostila Java Web (Servlets e JSPs)Ricardo Terra
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1ariovaldodias
 
Introdução à análise orientada a objetos parte 6
Introdução à análise orientada a objetos parte 6Introdução à análise orientada a objetos parte 6
Introdução à análise orientada a objetos parte 6ariovaldodias
 
Componentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkComponentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkFlávio Lisboa
 
Apresentação Introdução Design Patterns
Apresentação Introdução Design PatternsApresentação Introdução Design Patterns
Apresentação Introdução Design PatternsLucas Simões Maistro
 

Viewers also liked (20)

Apostila Java Web com JSF, JPA e Primefaces
Apostila Java Web com JSF, JPA e PrimefacesApostila Java Web com JSF, JPA e Primefaces
Apostila Java Web com JSF, JPA e Primefaces
 
3way curso-formacao-java-web-completo
3way curso-formacao-java-web-completo3way curso-formacao-java-web-completo
3way curso-formacao-java-web-completo
 
Persistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPAPersistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPA
 
Implementando aplicativos Web com JSF
Implementando aplicativos Web com JSF Implementando aplicativos Web com JSF
Implementando aplicativos Web com JSF
 
Framework usar ou não usar
Framework usar ou não usarFramework usar ou não usar
Framework usar ou não usar
 
ruby on rails e o mercado
ruby on rails e o mercadoruby on rails e o mercado
ruby on rails e o mercado
 
Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...
Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...
Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...
 
Tutorial struts
Tutorial strutsTutorial struts
Tutorial struts
 
Maven na prática
Maven na práticaMaven na prática
Maven na prática
 
Dicas e Truques sobre Performance em Java EE, JPA e JSF
Dicas e Truques sobre Performance em Java EE, JPA e JSFDicas e Truques sobre Performance em Java EE, JPA e JSF
Dicas e Truques sobre Performance em Java EE, JPA e JSF
 
Software de qualidade e qualidade de código
Software de qualidade e qualidade de códigoSoftware de qualidade e qualidade de código
Software de qualidade e qualidade de código
 
Java pra web mais fácil com MVC
Java pra web mais fácil com MVCJava pra web mais fácil com MVC
Java pra web mais fácil com MVC
 
Apostila Java Web (Servlets e JSPs)
Apostila Java Web (Servlets e JSPs)Apostila Java Web (Servlets e JSPs)
Apostila Java Web (Servlets e JSPs)
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1
 
4
44
4
 
Framework
FrameworkFramework
Framework
 
Introdução à análise orientada a objetos parte 6
Introdução à análise orientada a objetos parte 6Introdução à análise orientada a objetos parte 6
Introdução à análise orientada a objetos parte 6
 
Componentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkComponentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada framework
 
Patterns
PatternsPatterns
Patterns
 
Apresentação Introdução Design Patterns
Apresentação Introdução Design PatternsApresentação Introdução Design Patterns
Apresentação Introdução Design Patterns
 

Similar to Como escolher o melhor framework Java para web

Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer FacesEduardo Bregaida
 
JSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaJSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaEduardo Bregaida
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebElenilson Vieira
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 
JavaScript Model-View no Frontend
JavaScript Model-View no FrontendJavaScript Model-View no Frontend
JavaScript Model-View no FrontendHenrique Gogó
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Frameworkelliando dias
 
Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6danielfcampos
 
Spring & Struts
Spring & StrutsSpring & Struts
Spring & Strutseduan
 
ASP.NET MVC Mini Curso
ASP.NET MVC Mini CursoASP.NET MVC Mini Curso
ASP.NET MVC Mini CursoVinicius Rocha
 
Novidades de Java EE 7
Novidades de Java EE 7Novidades de Java EE 7
Novidades de Java EE 7pt_programar
 
Apresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáApresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáZarathon Maia
 
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Rafael Ponte
 
Apresentação sobre MVVMC
Apresentação sobre MVVMCApresentação sobre MVVMC
Apresentação sobre MVVMCAlisson Agiani
 
Minha aplicação Java vai pra nuvem. E agora?
Minha aplicação Java vai pra nuvem. E agora?Minha aplicação Java vai pra nuvem. E agora?
Minha aplicação Java vai pra nuvem. E agora?Felipe Mamud
 

Similar to Como escolher o melhor framework Java para web (20)

Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer Faces
 
JSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaJSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.java
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias Web
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
JavaScript Model-View no Frontend
JavaScript Model-View no FrontendJavaScript Model-View no Frontend
JavaScript Model-View no Frontend
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
 
Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6
 
Apache Struts
Apache StrutsApache Struts
Apache Struts
 
Spring & Struts
Spring & StrutsSpring & Struts
Spring & Struts
 
ASP.NET MVC Mini Curso
ASP.NET MVC Mini CursoASP.NET MVC Mini Curso
ASP.NET MVC Mini Curso
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
Tutorial Dwr - Configuração e Uso
Tutorial Dwr - Configuração e UsoTutorial Dwr - Configuração e Uso
Tutorial Dwr - Configuração e Uso
 
Java13
Java13Java13
Java13
 
Novidades de Java EE 7
Novidades de Java EE 7Novidades de Java EE 7
Novidades de Java EE 7
 
Apresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáApresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc Quixadá
 
JSF & REST
JSF & RESTJSF & REST
JSF & REST
 
Jheat
JheatJheat
Jheat
 
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
 
Apresentação sobre MVVMC
Apresentação sobre MVVMCApresentação sobre MVVMC
Apresentação sobre MVVMC
 
Minha aplicação Java vai pra nuvem. E agora?
Minha aplicação Java vai pra nuvem. E agora?Minha aplicação Java vai pra nuvem. E agora?
Minha aplicação Java vai pra nuvem. E agora?
 

Como escolher o melhor framework Java para web

  • 1. Dr. AndersonV. de Araújo about.me/andvicoso
  • 2. A intenção aqui não é definir qual é o MELHOR framework MVC para Java web É dar opções! Falar um pouco de cada e mostrar exemplos em código Foco no Controller Matt Raible Compara frameworks desde 2004 Links para algumas comparações dele no final
  • 4. Podemos fazer os mapeamentos (Servlets e Filtros) usando anotações! UHUUU! Controller Deve estender de HttpServlet Deve ser mapeado a uma URL (XML ou anotações)
  • 5. Pontos positivos: Padrão Java EE Bastante difundido (1.0 em 1997) Bom para o aprendizado de conceitos básicos: ▪ Request, response, session, parameter, filter, ... Pontos negativos: Pegar parâmetros da requisição Validação Mensagens/Internacionalização Etc (muita coisa ruim aqui)
  • 6. @WebServlet(urlPatterns = { "/view/user/add.do" }) public class AddUserServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest pReq, HttpServletResponse pResp) throws ServletException, IOException { String name = pReq.getParameter("name"); String phone = pReq.getParameter("phone"); boolean valid = StringUtils.isNotBlank(name) && StringUtils.isNotBlank(phone); if (valid) { User user = new User(); user.setName(name); user.setPhone(phone); UserDao dao = new UserDaoJPA();//Poderia ser injetada! dao.create(user); } pResp.sendRedirect(valid ? "list.do" : "add.do"); } }
  • 7. Component-based framework Controller: Todos devem ser anotados com @ManagedBean para serem visíveis na view Deve ser anotado com uma anotação de escopo na qual o bean vai estar disponível ▪ @NoneScoped, @RequestScoped, @ViewScoped, @SessionScoped, @ApplicationScoped e @CustomScope Os métodos do managed bean são acessíveis na view (xhtml) através das tags do JSF
  • 8. Pontos positivos: Padrão Java EE Bastante difundido (1.0 em 2004) Alta empregabilidade (ainda) Várias bibliotecas de componentes disponíveis Facilidade no uso de componentes ricos e “Ajax” Pontos negativos: Sopa de tags no jsps ▪ Pode ser ruim para designers Muito acoplamento entreView e Controller Chato de testar “Aprende” menos CSS, HTML e JS FacesContext.getCurrentInstance().getExternalContext()
  • 9. @ManagedBean @ViewScoped //Poderia ser outro escopo public class UserController implements Serializable { private UserDao dao; private User user; @PostConstruct public void init() { user = new User(); dao = new UserDaoJPA();//Poderia ser injetada! } public String add() { dao.create(user); user = new User(); return "list"; } //getters e setters omitidos
  • 10. <html xmlns=http://www.w3.org/1999/xhtml xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"> <h:head><title>Cadastro de usuários</title></h:head> <h:body> <h1>Cadastro de Usuário</h1><br /> <h:messages /> <h:form> <h:panelGrid columns="2"> <h:outputText value="Nome" /> <h:inputText value="#{userController.user.name}" /> <h:outputText value="Telefone" /> <h:inputText value="#{userController.user.phone}" /> <h:outputText value="Login" /> <h:inputText value="#{userController.user.login}" /> <h:outputText value="Password" /> <h:inputSecret value="#{userController.user.password}" /> <h:commandButton action="#{userController.add}" value="Cadastrar"/> </h:panelGrid> </h:form> </h:body> </html>
  • 11. Action-based framework Junção do Struts com oWebWork Configuração: Antigamente tinha muita em XML Atualmente boa parte pode ser feita usando anotações Convention Plugin (CP) facilita muito a vida Convention over configuration (coding by convention) Controller: Convention Plugin: ▪ Deve conter um pacote com um dos nomes: struts, struts2, action ou actions. Nele devem estar as actions ▪ Os paths são definidos por pacotes na hierarquia As actions devem ser anotadas com @Action(“url”) Os resultados (retornos) são definidos com @Result Em geral, estendem de ActionSupport
  • 12. Pontos positivos: Bastante difundido (1.0 – 2000, 2.0 - 2007) Alta empregabilidade (ainda) Vários plugins: Bootstrap, Convention, JQuery, ... ▪ Com tags de componentes (pode ser um ponto negativo) Interceptor Pontos negativos: Pode ter sopa de tags no jsps Documentação muito espalhada e mal organizada ▪ Fácil confundir com a versão 1 em uma “googlada” Pode ter muito XML na configuração, além do properties
  • 13. @Results({ @Result(name = "success", type = "redirectAction", params = {"actionName", "list”}), @Result(name = "input", location = "add.jsp") }) public class AddUserAction extends ActionSupport { private User user = new User(); @Action("add") public String add() { return INPUT; } @Action("put") public String put() { UserDao dao = new UserDaoJPA();//Poderia ser injetada! dao.create(user); return SUCCESS; } //getters e setters omitidos }
  • 14. Action-based framework As características do Spring podem ser utilizadas independentemente (DI, Aspects, ...) Webservices RESTful podem ser criados através de anotações. Controller: Classe deve ser anotada com @Controller Método de ação deve ser anotado com @RequestMapping(“url") Parâmetros com @RequestParam
  • 15. Pontos positivos: Fácil aprendizado Não precisa de getters e setters como Struts2 e JSF Fácil aprendizado ▪ Forma de redirecionamento, REST, validação , e internacionalização são bem fáceis Comunidade crescendo rapidamente Pontos negativos: Pode ter muito XML na configuração ▪ Configuração com anotações ainda muito incipiente Requer experiência pra configurar inicialmente
  • 16. @Controller public class UserController { @Inject private UserDao dao;//injetado @RequestMapping(value = "/user/put", method = RequestMethod.POST) public String put(@ModelAttribute User user) { dao.create(user); return “redirect:/user/list”; } @RequestMapping(value = “/user/add") public String add() { return “user/add"; } }
  • 17. Caelum Cursos e apostilas Brasileiro! Nasceu em 2003 no IME-USP Convention over Configuration Controller: Deve ser anotado com @Resource e o nome da classe deve terminar com Controller Ex.: FuncionarioController. O path de acesso fica “/funcionario/{nomeDoMetodo}” O método pode ser anotado com @Path para alterar
  • 18. Pontos Positivos: Documentação em português! Fácil aprendizado ▪ Forma de redirecionamento, REST, validação , injeção de dependências e internacionalização são bem fáceis Não precisa de getters e setters como o Struts2 e JSF Interceptor Pontos Negativos: Baixa utilização fora do Brasil Comunidade pequena Baixa empregabilidade
  • 19. @Resource public class UserController { private UserDao dao; private Result result; private Validator validator; public UserController(UserDao dao, Result result, Validator validator) { this.dao = dao; this.result = result; this.validator = validator; } @Get public void add() {} @Post public void put(User user) { validator.checking(getValidations(user, false)); validator.onErrorUsePageOf(UserController.class).add(); dao.create(user); result.redirectTo(this).list(); } private Validations getValidations(final User user, final boolean isEdit) { return new Validations() {{ that(StringUtils.isNotBlank(user.getName()), "error", "name.empty"); that(StringUtils.isNotBlank(user.getPhone()), "error", "phone.empty"); }}; }}
  • 21. Servlets** JSF Struts 2 Spring MVC Livros (Amazon.com) 1,104 334 690 149 Linked in Skills 144k (-7) 77k (-5%) 161k (-10%) 494k*** (+5%) Índice de pesquisa do Google EUA (jun13) 5 34 11 14 * vraptor - É zero ou não foi possível pesquisar. ** Difícil de mensurar, pode ser utilizado em conjunto com outras tecnologias. *** Foi possível a pesquisa apenas por Spring.
  • 22.
  • 23.
  • 25.
  • 26.
  • 27. Ordem Matt`s Weighted TheServerSide Java Symposium The Rich Web Experience (RWX) 2010 Devoxx 2010 1 Grails Grails Grails GWT 2 Play GWT GWT Rails 3 Spring MVC Rails Rails Spring MVC 4 Rails / Vaadin Spring MVC Spring MVC Grails 5 GWT Vaadin Tapestry / Vaadin Wicket / Struts 2
  • 28. Quem disse que seria fácil?
  • 29. Que tipo de aplicação que você está construindo? Projeto Comunitário? Manutenção CaracterísticasTécnicas
  • 30. Não acredite piamente em blogs e artigos Tente você mesmo! Acredite desenvolvedores, não evangelistas Aqueles que têm experiência com o framework e tenham usado em produção Cuidado com os interesses corporativos Os livros são um bom sinal! Sempre!
  • 31. Frameworks têm pontos fracos – a sua aplicação é/possui um deles? Escolha 2-3 frameworks para o seu tipo de aplicação ... e protótipo! Se a prototipagem for dolorosa, mude! Depois de prototipar, pare e compare os frameworks
  • 32. Não tenha medo de: Experimentar novos frameworks Usar frameworks antigos Manter o seu framework existente
  • 33. Não existe MELHOR framework; É ótimo ter competição! Os desenvolvedores deveriam saber mais de um framework Você deve tentar um framework antes de ficar falando mal dele Fazer uma boa pesquisa pode economizar tempo e dinheiro no futuro
  • 34. Matt Raible Comparative table; Esta apresentação no slideshare; http://www.slideshare.net/andvicoso/como- escolher-o-framework-java-para-web http://github.com/andvicoso http://andvicoso.blogspot.com