SlideShare uma empresa Scribd logo
1 de 109
Universidade Presbiteriana Mackenzie	
  
Aula	
  2:	
  Java	
  Enterprise	
  Edi3on	
  (Java	
  EE)	
  
Prof. Ms. Daniel Arndt Alves
Faculdade	
  de	
  Computação	
  e	
  Informá3ca	
  
Computação e Informática
Faculdade de
Técnicas	
  de	
  
Programação	
  Aplicada	
  III	
  
Java	
  Enterprise	
  Edi.on	
   1	
  Daniel	
  Arndt	
  Alves	
  
Tópicos	
  da	
  Aula	
  
•  Comparação	
  com	
  Alterna.vas	
  
de	
  Mercado	
  
•  Visão	
  Geral	
  da	
  Plataforma	
  
Java,	
  Enterprise	
  Edi.on	
  
– Componentes	
  
– Arquitetura	
  de	
  Aplicações	
  J2EE	
  
– Classes	
  &	
  Pacotes	
  
– APIs	
  
– Servidores	
  de	
  Suporte	
  
Java	
  Enterprise	
  Edi.on	
   2	
  Daniel	
  Arndt	
  Alves	
  
Tópicos	
  da	
  Aula	
  
•  Prá.ca	
  em	
  Java	
  EE	
  
– Revisão:	
  Servlets	
  
– Revisão:	
  JSP	
  
•  História	
  do	
  MVC	
  
•  Arquitetura	
  MVC	
  
Java	
  Enterprise	
  Edi.on	
   3	
  Daniel	
  Arndt	
  Alves	
  
Interação	
  Cliente	
  Servidor	
  na	
  Web	
  
•  Código	
  Executado	
  no	
  Cliente	
  
– Applets	
  
– JavaScript	
  
– VBScript	
  
•  Código	
  Executado	
  no	
  Servidor	
  
– CGI,	
  NSAPI,	
  ISAPI	
  
– PHP,	
  ColdFusion,	
  ASP,	
  etc.	
  
– Servlets	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   4	
  
Alterna.vas	
  para	
  Desenvolvimento	
  Web	
  
•  J2EE	
  (Java	
  PlaWorm,	
  Enterprise	
  Edi.on)	
  
•  .NET	
  
•  Django/Python	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   5	
  
Alterna.vas	
  para	
  Desenvolvimento	
  Web	
  
•  J2EE	
  (Java	
  Pla'orm,	
  Enterprise	
  Edi3on)	
  
– Código	
  fonte	
  em	
  linguagem	
  Java	
  
– Compilação	
  para	
  Bytecode	
  
– JRE	
  (Java	
  Run3me	
  Environment)	
  interpreta	
  e	
  
executa	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   6	
  
Alterna.vas	
  para	
  Desenvolvimento	
  Web	
  
•  .NET	
  
– Independente	
  de	
  linguagem	
  de	
  programação	
  (VB,	
  
C++,	
  C#,	
  ASP)	
  
– Aplicações	
  executadas	
  em	
  um	
  contâiner	
  que	
  
oferece	
  todo	
  o	
  suporte	
  necessário	
  
– U.liza	
  os	
  componentes	
  de	
  gerenciamento	
  .NET	
  
– Clientes	
  conectam-­‐se	
  via	
  ASP.NET,	
  através	
  de	
  
interfaces	
  HTML,	
  XHTML	
  ou	
  WML	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   7	
  
Alterna.vas	
  para	
  Desenvolvimento	
  Web	
  
•  Django/Python	
  
– Framerowk,	
  construído	
  em	
  linguagem	
  Python	
  
– Criado	
  com	
  base	
  no	
  Ruby	
  on	
  Rails	
  
– Linguagem	
  interpretada,	
  não	
  há	
  compilação	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   8	
  
Alterna.vas	
  para	
  Desenvolvimento	
  Web	
  
•  Qual	
  plataforma	
  u.lizar?	
  
–  Escalabilidade e processos de clientes
concorrentes: J2EE ou Django 
–  Rapidez no desenvolvimento para sistemas
pequenos e médios: .NET ou Django 
–  Sistemas grandes que exigem alta padronização
devido ao elevado número de desenvolvedores:
J2EE 
–  Sistemas grandes em geral: J2EE ou Django 
–  Sistemas pequenos ou médios que exijam um
tempo de acesso menor: .NET 
–  Sistemas comerciais pequenos ou médios: .NET	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   9	
  
Java	
  PlaWorm,	
  Enterprise	
  Edi.on	
  (Java	
  EE)	
  
•  Arquitetura	
  de	
  referência	
  
•  Plataforma	
  de	
  Tecnologias	
  
•  Desenvolvimento	
  de	
  aplicações	
  corpora.vas	
  distribuídas	
  
•  Provê	
  
–  Suporte	
  ao	
  gerenciamento	
  automá.co	
  de	
  componentes	
  
–  Infra-­‐estrutura	
  de	
  serviços	
  complexos	
  
•  Transações	
  
•  Segurança	
  
•  Persistência	
  
•  Obje.vo	
  Central	
  
–  Desenvolvedores	
  podem	
  concentrar-­‐se	
  no	
  desenvolvimento	
  da	
  
lógica	
  de	
  negócio	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   10	
  
Componentes	
  Java	
  EE	
  
•  Aplicações	
  Java	
  EE	
  
–  Cons.tuídas	
  por	
  componentes	
  
•  Componente	
  Java	
  EE	
  
–  Unidade	
  funcional	
  de	
  sosware	
  
–  Formada	
  por	
  
•  Conjunto	
  de	
  classes	
  
•  Arquivos	
  relacionados	
  
–  Pode	
  se	
  comunicar	
  com	
  outros	
  componentes	
  
–  Pode	
  ser	
  reusado	
  durante	
  a	
  construção	
  de	
  aplicações	
  
Java	
  EE	
  
–  Deve	
  seguir	
  a	
  especificação	
  Java	
  EE	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   11	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   12	
  
Modelos	
  de	
  Componente	
  Java	
  EE	
  
•  Aplicações	
  stand-­‐alone	
  
–  aplicação	
  Java	
  
–  man.dos	
  e	
  executados	
  no	
  cliente	
  
–  GUI	
  
	
  
•  Componentes	
  Web	
  
–  Servlet	
  
•  Objetos	
  Java	
  que	
  respondem	
  
requisições	
  em	
  HTTP	
  
•  Resposta	
  normalmente	
  é	
  HTML	
  
gerado	
  dinamicamente	
  
•  Man.dos	
  e	
  executados	
  no	
  servidor	
  
–  JSP	
  
•  Linguagem	
  de	
  script	
  adequada	
  para	
  
escrita	
  de	
  servlets	
  de	
  apresentação	
  
•  Applets	
  
–  Normalmente	
  executados	
  dentro	
  
do	
  browser	
  
–  Man.dos	
  pelo	
  servidor	
  e	
  
executados	
  no	
  cliente	
  
•  Enterprise	
  JavaBeans	
  (EJBs)	
  
–  componentes	
  man.dos	
  e	
  
executados	
  em	
  um	
  ambiente	
  
gerenciado	
  pelo	
  servidor	
  provê:	
  	
  
•  Monitoramento	
  transacional	
  
•  Persistência	
  
•  Distribuição	
  de	
  objetos	
  
•  Segurança	
  
–  Não	
  são	
  JavaBeans!	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   13	
  
•  A	
  especificação	
  Java	
  EE	
  define	
  os	
  seguintes	
  
componentes	
  Java	
  EE:	
  
Exemplos	
  de	
  Componentes	
  Java	
  EE	
  
•  Componentes	
  Clientes	
  
– Applets	
  
– Aplicações	
  java	
  Satand-­‐Alone	
  
•  Componentes	
  Web	
  
– Servlets	
  
– JSPs	
  
•  Componentes	
  EJB	
  
– Session	
  Beans	
  
– Message-­‐Driven	
  Beans	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   14	
  
Arquitetura	
  de	
  Aplicações	
  Java	
  EE	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   15	
  
Servidores	
  Java	
  EE	
  
•  Componentes	
  Java	
  EE	
  são	
  instalados	
  em	
  
servidores	
  	
  
•  Servidores	
  
–  Oferecem	
  infra-­‐estrutura	
  para	
  gerenciamento	
  do	
  ciclo	
  
de	
  vida	
  dos	
  componentes	
  
–  Incluem	
  containers	
  Web	
  e	
  EJB	
  
–  Provêem	
  diversos	
  serviços	
  para	
  os	
  componentes	
  
•  Transações	
  
•  Persistência	
  
•  Segurança	
  
•  Nomes	
  
•  Distribuição	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   16	
  
Java	
  EE	
  –	
  Tecnologias	
  Associadas	
  
•  Panacéia	
  de	
  tecnologias	
  
– Ambientes	
  de	
  desenvolvimento	
  
– Servidores	
  de	
  aplicação	
  
– Frameworks	
  de	
  apoio	
  ao	
  desenvolvimento	
  
– Padrões	
  de	
  Projeto	
  
– Ferramentas	
  de	
  geração	
  de	
  código	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   17	
  
APIs	
  do	
  J2EE	
  
•  O	
  Container	
  também	
  implementa	
  APIs	
  J2EE	
  
– APIs	
  J2SE:	
  stand-­‐alone	
  (bibliotecas	
  simples)	
  
– APIs	
  J2EE:	
  maior	
  dependência	
  de	
  serviços	
  
•  XML-­‐RPC:	
  exige	
  server	
  HTTP	
  
•  JMS:	
  exige	
  middleware	
  de	
  mensagens	
  
•  Connector:	
  exige	
  bridges	
  com	
  outros	
  sistemas	
  
•  EJB:	
  exige	
  servidor	
  RMI/IIOP	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   18	
  
APIs	
  do	
  J2EE	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   19	
  
APIs	
  do	
  J2EE:	
  Diversos	
  
•  JavaMail	
  
– Envio	
  e	
  recepção	
  de	
  e-­‐mail	
  por	
  POP,	
  IMAP,	
  SMTP	
  
•  JavaBeans	
  Ac3va3on	
  Framework	
  
– A.vação	
  de	
  funcionalidades	
  via	
  .pos	
  MIME	
  
•  JNDI	
  (Java	
  Naming	
  and	
  Directory)	
  
– LDAP,	
  NDS,	
  DNS,	
  NIS,	
  CosNaming;	
  serviços	
  J2EE	
  
•  JAAS	
  (Autenthica.on	
  &	
  Authoriza.on	
  Service)	
  
– Autorização	
  e	
  Auten.cação;	
  PAM	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   20	
  
APIs	
  do	
  J2EE:	
  Middleware	
  
•  JMS	
  (Java	
  Message	
  Service)	
  
– Comunicação	
  assíncrona	
  robusta	
  
•  JTA	
  (Java	
  Transac.on	
  API)	
  
– Transações	
  de	
  alto	
  nível	
  
•  JCA	
  (J2EE	
  Connector	
  Architecture)	
  
– Integração	
  com	
  sistemas	
  não-­‐J2EE	
  
•  JDBC	
  (Java	
  Database	
  Connec.vity)	
  
– J2SE	
  +	
  DataSources,	
  transações	
  XA	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   21	
  
APIs	
  do	
  J2EE:	
  Web	
  
•  Servlets	
  
–  Programação	
  Web	
  dinâmica	
  
•  JSP	
  (Java	
  Sever	
  Pages)	
  
–  Idem,	
  mais	
  visual	
  
•  JSTL	
  (Java	
  Standard	
  Template	
  Library)	
  
–  Idem,	
  mais	
  estruturado	
  
•  JSF	
  (JavaServerFaces)	
  
–  Idem,	
  implementando	
  o	
  MVC	
  
•  Alterna3vas/Complementos:	
  Struts,	
  Spring...	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   22	
  
APIs	
  do	
  J2EE:	
  XML	
  e	
  WebServices	
  
•  JAXP	
  (Java	
  API	
  for	
  XML	
  Processing)	
  
– DOM,	
  SAX,	
  XSLT	
  
•  SAAJ	
  (SOAP	
  with	
  Axachments	
  API	
  for	
  Java)	
  
– Web	
  Services:	
  SOAP	
  (modelo	
  documento)	
  
•  JAX-­‐RPC	
  (Java	
  API	
  for	
  XML-­‐based	
  RPC)	
  
– Web	
  Services:	
  SOAP	
  (modelo	
  RPC),	
  WSDL	
  
•  JAXR	
  (Java	
  API	
  for	
  XML	
  Registries)	
  
– Web	
  Services:	
  UDDI	
  /	
  ebXML	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   23	
  
APIs	
  do	
  J2EE:	
  EJB	
  
•  EJB	
  (Enterprise	
  Java	
  Beans)	
  
– Componentes	
  Distribuídos;	
  Session;	
  RMI/IIOP	
  
•  EJB	
  BMP/CMP/CMR	
  
– En.ty;	
  Persistência	
  Automá.ca	
  (mapeamento	
  
O/R)	
  
•  EJB	
  MDB	
  (Message-­‐Driven	
  Beans)	
  
– Facilidade	
  de	
  alto	
  nível	
  para	
  JMS	
  e	
  Web	
  Services	
  
•  Transações,	
  Segurança	
  
– Facilidades	
  declara.vas	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   24	
  
APIs	
  do	
  J2EE:	
  Persistência	
  de	
  Dados	
  
•  JPA	
  (Java	
  Persistence	
  API)	
  
– En.ty;	
  Persistência	
  Automá.ca	
  
(mapeamento	
  O/R)	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   25	
  
Padrões	
  do	
  JCP	
  
•  JCP:	
  Um	
  processo	
  aberto	
  e	
  par.cipa.vo,	
  com	
  o	
  
obje.vo	
  de	
  definir	
  e	
  manter	
  todos	
  os	
  padrões	
  Java	
  
•  Java	
  EE	
  6	
  
–  Padroniza	
  quase	
  tudo:	
  
•  APIs	
  
•  Schemas,	
  Deployment	
  
•  Comportamentos	
  (ciclos	
  de	
  vida,	
  etc.)	
  
–  Não	
  contempla:	
  
•  Ferramentas,	
  Metodologias	
  
•  QoS	
  
•  Integração	
  (ex.:	
  suporte	
  a	
  SGBDs	
  e	
  middlewares)	
  
•  hxp://www.oracle.com/technetwork/java/javaee/
blueprints/index.html	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   26	
  
Servidor	
  de	
  Aplicação	
  
•  O	
  Java	
  EE	
  é	
  um	
  grande	
  conjunto	
  de	
  
especificações,	
  formatada	
  em	
  um	
  grande	
  
arquivo	
  PDF,	
  uma	
  especificação,	
  detalhando	
  
quais	
  especificações	
  fazem	
  parte	
  deste.	
  
•  Para	
  u.lizarmos	
  o	
  sosware,	
  é	
  necessário	
  fazer	
  
o	
  download	
  de	
  uma	
  implementação	
  destas	
  
especificações	
  
•  Existem	
  diversas	
  implementações.	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   27	
  
Servidor	
  de	
  Aplicação	
  
•  Como	
  este	
  sosware	
  tem	
  o	
  papel	
  de	
  servir	
  sua	
  
aplicação	
  para	
  auxiliar	
  com	
  serviços	
  de	
  infraestruturas,	
  
recebe	
  o	
  nome	
  de	
  servidor	
  de	
  aplicação.	
  
•  Alguns	
  exemplos:	
  
–  RedHat,	
  JBoss	
  Applica.on	
  Server,	
  gratuito,	
  Java	
  EE	
  5.	
  
–  Sun/Oracle,	
  GlassFish,	
  gratuito,	
  Java	
  EE	
  6.	
  
–  Apache,	
  Geronimo,	
  gratuito,	
  Java	
  EE	
  5.	
  
–  Oracle/BEA,	
  WebLogic	
  Applica.on	
  Server,	
  Java	
  EE	
  5.	
  
–  IBM,	
  WebSphere	
  Applica.on	
  Server,	
  Java	
  EE	
  5.	
  
–  Sun/Oracle,	
  Sun	
  Java	
  System	
  Applica3on	
  Server	
  (baseado	
  
no	
  GlassFish),	
  Java	
  EE	
  5.	
  
–  SAP,	
  SAP	
  Applica3on	
  Server,	
  Java	
  EE	
  5.	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   28	
  
Servlet	
  Container	
  
•  Algumas	
  implementações	
  do	
  J2EE	
  para	
  o	
  
desenvolvimento	
  web:	
  
–  JSP	
  –	
  Java	
  Server	
  Pages	
  
–  Servlets	
  
–  JSTL	
  –	
  Java	
  Server	
  Standard	
  Tag	
  Library	
  
–  JSF	
  –	
  Java	
  Server	
  Faces	
  
•  Servlet	
  container:	
  é	
  um	
  servidor	
  que	
  suporta	
  
estas	
  funcionalidades,	
  mas	
  não	
  necessariamente	
  
implementa	
  a	
  especificação	
  Java	
  EE	
  completa.	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   29	
  
Servlet	
  -­‐	
  Conceito	
  
•  Aplicação	
  Java	
  executada	
  do	
  lado	
  do	
  servidor,	
  
estendendo	
  a	
  capacidade	
  do	
  servidor	
  web	
  
– Alterna.va	
  Java	
  para	
  os	
  scripts	
  CGI	
  
– Gerenciado	
  pelo	
  módulo	
  web	
  
•  Vantagens	
  
– Melhor	
  aproveitamento	
  dos	
  recursos	
  do	
  sistema	
  
– Fácil	
  de	
  programar	
  
– Portável	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   30	
  
Arquitetura	
  Cliente-­‐Servidor	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   31	
  
GET (request) Documento HTML
retorna (response) Documento HTML
Cliente / Browser Servidor
Formulário Submetido via POST (request)
Servidor retorna HTML gerado pelo Servlet
Arquitetura	
  Cliente-­‐Servidor	
  
•  Arquitetura	
  baseada	
  na	
  divisão	
  do	
  
processamento	
  em	
  processos	
  dis.ntos	
  
–  Servidor	
  
•  responsável	
  pela	
  manutenção	
  da	
  informação	
  
–  Clientes	
  
•  responsáveis	
  pela	
  obtenção	
  dos	
  dados	
  
•  envio	
  de	
  pedidos	
  ao	
  processo	
  servidor	
  
•  Cliente	
  faz	
  requisições	
  u.lizando	
  protocolo	
  HTTP	
  
•  Para	
  cada	
  requisição	
  o	
  servidor	
  cria	
  uma	
  nova	
  
Thread	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   32	
  
Requisitando	
  um	
  Servlet	
  via	
  GET	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   33	
  
GET (HTTP)
http://localhost/servlet/ServletHyperMed?Comando=SetCtxLabPorNome&Por=&No=Apsen
Requisitando	
  um	
  Servlet	
  via	
  POST	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   34	
  
Servlet	
  API	
  
•  Java Servlet API
–  Conjunto de classes Java
–  Define interface padrão entre o cliente web e o servidor
web
java.lang.Object
|
+----javax.servlet.GenericServlet
|
+----javax.servlet.http.HTTPServlet
|
+----br.mackenzie.fci.tpa3.MeuServlet
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   35	
  
HxpServlet	
  
•  Tratador	
  de	
  requisições	
  HTTP	
  
•  Trata	
  métodos	
  HTTP	
  específicos	
  
–  doGet(HttpServletRequest req, HttpServletResponse resp)
–  doPost(HttpServletRequest req, HttpServletResponse resp)
•  doGet	
  e	
  doPost	
  
–  Chamados	
  pelo	
  método	
  service()
•  Subclasses	
  reescrevem	
  os	
  métodos	
  
–  doGet
–  doPost
•  Podem	
  reescrever	
  os	
  métodos	
  	
  
–  init()
–  destroy()
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   36	
  
Ciclo	
  de	
  Vida	
  do	
  Servlet	
  
•  Criação	
  e	
  inicialização	
  
– Realizado	
  uma	
  única	
  vez	
  
•  init(ServletConfig config)
– Sempre	
  chama	
  o	
  método	
  da	
  super	
  classe	
  primeiro	
  
•  super.init(config)
– Pode	
  sinalizar	
  a	
  exceção	
  
UnavailableException	
  caso	
  ocorra	
  algum	
  
erro	
  durante	
  o	
  processo	
  de	
  inicialização	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   37	
  
Ciclo	
  de	
  Vida	
  do	
  Servlet	
  
•  Os	
  médotos	
  service(),	
  doGet(),	
  
doPost()	
  são	
  chamados	
  para	
  atender	
  
requisições	
  de	
  clientes	
  
– Cada	
  requisição	
  é	
  atendida	
  por	
  uma	
  nova	
  thread	
  
•  destroy()	
  e	
  Garbage	
  Collec3on	
  
– Executado	
  somente	
  uma	
  vez	
  
– Alguns	
  servidores	
  somente	
  removem	
  o	
  servlet	
  
quando	
  ocorre	
  o	
  shutdown	
  
– U.lizado	
  para	
  liberar	
  recursos	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   38	
  
Java	
  Servlet	
  API	
  
•  Para	
  criar	
  um	
  Servlet	
  é	
  necessário	
  
– Estender	
  a	
  classe	
  HxpServlet	
  	
  
•  pacote	
  javax.servlet.http	
  do	
  JSDK	
  
– Implementar	
  os	
  métodos	
  doGet	
  ou	
  doPost
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   39	
  
Request	
  &	
  Response	
  
•  Métodos	
  doGet(),	
  doPost()	
  recebem	
  
dois	
  parâmetros	
  
– HttpServletRequest	
  	
  
•  encapsula	
  os	
  parâmetros	
  da	
  requisição	
  
– HttpServletResponse
•  encapsula	
  a	
  resposta	
  ao	
  cliente	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   40	
  
HttpServletRequest
•  Interface	
  que	
  encapsula	
  a	
  requisição	
  feita	
  pelo	
  
cliente	
  através	
  do	
  protocolo	
  HTTP	
  
•  Possui	
  métodos	
  que	
  permitem	
  recuperar	
  os	
  
dados	
  da	
  requisição	
  
– cabeçalho	
  
– dados	
  de	
  formulários	
  ou	
  parâmetros	
  enviados	
  
– informações	
  sobre	
  a	
  sessão	
  do	
  cliente	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   41	
  
HttpServletRequest
•  Alguns	
  métodos	
  definidos	
  em	
  
HttpServletRequest	
  para	
  manipulação	
  de	
  
Parâmetros	
  
–  java.util.Enumeration
getParameterNames()	
  	
  
•  Obtém	
  listagem,	
  contendo	
  nomes	
  de	
  parâmetros	
  da	
  requisição	
  
–  java.lang.String[]
getParameterValues(java.lang.String
name)
•  Obtém	
  valores	
  do	
  parâmetro	
  “name”	
  da	
  requisição	
  
–  java.lang.String
getParameter(java.lang.String name)	
  	
  
•  Obtém	
  valor	
  do	
  parâmetro	
  “name”	
  da	
  requisição	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   42	
  
HttpServletResponse
•  Interface	
  que	
  encapsula	
  a	
  resposta	
  ao	
  cliente	
  
•  Possui	
  um	
  método	
  responsável	
  por	
  recuperar	
  
o	
  canal	
  de	
  resposta	
  com	
  o	
  cliente	
  
– getWriter()
– retorna	
  um	
  PrintWriter
Ex:	
  	
  PrintWriter out = response.getWriter();
	
  	
  	
  	
  	
  	
  	
  out.println(“Escrevendo no cliente”);
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   43	
  
HttpServletResponse
•  Também	
  é	
  possível	
  configurar	
  qual	
  é	
  o	
  .po	
  
dos	
  dados	
  que	
  estão	
  sendo	
  enviados	
  de	
  volta	
  
ao	
  cliente	
  
– setContentType(String type)
– Os	
  .pos	
  mais	
  comuns	
  são	
  text/html,	
  text/xml	
  
– O	
  método	
  setContentType	
  deve	
  ser	
  chamado	
  
antes	
  do	
  método	
  getWriter
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   44	
  
Servlet	
  Exemplo:	
  Hello	
  World!	
  
package tpa3.servlets;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World!</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Hello World!</h1>");
out.println("</body>");
out.println("</html>");
}
}
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   45	
  
Hello	
  World!	
  
Servlet	
  Exemplo:	
  RequestParam	
  
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class RequestParamExample extends HttpServlet {
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("GET Request. No Form Data Posted");
}
...
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   46	
  
Servlet	
  Exemplo:	
  RequestParam	
  
...
@Override
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
Enumeration e = request.getParameterNames();
response.setContentType("text/html");
PrintWriter out = response.getWriter();
while (e.hasMoreElements()) {
String name = (String) e.nextElement();
String value = request.getParameter(name);
out.println(name + " = " + value);
}
}
}
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   47	
  
Gerenciamento	
  de	
  Sessão	
  
•  Protocolo	
  HTTP	
  
– Protocolo	
  sem	
  estado	
  
•  Não	
  é	
  possível	
  a	
  princípio	
  conhecer	
  o	
  estado	
  
do	
  cliente	
  anterior	
  à	
  uma	
  requisição	
  
•  O	
  gerenciamento	
  de	
  sessão	
  provê	
  uma	
  
maneira	
  de	
  iden.ficar	
  usuários	
  através	
  de	
  
várias	
  requisições	
  HTTPs	
  e	
  recuperar	
  suas	
  
informações	
  
– Dados	
  do	
  estado	
  do	
  cliente	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   48	
  
Gerenciamento	
  de	
  Sessão	
  
•  Para	
  obter	
  uma	
  sessão	
  
– H[pSession	
  getSession()	
  
•  Obtém	
  sessão	
  existente,	
  caso	
  não	
  exista	
  retorna	
  uma	
  
nova	
  sessão	
  	
  
– H[pSession	
  getSession(boolean	
  create)	
  	
  
•  Obtém	
  sessão	
  existente	
  ou	
  cria	
  uma	
  nova	
  sessão	
  
dependendo	
  do	
  valor	
  do	
  parâmetro	
  create	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   49	
  
Gerenciamento	
  de	
  Sessão	
  
•  Métodos	
  para	
  manipulação	
  de	
  objetos	
  em	
  sessão	
  
–  void removeAttribute(String name)
•  Re.ra	
  objeto	
  da	
  sessão	
  
–  void setAttribute(String name, Object value)
•  Coloca	
  ou	
  sobreescreve	
  objeto	
  na	
  sessão	
  iden.ficado	
  por	
  
name	
  
–  java.lang.Object getAttribute(String name)
•  Obtém	
  objeto	
  da	
  sessão	
  
–  java.util.Enumeration getAttributeNames()
•  Obtém	
  os	
  nomes	
  de	
  todos	
  os	
  objetos	
  armazenados	
  na	
  
sessão	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   50	
  
Gerenciamento	
  de	
  Sessão	
  
•  Tempo	
  de	
  duração	
  da	
  sessão	
  
– Sessões	
  em	
  geral	
  tem	
  intervalo	
  máximo	
  de	
  tempo	
  
que	
  podem	
  ficar	
  ina.vas	
  
•  public int getMaxInactiveInterval()
•  public void
setMaxInactiveInterval(int interval)
– As	
  sessões	
  também	
  podem	
  ser	
  encerradas	
  
explicitamente	
  pelo	
  programador	
  
•  public void invalidate()
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   51	
  
Colocando	
  para	
  Funcionar	
  
•  Para	
  que	
  o	
  servlet	
  “funcione”	
  
–  Necessário	
  que	
  um	
  servidor	
  web/aplicação	
  com	
  suporte	
  a	
  
java	
  que	
  escute	
  as	
  requisições	
  do	
  cliente	
  
–  Ex:	
  
•  IBM	
  WebSphere	
  Applica.on	
  Server	
  
•  Jakarta	
  Tomcat	
  
•  Java	
  Web	
  Server	
  
•  GlassFish	
  
•  Etc.	
  
–  Jakarta	
  Tomcat	
  
•  Servidor	
  gratuito	
  baseado	
  em	
  java	
  	
  
•  Configurável	
  de	
  maneira	
  simples	
  via	
  XML	
  	
  
•  Oferece	
  suporte	
  a	
  Java	
  (Servlets	
  e	
  JSP)	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   52	
  
Tomcat	
  x	
  GlassFish	
  
•  O	
  Tomcat:	
  é	
  um	
  servlet	
  container	
  simples,	
  que	
  
pode	
  hospedar	
  JSP	
  e	
  servlets.	
  	
  
•  O	
  GlassFish	
  é	
  mto	
  mais	
  poderoso.	
  
– GlassFish	
  além	
  de	
  ser	
  um	
  servlet	
  container,	
  
também	
  é	
  uma	
  pilha	
  de	
  aplicação	
  compa~vel	
  com	
  
aplicação	
  de	
  servidor	
  que	
  inclui	
  uma	
  pilha	
  de	
  
serviços	
  Web	
  (Metro),	
  EJBs,	
  Java	
  Persistence,	
  JMS,	
  
JavaMail	
  e	
  muitos	
  outros	
  incluídos	
  na	
  
especificação	
  J2EE.	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   53	
  
Arquitetura	
  JSP	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   54	
  
HTML de resposta montado a
partir de sucessivos comandos
out.println(...).
Servlet + Controladores
(Controle)
Objetos de Negócio
(Modelo)
JavaBean de
Resposta
Browser
JSP
doGet()
(Visão)	
  
JSP	
  -­‐	
  Conceito	
  
•  Tecnologia	
  que	
  permite	
  combinar	
  informações	
  está.cas	
  com	
  informações	
  
geradas	
  dinamicamente	
  
•  Script	
  executado	
  no	
  servidor	
  
–  Combinação	
  de	
  sintaxe	
  JSP	
  e	
  tags	
  de	
  marcação	
  
–  Tags	
  está.cos	
  
•  HTML,	
  XML	
  
–  Conteúdo	
  dinâmico	
  gerado	
  pelo	
  código	
  do	
  script	
  
•  Java	
  
•  Exemplo	
  
<html>
<head>
<title>Primeiro JSP</title>
</head>
<body>
<h1>Data e hora: <%= new java.util.Date() %></h1>
</body>
</html>
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   55	
  
Compilação	
  de	
  JSP	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   56	
  
xxx.jsp
requisição
para xxx.jsp
resposta
resposta de erro
xxx.class
(servlet)
Geração de
Código Java
xxx.java
(servlet)
Compilação
Tags	
  JSP	
  
•  Dire.vas	
  
–  	
  Configuração	
  do	
  processador	
  JSP	
  
–  	
  Inclusão	
  está.ca	
  de	
  conteúdo	
  	
  
–  	
  Encaminhamento	
  de	
  requisições	
  para	
  outros	
  
servidores	
  
•  Comandos	
  de	
  script	
  
–  Inserção	
  de	
  código	
  para	
  a	
  programação	
  de	
  conteúdo	
  
dinâmico	
  	
  	
  
•  Ações	
  
–  Tags	
  de	
  alto	
  nível	
  que	
  encapsulam	
  padrões	
  de	
  
programação	
  mais	
  corriqueiros	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   57	
  
Dire.vas	
  JSP	
  
<%@ nome-da-diretiva
[nome-atributo = "valor-do-
atributo"]* %>
•  Diretivas disponíveis
–  <%@ include file="url-relativa" %>
•  Inclusão em tempo de compilação
–  <%@ taglib uri="url-relativa-da-
biblioteca-de-tags"
prefix="prefixo-das-tags" %>
–  <%@ page lista-de-atributos %>
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   58	
  
Atributos	
  da	
  Dire.va	
  Page	
  
•  language="nome-­‐da-­‐linguagem-­‐de-­‐script"	
  
•  contentType="mime-­‐type	
  |	
  mime-­‐type;	
  charset=nome-­‐
charset"	
  
•  errorPage="url-­‐página-­‐de-­‐erro"	
  
•  isErrorPage="true	
  |	
  false"	
  
•  buffer="none|tamanho-­‐em-­‐kb"	
  	
  
•  auto-­‐flush="true	
  |	
  false"	
  	
  	
  	
  	
  	
  	
  
•  import="lista-­‐de-­‐pacotes"	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
•  extends="nome-­‐da-­‐classe-­‐base"	
  
•  session="true	
  |	
  false"	
  
•  isThreadSafe="true	
  |	
  false"	
  
•  info="texto-­‐informa.vo"	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   59	
  
Exemplos	
  de	
  Dire.vas	
  
•  Diretiva Include
<%@ include file="/teccommdoc/header.html" %>
•  Diretiva Taglib
<%@ taglib uri="/tags/teccommtags" prefix="teccomm"
%>
<teccomm:exemplo parametro="demonstracao" />
•  Diretiva Page
<%@ page language="java" errorPage="erro.jsp"
isErrorPage="false" buffer="12kb" auto-
flush="true" session="true" isThreadSafe="true"
info="TecComm" %>
•  Ou
<%@ page language="java" %>
<%@ page errorPage="erro.jsp" %>
<%@ page import="com.teccomm.output.*" %>
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   60	
  
Tags	
  de	
  Script	
  
•  Declarações
<%! declaração %>
•  Scriptlets
<% comandos %>
•  Expressões
<%= expressão %>
•  Comentários
<!-- comentário html -->
<%-- comentário jsp -->
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   61	
  
Declarações	
  
•  <%! declarações %>
•  Exemplos
<%! int i = 0;
public void metodo {...} %>
<%! int a, b, c; %>
<%! Circle a = new Circle(2.0); %>
•  Declara variáveis ou métodos a serem
utilizados no código JSP
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   62	
  
Scriptlets	
  
•  <% fragmento_de_código_válido %>
•  Exemplo
<% String name = null;
if (request.getParameter(“nome") == null)
{ %>
<%@ include file="error.html" %>
<% }
else
{ foo.setName(request.getParameter(“nome")); } %>
•  Um scriptlet pode conter qualquer número de instruções,
variáveis, métodos, declarações ou expressões válidos
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   63	
  
Expressão	
  
•  <%= expressão %>
•  Exemplo
O mapa tem <font color="blue"><%=
mapa.getCount() %></font> entradas.
•  Esta tag contém uma expressão que é
avaliada e convertida para string, depois de
processada.
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   64	
  
Comentários	
  
•  <!-- comentário [ <%= expressão %> ] -->
•  Exemplo
<!-- Comentário -->
<!-- Esta página foi carregada em
<%= (new java.util.Date()).toLocaleString() %> -->
•  O processador JSP trata um comentário como texto HTML
não interpretado, retornando-o ao cliente.
•  Uma expressão pode ser incluída em um comentário, sendo
avaliada e seu resultado é retornado ao usuário juntamente
com o HTML de resposta
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   65	
  
Comentários	
  para	
  Desenvolvimento	
  
•  <%-- comentário --%>
•  Exemplo
<%@ page language="java" %>
<html><head><title>Um teste - comentário</title></head>
<body><h2>Um teste - comentário</h2>
<%-- Este comentário não estará disponível para o cliente
--%>
</body></html>
•  O processador JSP simplesmente ignora este tipo de comentário e
não processa nenhum código ou expressão contida entre os
delimitadores.
•  Este tipo de comentário não será enviado para o cliente
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   66	
  
Objetos	
  Pré-­‐Definidos	
  
•  Disponíveis	
  para	
  scriplets	
  e	
  expressões	
  
– request	
  
– response	
  
– session	
  
– out	
  
– excep3on	
  (somente	
  em	
  páginas	
  de	
  erro)	
  
– page	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   67	
  
Ações	
  
•  jsp:include
•  jsp:forward
– ou	
  então	
  tags	
  personalizadas	
  via	
  taglib	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   68	
  
jsp:include e jsp:forward
•  Ações	
  u.lizadas	
  para	
  o	
  encadeamento	
  de	
  
páginas	
  jsp	
  
–  <jsp:include page="url-relativa-da-página" />
•  Suspende	
  o	
  processamento	
  da	
  página	
  chamadora	
  e	
  
repassa	
  o	
  controle	
  para	
  a	
  página	
  chamada	
  até	
  que	
  esta	
  
retorne-­‐o	
  
–  <jsp:forward page="url-relativa-da-página" />
•  O	
  processamento	
  da	
  página	
  chamadora	
  é	
  terminado	
  e	
  
o	
  controle	
  é	
  repassado	
  sem	
  espera	
  de	
  retorno	
  para	
  a	
  
página	
  chamada	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   69	
  
jsp:include
<jsp:include page="{URLrelativa |<%=expressão%>}"/>
•  Exemplos:
<jsp:include page="scripts/login.jsp" />
<jsp:include page="copyright.html" />
<jsp:include page="/index.html" />
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   70	
  
jsp:forward
<jsp:forward page="{URLrelativa|<%=expressão%>}"/>
•  Exemplo
<jsp:forward page="scripts/login.jsp" />
•  A tag <jsp:forward> repassa o objeto
request enviado para o arquivo JSP para
que seja processado por outra aplicação
• 
•  O processador JSP não executa o restante
das instruções contidas após a tag.
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   71	
  
Servlet	
  +	
  Orientação	
  a	
  Objetos	
  
•  Agora	
  sabemos	
  	
  
– Programar	
  servlets	
  
– Modelar	
  um	
  sistema	
  orientado	
  a	
  objetos	
  
•  Mas	
  como	
  fazer	
  os	
  dois	
  funcionarem	
  juntos?	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   72	
  
Servlet	
  +	
  Orientação	
  a	
  Objetos	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   73	
  
browser HTTP
Servlet
NewClass5
NewClass
NewClass4NewClass6
NewClass7
NewClass2
NewClass3 NewClass8
NewClass9 NewClass10
??
Arquitetura	
  MVC	
  
•  O que é MVC?
–  MVC – Model-View-Controller
–  Surgiu nos anos 80 com SmallTalk
•  Sugere a divisão de uma aplicação visual em 3 partes
fundamentais
–  Model
•  Representa o modelo da sua aplicação, com as regras de
negócio (business logic) e todo o processamento da aplicação
–  View
•  Representa a informação e recolhe os dados fornecidos pelo
usuário
–  Controller
•  Recebe as informações da entrada e as transmite para o
modelo
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   74	
  
Mo.vação	
  para	
  a	
  Arquitetura	
  MVC	
  
•  An.gamente:	
  
–  Forms	
  com	
  ações	
  locais	
  
–  Lógica	
  de	
  negócio	
  na	
  view	
  
–  Acesso	
  descentralizado	
  e	
  não	
  padronizado	
  ao	
  BD	
  
•  Evolução:	
  
–  Stored	
  Proedures:	
  .ra	
  a	
  lógica	
  de	
  negócio	
  da	
  view	
  e	
  a	
  
coloca	
  no	
  BD.	
  
•  Manutenção	
  Custosa	
  
•  Adição	
  de	
  novas	
  funcionalidades,	
  normalmente	
  
altera	
  o	
  funcionamento	
  das	
  an.gas	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   75	
  
História	
  do	
  MVC	
  
•  O	
  que	
  precisou	
  para	
  que	
  o	
  MVC	
  pudesse	
  surgir?	
  
•  Orientação	
  a	
  Objetos	
  (C++,	
  Smalltalk)	
  
•  Padrões	
  de	
  Projeto	
  (Design	
  PaGerns)	
  
–  Um	
  Design	
  PaGern	
  surge	
  para	
  resolver	
  um	
  problema	
  
que	
  muitos	
  programadores	
  encontram.	
  
–  Se	
  muitos	
  desenvolvedores	
  encontra,	
  muitas	
  soluções	
  
surgem.	
  
–  Através	
  da	
  colaboração,	
  as	
  soluções	
  são	
  maturadas	
  e	
  
eventualmente	
  uma	
  ou	
  mais	
  soluções	
  emergem	
  como	
  
Padrões	
  de	
  Projeto	
  (Design	
  PaGern)	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   76	
  
História	
  do	
  MVC	
  
•  Existem	
  Design	
  PaGerns	
  para	
  Undo/Redo,	
  
padronizar	
  comandos,	
  padronizar	
  a	
  criação	
  de	
  
objetos,	
  entre	
  outros.	
  
•  Um	
  dos	
  Design	
  PaGerns	
  que	
  foi	
  essencial	
  para	
  a	
  
ciração	
  do	
  padrão	
  MVC	
  foi	
  o	
  padrão	
  Controller.	
  
•  Um	
  Controller	
  se	
  responsabiliza	
  por	
  receber	
  as	
  
requisições	
  (normalmente,	
  proveniente	
  dos	
  
atores	
  do	
  Diagrama	
  de	
  Casos	
  de	
  Uso)	
  e	
  
redireciona	
  o	
  processamento	
  para	
  um	
  objeto	
  que	
  
consegue	
  dar	
  a	
  resposta	
  adequada	
  à	
  requisição	
  
que	
  chegou.	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   77	
  
História	
  do	
  MVC	
  
•  O	
  MVC	
  foi	
  inicialmente	
  proposto	
  por	
  R.	
  
Trygve,	
  da	
  Xerox	
  Labs,	
  em	
  1978.	
  
•  Note,	
  então	
  que	
  o	
  Controller	
  não	
  responde	
  
diretamente	
  às	
  requisições,	
  ele	
  direciona	
  o	
  
processamento	
  para	
  quem	
  pode	
  fazer	
  isso	
  
adequadamente.	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   78	
  
Arquitetura	
  MVC	
  
•  Pela arquitetura, a interação de um usuário com o
sistema se dá através de sequências de chamadas
MVC
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   79	
  
Servlet + Controladores
(Controle)
Objetos de Negócio
(Modelo)
JavaBean de
Resposta
Browser
JSP
doGet()
(Visão)	
  
Padrão	
  MVC	
  
•  O	
  que	
  é	
  o	
  padrão	
  MVC?	
  
•  Em	
  uma	
  aplicação	
  real,	
  e	
  mais	
  ainda	
  em	
  
aplicações	
  que	
  empregam	
  banco	
  de	
  dados,	
  o	
  
fluxo	
  de	
  dados	
  de	
  uma	
  operação	
  tem	
  de	
  seguir	
  
um	
  caminho	
  específico:	
  
–  Encontrar	
  a	
  chave	
  primária	
  do	
  dado	
  na	
  tabela	
  
–  Requisitar	
  o	
  registro	
  
–  Requisitar	
  os	
  registros	
  das	
  tabelas	
  referenciadas	
  
através	
  de	
  chaves	
  estrangeiras	
  
–  Atualizar	
  dados	
  
–  Realizar	
  o	
  commit	
  das	
  mudanças	
  nas	
  tabelas	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   80	
  
Padrão	
  MVC	
  
•  Normalmente,	
  esse	
  fluxo	
  de	
  operações	
  faz	
  
sen.do	
  ao	
  se	
  olhar	
  a	
  modelagem	
  do	
  banco	
  de	
  
dados	
  para	
  a	
  aplicação,	
  mas	
  não	
  faz	
  o	
  menor	
  
sen.do	
  para	
  o	
  usuário	
  final.	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   81	
  
Padrão	
  MVC	
  
•  Qual	
  o	
  obje.vo	
  então?	
  
•  Fazer	
  uma	
  abstração	
  dos	
  dados	
  no	
  domínio,	
  
de	
  modo	
  que	
  a	
  informação	
  que	
  o	
  usuário	
  
analisa	
  é	
  a	
  mesma	
  informação	
  que	
  o	
  domínio	
  
mantém,	
  mas	
  não	
  necessariamente	
  na	
  mesma	
  
forma.	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   82	
  
Padrão	
  MVC	
  -­‐	
  Camadas	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   83	
  
View	
   View	
   View	
  
Controller	
  
Model	
   Model	
  
BD	
  
Padrão	
  MVC	
  -­‐	
  Model	
  
•  O	
  model	
  deve	
  fazer	
  a	
  ponte	
  entre	
  a	
  
representação	
  que	
  o	
  usuário	
  interage	
  e	
  a	
  
representação	
  que	
  o	
  sistema	
  armazena	
  em	
  seu	
  
banco	
  de	
  dados.	
  
•  Quando	
  os	
  dados	
  da	
  aplicação	
  são	
  armazenados	
  
em	
  banco	
  de	
  dados,	
  a	
  camada	
  model	
  trata	
  da	
  
interação	
  entre	
  a	
  aplicação	
  e	
  o	
  seu	
  banco	
  de	
  
dados.	
  
•  O	
  Framework	
  	
  Hibernate	
  pode	
  ser	
  empregado	
  
como	
  model,	
  por	
  exemplo.	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   84	
  
Padrão	
  MVC	
  -­‐	
  View	
  
•  A	
  view	
  tem	
  por	
  obje.vos	
  realizar	
  a	
  interação	
  com	
  
o	
  usuário.	
  
•  Chamada	
  de	
  camada	
  de	
  apresentação	
  ou	
  de	
  
camada	
  de	
  visualização.	
  
•  Apresenta	
  informações	
  para	
  o	
  usuário,	
  e	
  coleta	
  
informações	
  dele.	
  
•  A	
  view	
  pode	
  mostrar	
  a	
  informação	
  do	
  mesmo	
  
modo	
  em	
  que	
  está	
  no	
  domínio,	
  ou	
  alterar	
  a	
  
forma	
  de	
  apresentação	
  desta	
  informação,	
  
ressaltando	
  que	
  a	
  informação	
  é	
  a	
  mesma.	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   85	
  
Padrão	
  MVC	
  -­‐	
  View	
  
•  Por	
  exemplo,	
  pode-­‐se	
  apresentar	
  dados	
  
esta~s.cos	
  sobre	
  o	
  acesso	
  a	
  um	
  determinado	
  
website	
  em	
  uma	
  tabela.	
  
•  Ou,	
  então,	
  pode	
  mostrar	
  esses	
  mesmos	
  dados	
  
em	
  um	
  gráfico,	
  histograma,	
  ou	
  em	
  uma	
  
.meline.	
  
•  Ou,	
  apresentar	
  os	
  resultados	
  em	
  uma	
  página	
  
web,	
  empregando	
  JSP	
  –	
  Java	
  Server	
  Pages,	
  
por	
  exemplo.	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   86	
  
Padrão	
  MVC	
  -­‐	
  Controller	
  
•  O	
  Controller	
  tem	
  por	
  função	
  receber	
  as	
  
requisições	
  da	
  view	
  e	
  direcionar	
  o	
  
processamento	
  para	
  uma	
  classe	
  que	
  possa	
  
responder	
  adequadamente	
  à	
  requisição.	
  
•  A	
  maioria	
  das	
  implementações	
  de	
  MVC	
  em	
  
Frameworks,	
  encapsula	
  o	
  Controller,	
  de	
  forma	
  
que	
  ele	
  fique	
  oculto.	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   87	
  
Padrão	
  MVC	
  -­‐	
  Controller	
  
•  Isso	
  acontece	
  porque	
  é	
  muito	
  fácil	
  colocar	
  
implementações	
  que	
  não	
  se	
  encaixam	
  no	
  padrão	
  
Controller	
  em	
  um	
  Controller,	
  e	
  então,	
  seu	
  
“Controller”	
  perde	
  a	
  caracterís.ca	
  de	
  um	
  
Controller.	
  A	
  par.r	
  desse	
  ponto,	
  a	
  tendência	
  é	
  
que	
  se	
  perca	
  o	
  controle	
  sobre	
  a	
  separação	
  em	
  
camadas.	
  
•  Uma	
  servlet	
  e	
  classes	
  auxiliares,	
  que	
  ficam	
  com	
  a	
  
lógica	
  de	
  negócio,	
  ou	
  regras	
  de	
  negócio,	
  onde	
  
estariam	
  o	
  código	
  Java,	
  por	
  exemplo.	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   88	
  
Padrão	
  MVC	
  -­‐	
  Controller	
  
•  Pode	
  ser	
  empregadas	
  outras	
  tecnologias,	
  tais	
  
como	
  JSF	
  –	
  Java	
  Server	
  Faces.	
  
•  Esta	
  especificação	
  é	
  baseada	
  em	
  
componentes	
  e	
  possui	
  facilidades	
  para	
  o	
  
desenvolvimento	
  de	
  interfaces	
  gráficas.	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   89	
  
Padrão	
  MVC	
  –	
  Java	
  
•  Em	
  linguagem	
  Java,	
  existem	
  diversas	
  
implementações	
  do	
  padrão	
  MVC,	
  dentre	
  elas:	
  
– Struts	
  
– JSF	
  
– Sping	
  
– Vraptor	
  
– JSP/Servlet	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   90	
  
Modelo	
  MVC	
  -­‐	
  Java	
  
•  Para	
  se	
  implementar	
  o	
  modelo	
  MVC	
  em	
  
linguagem	
  Java,	
  u.lizando	
  JSP	
  e	
  Servlets,	
  
u.lizamos	
  a	
  seguinte	
  arquitetura:	
  
– View	
  =	
  JSP	
  
– Controller	
  =	
  Servlet	
  
– Model	
  =	
  DAO	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   91	
  
DAO	
  
•  O	
  padrão	
  DAO	
  é	
  visto	
  em	
  Banco	
  de	
  Dados	
  e	
  JDBC.	
  
•  DAO	
  é	
  a	
  sigla	
  para	
  Data	
  Access	
  Object,	
  e	
  é	
  
literalmente	
  um	
  objeto	
  para	
  acessar	
  dados.	
  Esses	
  
dados,	
  no	
  caso,	
  estão	
  armazenados	
  no	
  banco	
  de	
  
dados.	
  
•  A	
  proposta	
  é	
  encapsular	
  o	
  acesso	
  ao	
  banco	
  de	
  
dados,	
  de	
  dorma	
  que	
  a	
  aplicação	
  externa	
  (for	
  a	
  
do	
  DAO),	
  o	
  acesso	
  aos	
  dados	
  se	
  resuma	
  a	
  
execução	
  de	
  uma	
  função	
  em	
  um	
  objeto	
  DAO.	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   92	
  
DAO	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   93	
  
JavaBeans	
  
•  A	
  aplicação	
  está	
  dividida	
  em	
  camadas.	
  Como	
  
que	
  se	
  dá	
  a	
  comunicação	
  entre	
  as	
  camadas?	
  
•  Como	
  que	
  a	
  informação	
  de	
  uma	
  camada	
  para	
  
a	
  outra,	
  do	
  BD	
  até	
  o	
  usuário	
  e	
  vice-­‐versa?	
  
•  A	
  informação	
  e	
  passada	
  em	
  JavaBeans.	
  
•  JavaBeans	
  são	
  simplesmente	
  classes	
  Java,	
  com	
  
membros	
  não	
  públicos,	
  construtor	
  vazio	
  e	
  
gexers/sexers	
  para	
  todos	
  os	
  membros.	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   94	
  
Servlets	
  sem	
  MVC	
  
•  Esses	
  servlets	
  faziam	
  tudo,	
  como	
  vimos:	
  
–  Recebiam	
  a	
  requisição	
  do	
  cliente.	
  
–  Validavam	
  a	
  requisição.	
  
–  Conectavam	
  com	
  o	
  banco	
  de	
  dados	
  para	
  pegar	
  dados	
  
e	
  responder	
  à	
  requisição.	
  
–  Montavam	
  a	
  resposta.	
  
–  Escreviam	
  o	
  código	
  HTML	
  da	
  resposta.	
  
•  O	
  código	
  desses	
  servlets	
  era	
  imenso,	
  altamente	
  
acoplado,	
  diƒcil	
  de	
  dar	
  manutenção	
  e	
  diƒcil	
  de	
  
localizar	
  e	
  corrigir	
  erros.	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   95	
  
Servlets	
  com	
  MVC	
  
•  Qual	
  o	
  papel	
  do	
  Servlet	
  no	
  MVC?	
  
•  O	
  JSP	
  se	
  responsabiliza	
  pela	
  view.	
  
•  O	
  ideal	
  é	
  que	
  o	
  JSP	
  não	
  tenha	
  de	
  realizar	
  
nenhum	
  processamento	
  para	
  a	
  montagem	
  da	
  
resposta.	
  
•  Todos	
  os	
  dados	
  rela.vos	
  à	
  resposta	
  devem	
  
estar	
  disponíveis,	
  quando	
  o	
  JSP	
  for	
  montar	
  seu	
  
código	
  HTML.	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   96	
  
Servlets	
  com	
  MVC	
  
•  O	
  papel	
  do	
  Servlet,	
  então,	
  e	
  não	
  exatamente	
  
coletar	
  estes	
  dados,	
  mas	
  controlar	
  os	
  objetos	
  
que	
  podem	
  coletar	
  estes	
  dados.	
  De	
  posse	
  dos	
  
dados,	
  então	
  redirecionar	
  o	
  processamento	
  
para	
  o	
  JSP.	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   97	
  
Estrutura	
  do	
  Servlet	
  
•  Um	
  servlet	
  é	
  uma	
  classe	
  que	
  herda	
  da	
  classe	
  
javax.servlet.http.HttpServlet:	
  
public class SCPF extends HttpServlet {
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   98	
  
Estrutura	
  do	
  Servlet	
  
•  A	
  classe	
  HttpServlet	
  tem	
  diversas	
  funções	
  que	
  podem	
  
ser	
  sobrecarregadas	
  em	
  um	
  Servlet,	
  com	
  destaque	
  para:	
  
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   99	
  
Estrutura	
  do	
  Servlet	
  
protected void processRequest(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
/* TODO output your page here. You may use following sample code. */
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet SCPF</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet SCPF at " + request.getContextPath() + "</
h1>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   100	
  
Considerações	
  
•  O	
  exemplo	
  anterior	
  ilustra	
  a	
  forma	
  tradicional	
  de	
  
se	
  implementar	
  um	
  Servlet.	
  
•  Se	
  adquire	
  um	
  objeto	
  PrintWriter	
  para	
  
escrever	
  a	
  resposta	
  ao	
  usuário,	
  e	
  se	
  começa	
  a	
  
escrever	
  o	
  código	
  HTML.	
  
•  Esta	
  é	
  a	
  forma	
  que	
  não	
  queremos	
  usar!	
  
•  Nota:	
  Para	
  usarmos	
  o	
  Servlet	
  da	
  forma	
  que	
  
queremos,	
  usando	
  o	
  padrão	
  MVC,	
  é	
  essencial	
  
que	
  nenhuma	
  saída	
  seja	
  escrita	
  no	
  response	
  
para	
  o	
  usuário.	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   101	
  
RequestDispatcher
•  O	
  servlet	
  MVC	
  deve	
  se	
  comportar	
  apenas	
  como	
  um	
  
gerenciador	
  de	
  requisições.	
  
•  Para	
  que	
  isso	
  possa	
  funcionar	
  adequadamente,	
  
precisamos	
  u.lizar	
  o	
  RequestDispatcher,	
  em	
  
conjunto	
  com	
  o	
  setAttribute	
  do	
  request.	
  
•  Usando	
  desta	
  forma,	
  o	
  servlet	
  tem	
  o	
  seguinte	
  fluxo:	
  
–  Recebe	
  a	
  requisição	
  
–  Redireciona	
  para	
  alguém	
  que	
  saiba	
  tratar	
  a	
  resposta	
  
–  Configura	
  os	
  valores	
  nos	
  atributos	
  do	
  request
–  Redireciona	
  para	
  algum	
  JSP,	
  que	
  contém	
  o	
  código	
  HTML.	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   102	
  
Exemplo	
  
•  servletToJSP.java	
  
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// faz alguma coisa aqui para tratar a requisição
// ...
// Configura os parâmetros da resposta
request.setAttribute("servletName", "servletToJSP");
// Envia dos dados ao JSP para renderização e exibição ao usuário
try{
getServletConfig().getServletContext().getRequestDispatcher("/Demo/
scpf.jsp").forward(request, response);
}
catch(ServletException e){
e.printStackTrace();
}
catch(IOException e){
e.printStackTrace();
}
}
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   103	
  
Exemplo	
  
•  scpf.jsp	
  
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>I have been invoked by
<%
out.print(request.getAttribute("servletName").toString());
%>
Servlet!</h1>
</body>
</html>
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   104	
  
Exemplo	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   105	
  
Java	
  Enterprise	
  Edi.on	
   106	
  Daniel	
  Arndt	
  Alves	
  
Java	
  Enterprise	
  Edi.on	
   107	
  Daniel	
  Arndt	
  Alves	
  
Imagens	
  
•  hxp://www.digitalprank.org/wp-­‐content/uploads/2008/03/ejb.png	
  
•  hxp://sandersconsul.ng.com/Portals/58319/images/checklist.jpg	
  	
  
•  hxp://vip.cs.utsa.edu/classes/cs4393f2006/lectures/images/
overview-­‐j2eeArchitecture.gif	
  	
  
•  hxp://www.dave-­‐woods.co.uk/wp-­‐content/uploads/2010/02/
screens.gif	
  	
  
•  hxp://www.ishopping.pk/product_images/y/423/iMac-­‐
Lion__45051_std.png	
  	
  
•  hxp://www.wegotserved.com/wp-­‐content/uploads/2011/08/
MacMiniServer.jpg	
  	
  
•  hxp://sao-­‐paulo.pm.org/sta.c/images/equinocio/2010/mar/dbic/
Normalized-­‐Schema.png	
  	
  
Daniel	
  Arndt	
  Alves	
   Java	
  Enterprise	
  Edi.on	
   108	
  
Obrigado	
  
	
  
Daniel	
  Arndt	
  Alves	
  
daniel.alves@mackenzie.br	
  
Java	
  Enterprise	
  Edi.on	
   109	
  Daniel	
  Arndt	
  Alves	
  

Mais conteúdo relacionado

Mais procurados

JSF com Primefaces
JSF com PrimefacesJSF com Primefaces
JSF com PrimefacesFabio Noth
 
Treinamento WebSphere 6.1 Administration
Treinamento WebSphere 6.1 AdministrationTreinamento WebSphere 6.1 Administration
Treinamento WebSphere 6.1 AdministrationGustavo Concon
 
WebSphere 8 Intro (pt-BR)
WebSphere 8 Intro (pt-BR)WebSphere 8 Intro (pt-BR)
WebSphere 8 Intro (pt-BR)Juarez Junior
 
Web Sphere Application Server
Web Sphere Application ServerWeb Sphere Application Server
Web Sphere Application ServerFabricio Carvalho
 
Anatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesAnatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesRafael Ponte
 
GlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEGlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEBruno Borges
 
Enterprise JavaBeans simples e descomplicado, na prática
Enterprise JavaBeans simples e descomplicado, na práticaEnterprise JavaBeans simples e descomplicado, na prática
Enterprise JavaBeans simples e descomplicado, na práticaGlobalcode
 
JavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividadeJavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividadeRafael Ponte
 
ApresentaçãO Ejb (Enterprise Java Beans)
ApresentaçãO Ejb (Enterprise Java Beans)ApresentaçãO Ejb (Enterprise Java Beans)
ApresentaçãO Ejb (Enterprise Java Beans)mauriciopel
 
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E JpaDominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E JpaAna Albert
 
GlassFish e Maven: Java EE sem dor!
GlassFish e Maven: Java EE sem dor!GlassFish e Maven: Java EE sem dor!
GlassFish e Maven: Java EE sem dor!Bruno Borges
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebElenilson Vieira
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev IntroduçãoMarcio Marinho
 

Mais procurados (20)

JSF com Primefaces
JSF com PrimefacesJSF com Primefaces
JSF com Primefaces
 
Aula 1 apresentação
Aula 1   apresentaçãoAula 1   apresentação
Aula 1 apresentação
 
Treinamento WebSphere 6.1 Administration
Treinamento WebSphere 6.1 AdministrationTreinamento WebSphere 6.1 Administration
Treinamento WebSphere 6.1 Administration
 
WebSphere 8 Intro (pt-BR)
WebSphere 8 Intro (pt-BR)WebSphere 8 Intro (pt-BR)
WebSphere 8 Intro (pt-BR)
 
Web Sphere Application Server
Web Sphere Application ServerWeb Sphere Application Server
Web Sphere Application Server
 
MC - Java Enterprise Edition 6 (Java EE)
MC - Java Enterprise Edition 6 (Java EE)MC - Java Enterprise Edition 6 (Java EE)
MC - Java Enterprise Edition 6 (Java EE)
 
Anatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesAnatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer Faces
 
GlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEGlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EE
 
Enterprise JavaBeans simples e descomplicado, na prática
Enterprise JavaBeans simples e descomplicado, na práticaEnterprise JavaBeans simples e descomplicado, na prática
Enterprise JavaBeans simples e descomplicado, na prática
 
JavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividadeJavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividade
 
Curso jsf
Curso jsfCurso jsf
Curso jsf
 
ApresentaçãO Ejb (Enterprise Java Beans)
ApresentaçãO Ejb (Enterprise Java Beans)ApresentaçãO Ejb (Enterprise Java Beans)
ApresentaçãO Ejb (Enterprise Java Beans)
 
Prime Faces
Prime FacesPrime Faces
Prime Faces
 
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E JpaDominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
 
GlassFish e Maven: Java EE sem dor!
GlassFish e Maven: Java EE sem dor!GlassFish e Maven: Java EE sem dor!
GlassFish e Maven: Java EE sem dor!
 
Introdução a jsf
Introdução a jsfIntrodução a jsf
Introdução a jsf
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias Web
 
ASP.NET 5, MVC 6 e além
ASP.NET 5, MVC 6 e alémASP.NET 5, MVC 6 e além
ASP.NET 5, MVC 6 e além
 
O Futuro do ASP.NET
O Futuro do ASP.NETO Futuro do ASP.NET
O Futuro do ASP.NET
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev Introdução
 

Destaque (12)

Java AWT
Java AWTJava AWT
Java AWT
 
Java RMI
Java RMIJava RMI
Java RMI
 
Hiearquia Window
Hiearquia WindowHiearquia Window
Hiearquia Window
 
Sessao
SessaoSessao
Sessao
 
Histórico de Participação do Mackenzie na Maratona de Programação
Histórico de Participação do Mackenzie na Maratona de ProgramaçãoHistórico de Participação do Mackenzie na Maratona de Programação
Histórico de Participação do Mackenzie na Maratona de Programação
 
Java Swing
Java SwingJava Swing
Java Swing
 
Bubble Sort
Bubble SortBubble Sort
Bubble Sort
 
Insertion Sort
Insertion SortInsertion Sort
Insertion Sort
 
Gerenciadores de Layout
Gerenciadores de LayoutGerenciadores de Layout
Gerenciadores de Layout
 
Análise de Algoritmos
Análise de AlgoritmosAnálise de Algoritmos
Análise de Algoritmos
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Selection Sort
Selection SortSelection Sort
Selection Sort
 

Semelhante a Java Platform, Enterprise Edition

Apresentação servidores de aplicação
Apresentação   servidores de aplicaçãoApresentação   servidores de aplicação
Apresentação servidores de aplicaçãoHelen Picoli
 
Técnicas de Programação para a Web
Técnicas de Programação para a WebTécnicas de Programação para a Web
Técnicas de Programação para a WebLuiz Cláudio Silva
 
Palestra Plataforma .NET na ETEC Marília
Palestra Plataforma .NET na ETEC MaríliaPalestra Plataforma .NET na ETEC Marília
Palestra Plataforma .NET na ETEC MaríliaElvis Fusco
 
JSP - Java Serves Pages
JSP - Java Serves PagesJSP - Java Serves Pages
JSP - Java Serves PagesAmanda Luz
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaMariana de Azevedo Santos
 
Desenvolvimento em .Net - Introducao A Framework
Desenvolvimento em .Net - Introducao A FrameworkDesenvolvimento em .Net - Introducao A Framework
Desenvolvimento em .Net - Introducao A FrameworkVitor Silva
 
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"sbcars
 
Desenvolvimento de Aplicações Corporativas com Java
Desenvolvimento de Aplicações Corporativas com JavaDesenvolvimento de Aplicações Corporativas com Java
Desenvolvimento de Aplicações Corporativas com Javaarmeniocardoso
 
Futuro do ASP.NET vNext - MVP ShowCast
Futuro do ASP.NET vNext - MVP ShowCast Futuro do ASP.NET vNext - MVP ShowCast
Futuro do ASP.NET vNext - MVP ShowCast Eduardo Pires
 
Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01Douglas Roeder
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.Filipe Morelli
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaAlexandre Tarifa
 

Semelhante a Java Platform, Enterprise Edition (20)

Apresentação servidores de aplicação
Apresentação   servidores de aplicaçãoApresentação   servidores de aplicação
Apresentação servidores de aplicação
 
Servlets e JSP
Servlets e JSPServlets e JSP
Servlets e JSP
 
Técnicas de Programação para a Web
Técnicas de Programação para a WebTécnicas de Programação para a Web
Técnicas de Programação para a Web
 
Palestra Plataforma .NET na ETEC Marília
Palestra Plataforma .NET na ETEC MaríliaPalestra Plataforma .NET na ETEC Marília
Palestra Plataforma .NET na ETEC Marília
 
JSP - Java Serves Pages
JSP - Java Serves PagesJSP - Java Serves Pages
JSP - Java Serves Pages
 
Web Sphere
Web SphereWeb Sphere
Web Sphere
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em Java
 
Desenvolvimento em .Net - Introducao A Framework
Desenvolvimento em .Net - Introducao A FrameworkDesenvolvimento em .Net - Introducao A Framework
Desenvolvimento em .Net - Introducao A Framework
 
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
 
Docker para devs .NET
Docker para devs .NETDocker para devs .NET
Docker para devs .NET
 
Desenvolvimento de Aplicações Corporativas com Java
Desenvolvimento de Aplicações Corporativas com JavaDesenvolvimento de Aplicações Corporativas com Java
Desenvolvimento de Aplicações Corporativas com Java
 
Java Web 1 Introducao
Java Web 1 IntroducaoJava Web 1 Introducao
Java Web 1 Introducao
 
1409243945064
14092439450641409243945064
1409243945064
 
Sistemas Distribuídos: RMI, CORBA e SOA
Sistemas Distribuídos: RMI, CORBA e SOASistemas Distribuídos: RMI, CORBA e SOA
Sistemas Distribuídos: RMI, CORBA e SOA
 
Futuro do ASP.NET vNext - MVP ShowCast
Futuro do ASP.NET vNext - MVP ShowCast Futuro do ASP.NET vNext - MVP ShowCast
Futuro do ASP.NET vNext - MVP ShowCast
 
Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01
 
Java web
Java webJava web
Java web
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
 
Tutorial Java EE
Tutorial Java EETutorial Java EE
Tutorial Java EE
 

Mais de Daniel Arndt Alves

Strings, Arrays e Manipulação Datas em PHP
Strings, Arrays e Manipulação Datas em PHPStrings, Arrays e Manipulação Datas em PHP
Strings, Arrays e Manipulação Datas em PHPDaniel Arndt Alves
 
Conceitos Básicos de Objetos Distribuidos
Conceitos Básicos de Objetos DistribuidosConceitos Básicos de Objetos Distribuidos
Conceitos Básicos de Objetos DistribuidosDaniel Arndt Alves
 
Exercicios - Java Swing Listeners
Exercicios - Java Swing ListenersExercicios - Java Swing Listeners
Exercicios - Java Swing ListenersDaniel Arndt Alves
 
Estrutura de Dados II - Plano de Ensino
Estrutura de Dados II - Plano de EnsinoEstrutura de Dados II - Plano de Ensino
Estrutura de Dados II - Plano de EnsinoDaniel Arndt Alves
 
Estrutura de Dados II - Apresentação da Disciplina
Estrutura de Dados II - Apresentação da DisciplinaEstrutura de Dados II - Apresentação da Disciplina
Estrutura de Dados II - Apresentação da DisciplinaDaniel Arndt Alves
 
Técnicas de Programação Aplicada III - Apresentação da Disciplina
Técnicas de Programação Aplicada III - Apresentação da DisciplinaTécnicas de Programação Aplicada III - Apresentação da Disciplina
Técnicas de Programação Aplicada III - Apresentação da DisciplinaDaniel Arndt Alves
 
Técnicas de Programação Aplicada III - Plano de Ensino
Técnicas de Programação Aplicada III - Plano de EnsinoTécnicas de Programação Aplicada III - Plano de Ensino
Técnicas de Programação Aplicada III - Plano de EnsinoDaniel Arndt Alves
 
Linguagem de Programação II - Plano de Ensino
Linguagem de Programação II - Plano de EnsinoLinguagem de Programação II - Plano de Ensino
Linguagem de Programação II - Plano de EnsinoDaniel Arndt Alves
 
Linguagem de Programação II - Apresentação da Disciplina
Linguagem de Programação II - Apresentação da DisciplinaLinguagem de Programação II - Apresentação da Disciplina
Linguagem de Programação II - Apresentação da DisciplinaDaniel Arndt Alves
 
Novos Recursos do Moodle 2.0 (Paper)
Novos Recursos do Moodle 2.0 (Paper)Novos Recursos do Moodle 2.0 (Paper)
Novos Recursos do Moodle 2.0 (Paper)Daniel Arndt Alves
 
Modelos de Integração Moodle - Sistemas de Gestão Acadêmicos e Administrativos
Modelos de Integração Moodle - Sistemas de Gestão Acadêmicos e AdministrativosModelos de Integração Moodle - Sistemas de Gestão Acadêmicos e Administrativos
Modelos de Integração Moodle - Sistemas de Gestão Acadêmicos e AdministrativosDaniel Arndt Alves
 

Mais de Daniel Arndt Alves (18)

Variaveis Superglobais
Variaveis SuperglobaisVariaveis Superglobais
Variaveis Superglobais
 
Programacao Modular
Programacao ModularProgramacao Modular
Programacao Modular
 
Strings, Arrays e Manipulação Datas em PHP
Strings, Arrays e Manipulação Datas em PHPStrings, Arrays e Manipulação Datas em PHP
Strings, Arrays e Manipulação Datas em PHP
 
Introducao ao PHP
Introducao ao PHPIntroducao ao PHP
Introducao ao PHP
 
Arquitetura web
Arquitetura webArquitetura web
Arquitetura web
 
HTML Básico
HTML BásicoHTML Básico
HTML Básico
 
Conceitos Básicos de Objetos Distribuidos
Conceitos Básicos de Objetos DistribuidosConceitos Básicos de Objetos Distribuidos
Conceitos Básicos de Objetos Distribuidos
 
Exercicios - Java Swing Listeners
Exercicios - Java Swing ListenersExercicios - Java Swing Listeners
Exercicios - Java Swing Listeners
 
Exercicios - Java Swing
Exercicios - Java SwingExercicios - Java Swing
Exercicios - Java Swing
 
Estrutura de Dados II - Plano de Ensino
Estrutura de Dados II - Plano de EnsinoEstrutura de Dados II - Plano de Ensino
Estrutura de Dados II - Plano de Ensino
 
Estrutura de Dados II - Apresentação da Disciplina
Estrutura de Dados II - Apresentação da DisciplinaEstrutura de Dados II - Apresentação da Disciplina
Estrutura de Dados II - Apresentação da Disciplina
 
Técnicas de Programação Aplicada III - Apresentação da Disciplina
Técnicas de Programação Aplicada III - Apresentação da DisciplinaTécnicas de Programação Aplicada III - Apresentação da Disciplina
Técnicas de Programação Aplicada III - Apresentação da Disciplina
 
Técnicas de Programação Aplicada III - Plano de Ensino
Técnicas de Programação Aplicada III - Plano de EnsinoTécnicas de Programação Aplicada III - Plano de Ensino
Técnicas de Programação Aplicada III - Plano de Ensino
 
Linguagem de Programação II - Plano de Ensino
Linguagem de Programação II - Plano de EnsinoLinguagem de Programação II - Plano de Ensino
Linguagem de Programação II - Plano de Ensino
 
Linguagem de Programação II - Apresentação da Disciplina
Linguagem de Programação II - Apresentação da DisciplinaLinguagem de Programação II - Apresentação da Disciplina
Linguagem de Programação II - Apresentação da Disciplina
 
Novos Recursos do Moodle 2
Novos Recursos do Moodle 2Novos Recursos do Moodle 2
Novos Recursos do Moodle 2
 
Novos Recursos do Moodle 2.0 (Paper)
Novos Recursos do Moodle 2.0 (Paper)Novos Recursos do Moodle 2.0 (Paper)
Novos Recursos do Moodle 2.0 (Paper)
 
Modelos de Integração Moodle - Sistemas de Gestão Acadêmicos e Administrativos
Modelos de Integração Moodle - Sistemas de Gestão Acadêmicos e AdministrativosModelos de Integração Moodle - Sistemas de Gestão Acadêmicos e Administrativos
Modelos de Integração Moodle - Sistemas de Gestão Acadêmicos e Administrativos
 

Java Platform, Enterprise Edition

  • 1. Universidade Presbiteriana Mackenzie   Aula  2:  Java  Enterprise  Edi3on  (Java  EE)   Prof. Ms. Daniel Arndt Alves Faculdade  de  Computação  e  Informá3ca   Computação e Informática Faculdade de Técnicas  de   Programação  Aplicada  III   Java  Enterprise  Edi.on   1  Daniel  Arndt  Alves  
  • 2. Tópicos  da  Aula   •  Comparação  com  Alterna.vas   de  Mercado   •  Visão  Geral  da  Plataforma   Java,  Enterprise  Edi.on   – Componentes   – Arquitetura  de  Aplicações  J2EE   – Classes  &  Pacotes   – APIs   – Servidores  de  Suporte   Java  Enterprise  Edi.on   2  Daniel  Arndt  Alves  
  • 3. Tópicos  da  Aula   •  Prá.ca  em  Java  EE   – Revisão:  Servlets   – Revisão:  JSP   •  História  do  MVC   •  Arquitetura  MVC   Java  Enterprise  Edi.on   3  Daniel  Arndt  Alves  
  • 4. Interação  Cliente  Servidor  na  Web   •  Código  Executado  no  Cliente   – Applets   – JavaScript   – VBScript   •  Código  Executado  no  Servidor   – CGI,  NSAPI,  ISAPI   – PHP,  ColdFusion,  ASP,  etc.   – Servlets   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   4  
  • 5. Alterna.vas  para  Desenvolvimento  Web   •  J2EE  (Java  PlaWorm,  Enterprise  Edi.on)   •  .NET   •  Django/Python   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   5  
  • 6. Alterna.vas  para  Desenvolvimento  Web   •  J2EE  (Java  Pla'orm,  Enterprise  Edi3on)   – Código  fonte  em  linguagem  Java   – Compilação  para  Bytecode   – JRE  (Java  Run3me  Environment)  interpreta  e   executa   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   6  
  • 7. Alterna.vas  para  Desenvolvimento  Web   •  .NET   – Independente  de  linguagem  de  programação  (VB,   C++,  C#,  ASP)   – Aplicações  executadas  em  um  contâiner  que   oferece  todo  o  suporte  necessário   – U.liza  os  componentes  de  gerenciamento  .NET   – Clientes  conectam-­‐se  via  ASP.NET,  através  de   interfaces  HTML,  XHTML  ou  WML   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   7  
  • 8. Alterna.vas  para  Desenvolvimento  Web   •  Django/Python   – Framerowk,  construído  em  linguagem  Python   – Criado  com  base  no  Ruby  on  Rails   – Linguagem  interpretada,  não  há  compilação   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   8  
  • 9. Alterna.vas  para  Desenvolvimento  Web   •  Qual  plataforma  u.lizar?   –  Escalabilidade e processos de clientes concorrentes: J2EE ou Django –  Rapidez no desenvolvimento para sistemas pequenos e médios: .NET ou Django –  Sistemas grandes que exigem alta padronização devido ao elevado número de desenvolvedores: J2EE –  Sistemas grandes em geral: J2EE ou Django –  Sistemas pequenos ou médios que exijam um tempo de acesso menor: .NET –  Sistemas comerciais pequenos ou médios: .NET   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   9  
  • 10. Java  PlaWorm,  Enterprise  Edi.on  (Java  EE)   •  Arquitetura  de  referência   •  Plataforma  de  Tecnologias   •  Desenvolvimento  de  aplicações  corpora.vas  distribuídas   •  Provê   –  Suporte  ao  gerenciamento  automá.co  de  componentes   –  Infra-­‐estrutura  de  serviços  complexos   •  Transações   •  Segurança   •  Persistência   •  Obje.vo  Central   –  Desenvolvedores  podem  concentrar-­‐se  no  desenvolvimento  da   lógica  de  negócio   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   10  
  • 11. Componentes  Java  EE   •  Aplicações  Java  EE   –  Cons.tuídas  por  componentes   •  Componente  Java  EE   –  Unidade  funcional  de  sosware   –  Formada  por   •  Conjunto  de  classes   •  Arquivos  relacionados   –  Pode  se  comunicar  com  outros  componentes   –  Pode  ser  reusado  durante  a  construção  de  aplicações   Java  EE   –  Deve  seguir  a  especificação  Java  EE   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   11  
  • 12. Daniel  Arndt  Alves   Java  Enterprise  Edi.on   12  
  • 13. Modelos  de  Componente  Java  EE   •  Aplicações  stand-­‐alone   –  aplicação  Java   –  man.dos  e  executados  no  cliente   –  GUI     •  Componentes  Web   –  Servlet   •  Objetos  Java  que  respondem   requisições  em  HTTP   •  Resposta  normalmente  é  HTML   gerado  dinamicamente   •  Man.dos  e  executados  no  servidor   –  JSP   •  Linguagem  de  script  adequada  para   escrita  de  servlets  de  apresentação   •  Applets   –  Normalmente  executados  dentro   do  browser   –  Man.dos  pelo  servidor  e   executados  no  cliente   •  Enterprise  JavaBeans  (EJBs)   –  componentes  man.dos  e   executados  em  um  ambiente   gerenciado  pelo  servidor  provê:     •  Monitoramento  transacional   •  Persistência   •  Distribuição  de  objetos   •  Segurança   –  Não  são  JavaBeans!   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   13   •  A  especificação  Java  EE  define  os  seguintes   componentes  Java  EE:  
  • 14. Exemplos  de  Componentes  Java  EE   •  Componentes  Clientes   – Applets   – Aplicações  java  Satand-­‐Alone   •  Componentes  Web   – Servlets   – JSPs   •  Componentes  EJB   – Session  Beans   – Message-­‐Driven  Beans   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   14  
  • 15. Arquitetura  de  Aplicações  Java  EE   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   15  
  • 16. Servidores  Java  EE   •  Componentes  Java  EE  são  instalados  em   servidores     •  Servidores   –  Oferecem  infra-­‐estrutura  para  gerenciamento  do  ciclo   de  vida  dos  componentes   –  Incluem  containers  Web  e  EJB   –  Provêem  diversos  serviços  para  os  componentes   •  Transações   •  Persistência   •  Segurança   •  Nomes   •  Distribuição   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   16  
  • 17. Java  EE  –  Tecnologias  Associadas   •  Panacéia  de  tecnologias   – Ambientes  de  desenvolvimento   – Servidores  de  aplicação   – Frameworks  de  apoio  ao  desenvolvimento   – Padrões  de  Projeto   – Ferramentas  de  geração  de  código   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   17  
  • 18. APIs  do  J2EE   •  O  Container  também  implementa  APIs  J2EE   – APIs  J2SE:  stand-­‐alone  (bibliotecas  simples)   – APIs  J2EE:  maior  dependência  de  serviços   •  XML-­‐RPC:  exige  server  HTTP   •  JMS:  exige  middleware  de  mensagens   •  Connector:  exige  bridges  com  outros  sistemas   •  EJB:  exige  servidor  RMI/IIOP   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   18  
  • 19. APIs  do  J2EE   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   19  
  • 20. APIs  do  J2EE:  Diversos   •  JavaMail   – Envio  e  recepção  de  e-­‐mail  por  POP,  IMAP,  SMTP   •  JavaBeans  Ac3va3on  Framework   – A.vação  de  funcionalidades  via  .pos  MIME   •  JNDI  (Java  Naming  and  Directory)   – LDAP,  NDS,  DNS,  NIS,  CosNaming;  serviços  J2EE   •  JAAS  (Autenthica.on  &  Authoriza.on  Service)   – Autorização  e  Auten.cação;  PAM   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   20  
  • 21. APIs  do  J2EE:  Middleware   •  JMS  (Java  Message  Service)   – Comunicação  assíncrona  robusta   •  JTA  (Java  Transac.on  API)   – Transações  de  alto  nível   •  JCA  (J2EE  Connector  Architecture)   – Integração  com  sistemas  não-­‐J2EE   •  JDBC  (Java  Database  Connec.vity)   – J2SE  +  DataSources,  transações  XA   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   21  
  • 22. APIs  do  J2EE:  Web   •  Servlets   –  Programação  Web  dinâmica   •  JSP  (Java  Sever  Pages)   –  Idem,  mais  visual   •  JSTL  (Java  Standard  Template  Library)   –  Idem,  mais  estruturado   •  JSF  (JavaServerFaces)   –  Idem,  implementando  o  MVC   •  Alterna3vas/Complementos:  Struts,  Spring...   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   22  
  • 23. APIs  do  J2EE:  XML  e  WebServices   •  JAXP  (Java  API  for  XML  Processing)   – DOM,  SAX,  XSLT   •  SAAJ  (SOAP  with  Axachments  API  for  Java)   – Web  Services:  SOAP  (modelo  documento)   •  JAX-­‐RPC  (Java  API  for  XML-­‐based  RPC)   – Web  Services:  SOAP  (modelo  RPC),  WSDL   •  JAXR  (Java  API  for  XML  Registries)   – Web  Services:  UDDI  /  ebXML   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   23  
  • 24. APIs  do  J2EE:  EJB   •  EJB  (Enterprise  Java  Beans)   – Componentes  Distribuídos;  Session;  RMI/IIOP   •  EJB  BMP/CMP/CMR   – En.ty;  Persistência  Automá.ca  (mapeamento   O/R)   •  EJB  MDB  (Message-­‐Driven  Beans)   – Facilidade  de  alto  nível  para  JMS  e  Web  Services   •  Transações,  Segurança   – Facilidades  declara.vas   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   24  
  • 25. APIs  do  J2EE:  Persistência  de  Dados   •  JPA  (Java  Persistence  API)   – En.ty;  Persistência  Automá.ca   (mapeamento  O/R)   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   25  
  • 26. Padrões  do  JCP   •  JCP:  Um  processo  aberto  e  par.cipa.vo,  com  o   obje.vo  de  definir  e  manter  todos  os  padrões  Java   •  Java  EE  6   –  Padroniza  quase  tudo:   •  APIs   •  Schemas,  Deployment   •  Comportamentos  (ciclos  de  vida,  etc.)   –  Não  contempla:   •  Ferramentas,  Metodologias   •  QoS   •  Integração  (ex.:  suporte  a  SGBDs  e  middlewares)   •  hxp://www.oracle.com/technetwork/java/javaee/ blueprints/index.html   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   26  
  • 27. Servidor  de  Aplicação   •  O  Java  EE  é  um  grande  conjunto  de   especificações,  formatada  em  um  grande   arquivo  PDF,  uma  especificação,  detalhando   quais  especificações  fazem  parte  deste.   •  Para  u.lizarmos  o  sosware,  é  necessário  fazer   o  download  de  uma  implementação  destas   especificações   •  Existem  diversas  implementações.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   27  
  • 28. Servidor  de  Aplicação   •  Como  este  sosware  tem  o  papel  de  servir  sua   aplicação  para  auxiliar  com  serviços  de  infraestruturas,   recebe  o  nome  de  servidor  de  aplicação.   •  Alguns  exemplos:   –  RedHat,  JBoss  Applica.on  Server,  gratuito,  Java  EE  5.   –  Sun/Oracle,  GlassFish,  gratuito,  Java  EE  6.   –  Apache,  Geronimo,  gratuito,  Java  EE  5.   –  Oracle/BEA,  WebLogic  Applica.on  Server,  Java  EE  5.   –  IBM,  WebSphere  Applica.on  Server,  Java  EE  5.   –  Sun/Oracle,  Sun  Java  System  Applica3on  Server  (baseado   no  GlassFish),  Java  EE  5.   –  SAP,  SAP  Applica3on  Server,  Java  EE  5.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   28  
  • 29. Servlet  Container   •  Algumas  implementações  do  J2EE  para  o   desenvolvimento  web:   –  JSP  –  Java  Server  Pages   –  Servlets   –  JSTL  –  Java  Server  Standard  Tag  Library   –  JSF  –  Java  Server  Faces   •  Servlet  container:  é  um  servidor  que  suporta   estas  funcionalidades,  mas  não  necessariamente   implementa  a  especificação  Java  EE  completa.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   29  
  • 30. Servlet  -­‐  Conceito   •  Aplicação  Java  executada  do  lado  do  servidor,   estendendo  a  capacidade  do  servidor  web   – Alterna.va  Java  para  os  scripts  CGI   – Gerenciado  pelo  módulo  web   •  Vantagens   – Melhor  aproveitamento  dos  recursos  do  sistema   – Fácil  de  programar   – Portável   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   30  
  • 31. Arquitetura  Cliente-­‐Servidor   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   31   GET (request) Documento HTML retorna (response) Documento HTML Cliente / Browser Servidor Formulário Submetido via POST (request) Servidor retorna HTML gerado pelo Servlet
  • 32. Arquitetura  Cliente-­‐Servidor   •  Arquitetura  baseada  na  divisão  do   processamento  em  processos  dis.ntos   –  Servidor   •  responsável  pela  manutenção  da  informação   –  Clientes   •  responsáveis  pela  obtenção  dos  dados   •  envio  de  pedidos  ao  processo  servidor   •  Cliente  faz  requisições  u.lizando  protocolo  HTTP   •  Para  cada  requisição  o  servidor  cria  uma  nova   Thread   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   32  
  • 33. Requisitando  um  Servlet  via  GET   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   33   GET (HTTP) http://localhost/servlet/ServletHyperMed?Comando=SetCtxLabPorNome&Por=&No=Apsen
  • 34. Requisitando  um  Servlet  via  POST   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   34  
  • 35. Servlet  API   •  Java Servlet API –  Conjunto de classes Java –  Define interface padrão entre o cliente web e o servidor web java.lang.Object | +----javax.servlet.GenericServlet | +----javax.servlet.http.HTTPServlet | +----br.mackenzie.fci.tpa3.MeuServlet Daniel  Arndt  Alves   Java  Enterprise  Edi.on   35  
  • 36. HxpServlet   •  Tratador  de  requisições  HTTP   •  Trata  métodos  HTTP  específicos   –  doGet(HttpServletRequest req, HttpServletResponse resp) –  doPost(HttpServletRequest req, HttpServletResponse resp) •  doGet  e  doPost   –  Chamados  pelo  método  service() •  Subclasses  reescrevem  os  métodos   –  doGet –  doPost •  Podem  reescrever  os  métodos     –  init() –  destroy() Daniel  Arndt  Alves   Java  Enterprise  Edi.on   36  
  • 37. Ciclo  de  Vida  do  Servlet   •  Criação  e  inicialização   – Realizado  uma  única  vez   •  init(ServletConfig config) – Sempre  chama  o  método  da  super  classe  primeiro   •  super.init(config) – Pode  sinalizar  a  exceção   UnavailableException  caso  ocorra  algum   erro  durante  o  processo  de  inicialização   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   37  
  • 38. Ciclo  de  Vida  do  Servlet   •  Os  médotos  service(),  doGet(),   doPost()  são  chamados  para  atender   requisições  de  clientes   – Cada  requisição  é  atendida  por  uma  nova  thread   •  destroy()  e  Garbage  Collec3on   – Executado  somente  uma  vez   – Alguns  servidores  somente  removem  o  servlet   quando  ocorre  o  shutdown   – U.lizado  para  liberar  recursos   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   38  
  • 39. Java  Servlet  API   •  Para  criar  um  Servlet  é  necessário   – Estender  a  classe  HxpServlet     •  pacote  javax.servlet.http  do  JSDK   – Implementar  os  métodos  doGet  ou  doPost Daniel  Arndt  Alves   Java  Enterprise  Edi.on   39  
  • 40. Request  &  Response   •  Métodos  doGet(),  doPost()  recebem   dois  parâmetros   – HttpServletRequest     •  encapsula  os  parâmetros  da  requisição   – HttpServletResponse •  encapsula  a  resposta  ao  cliente   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   40  
  • 41. HttpServletRequest •  Interface  que  encapsula  a  requisição  feita  pelo   cliente  através  do  protocolo  HTTP   •  Possui  métodos  que  permitem  recuperar  os   dados  da  requisição   – cabeçalho   – dados  de  formulários  ou  parâmetros  enviados   – informações  sobre  a  sessão  do  cliente   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   41  
  • 42. HttpServletRequest •  Alguns  métodos  definidos  em   HttpServletRequest  para  manipulação  de   Parâmetros   –  java.util.Enumeration getParameterNames()     •  Obtém  listagem,  contendo  nomes  de  parâmetros  da  requisição   –  java.lang.String[] getParameterValues(java.lang.String name) •  Obtém  valores  do  parâmetro  “name”  da  requisição   –  java.lang.String getParameter(java.lang.String name)     •  Obtém  valor  do  parâmetro  “name”  da  requisição   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   42  
  • 43. HttpServletResponse •  Interface  que  encapsula  a  resposta  ao  cliente   •  Possui  um  método  responsável  por  recuperar   o  canal  de  resposta  com  o  cliente   – getWriter() – retorna  um  PrintWriter Ex:    PrintWriter out = response.getWriter();              out.println(“Escrevendo no cliente”); Daniel  Arndt  Alves   Java  Enterprise  Edi.on   43  
  • 44. HttpServletResponse •  Também  é  possível  configurar  qual  é  o  .po   dos  dados  que  estão  sendo  enviados  de  volta   ao  cliente   – setContentType(String type) – Os  .pos  mais  comuns  são  text/html,  text/xml   – O  método  setContentType  deve  ser  chamado   antes  do  método  getWriter Daniel  Arndt  Alves   Java  Enterprise  Edi.on   44  
  • 45. Servlet  Exemplo:  Hello  World!   package tpa3.servlets; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Hello World!</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hello World!</h1>"); out.println("</body>"); out.println("</html>"); } } Daniel  Arndt  Alves   Java  Enterprise  Edi.on   45   Hello  World!  
  • 46. Servlet  Exemplo:  RequestParam   import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class RequestParamExample extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("GET Request. No Form Data Posted"); } ... Daniel  Arndt  Alves   Java  Enterprise  Edi.on   46  
  • 47. Servlet  Exemplo:  RequestParam   ... @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { Enumeration e = request.getParameterNames(); response.setContentType("text/html"); PrintWriter out = response.getWriter(); while (e.hasMoreElements()) { String name = (String) e.nextElement(); String value = request.getParameter(name); out.println(name + " = " + value); } } } Daniel  Arndt  Alves   Java  Enterprise  Edi.on   47  
  • 48. Gerenciamento  de  Sessão   •  Protocolo  HTTP   – Protocolo  sem  estado   •  Não  é  possível  a  princípio  conhecer  o  estado   do  cliente  anterior  à  uma  requisição   •  O  gerenciamento  de  sessão  provê  uma   maneira  de  iden.ficar  usuários  através  de   várias  requisições  HTTPs  e  recuperar  suas   informações   – Dados  do  estado  do  cliente   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   48  
  • 49. Gerenciamento  de  Sessão   •  Para  obter  uma  sessão   – H[pSession  getSession()   •  Obtém  sessão  existente,  caso  não  exista  retorna  uma   nova  sessão     – H[pSession  getSession(boolean  create)     •  Obtém  sessão  existente  ou  cria  uma  nova  sessão   dependendo  do  valor  do  parâmetro  create   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   49  
  • 50. Gerenciamento  de  Sessão   •  Métodos  para  manipulação  de  objetos  em  sessão   –  void removeAttribute(String name) •  Re.ra  objeto  da  sessão   –  void setAttribute(String name, Object value) •  Coloca  ou  sobreescreve  objeto  na  sessão  iden.ficado  por   name   –  java.lang.Object getAttribute(String name) •  Obtém  objeto  da  sessão   –  java.util.Enumeration getAttributeNames() •  Obtém  os  nomes  de  todos  os  objetos  armazenados  na   sessão   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   50  
  • 51. Gerenciamento  de  Sessão   •  Tempo  de  duração  da  sessão   – Sessões  em  geral  tem  intervalo  máximo  de  tempo   que  podem  ficar  ina.vas   •  public int getMaxInactiveInterval() •  public void setMaxInactiveInterval(int interval) – As  sessões  também  podem  ser  encerradas   explicitamente  pelo  programador   •  public void invalidate() Daniel  Arndt  Alves   Java  Enterprise  Edi.on   51  
  • 52. Colocando  para  Funcionar   •  Para  que  o  servlet  “funcione”   –  Necessário  que  um  servidor  web/aplicação  com  suporte  a   java  que  escute  as  requisições  do  cliente   –  Ex:   •  IBM  WebSphere  Applica.on  Server   •  Jakarta  Tomcat   •  Java  Web  Server   •  GlassFish   •  Etc.   –  Jakarta  Tomcat   •  Servidor  gratuito  baseado  em  java     •  Configurável  de  maneira  simples  via  XML     •  Oferece  suporte  a  Java  (Servlets  e  JSP)   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   52  
  • 53. Tomcat  x  GlassFish   •  O  Tomcat:  é  um  servlet  container  simples,  que   pode  hospedar  JSP  e  servlets.     •  O  GlassFish  é  mto  mais  poderoso.   – GlassFish  além  de  ser  um  servlet  container,   também  é  uma  pilha  de  aplicação  compa~vel  com   aplicação  de  servidor  que  inclui  uma  pilha  de   serviços  Web  (Metro),  EJBs,  Java  Persistence,  JMS,   JavaMail  e  muitos  outros  incluídos  na   especificação  J2EE.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   53  
  • 54. Arquitetura  JSP   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   54   HTML de resposta montado a partir de sucessivos comandos out.println(...). Servlet + Controladores (Controle) Objetos de Negócio (Modelo) JavaBean de Resposta Browser JSP doGet() (Visão)  
  • 55. JSP  -­‐  Conceito   •  Tecnologia  que  permite  combinar  informações  está.cas  com  informações   geradas  dinamicamente   •  Script  executado  no  servidor   –  Combinação  de  sintaxe  JSP  e  tags  de  marcação   –  Tags  está.cos   •  HTML,  XML   –  Conteúdo  dinâmico  gerado  pelo  código  do  script   •  Java   •  Exemplo   <html> <head> <title>Primeiro JSP</title> </head> <body> <h1>Data e hora: <%= new java.util.Date() %></h1> </body> </html> Daniel  Arndt  Alves   Java  Enterprise  Edi.on   55  
  • 56. Compilação  de  JSP   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   56   xxx.jsp requisição para xxx.jsp resposta resposta de erro xxx.class (servlet) Geração de Código Java xxx.java (servlet) Compilação
  • 57. Tags  JSP   •  Dire.vas   –   Configuração  do  processador  JSP   –   Inclusão  está.ca  de  conteúdo     –   Encaminhamento  de  requisições  para  outros   servidores   •  Comandos  de  script   –  Inserção  de  código  para  a  programação  de  conteúdo   dinâmico       •  Ações   –  Tags  de  alto  nível  que  encapsulam  padrões  de   programação  mais  corriqueiros   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   57  
  • 58. Dire.vas  JSP   <%@ nome-da-diretiva [nome-atributo = "valor-do- atributo"]* %> •  Diretivas disponíveis –  <%@ include file="url-relativa" %> •  Inclusão em tempo de compilação –  <%@ taglib uri="url-relativa-da- biblioteca-de-tags" prefix="prefixo-das-tags" %> –  <%@ page lista-de-atributos %> Daniel  Arndt  Alves   Java  Enterprise  Edi.on   58  
  • 59. Atributos  da  Dire.va  Page   •  language="nome-­‐da-­‐linguagem-­‐de-­‐script"   •  contentType="mime-­‐type  |  mime-­‐type;  charset=nome-­‐ charset"   •  errorPage="url-­‐página-­‐de-­‐erro"   •  isErrorPage="true  |  false"   •  buffer="none|tamanho-­‐em-­‐kb"     •  auto-­‐flush="true  |  false"               •  import="lista-­‐de-­‐pacotes"                       •  extends="nome-­‐da-­‐classe-­‐base"   •  session="true  |  false"   •  isThreadSafe="true  |  false"   •  info="texto-­‐informa.vo"   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   59  
  • 60. Exemplos  de  Dire.vas   •  Diretiva Include <%@ include file="/teccommdoc/header.html" %> •  Diretiva Taglib <%@ taglib uri="/tags/teccommtags" prefix="teccomm" %> <teccomm:exemplo parametro="demonstracao" /> •  Diretiva Page <%@ page language="java" errorPage="erro.jsp" isErrorPage="false" buffer="12kb" auto- flush="true" session="true" isThreadSafe="true" info="TecComm" %> •  Ou <%@ page language="java" %> <%@ page errorPage="erro.jsp" %> <%@ page import="com.teccomm.output.*" %> Daniel  Arndt  Alves   Java  Enterprise  Edi.on   60  
  • 61. Tags  de  Script   •  Declarações <%! declaração %> •  Scriptlets <% comandos %> •  Expressões <%= expressão %> •  Comentários <!-- comentário html --> <%-- comentário jsp --> Daniel  Arndt  Alves   Java  Enterprise  Edi.on   61  
  • 62. Declarações   •  <%! declarações %> •  Exemplos <%! int i = 0; public void metodo {...} %> <%! int a, b, c; %> <%! Circle a = new Circle(2.0); %> •  Declara variáveis ou métodos a serem utilizados no código JSP Daniel  Arndt  Alves   Java  Enterprise  Edi.on   62  
  • 63. Scriptlets   •  <% fragmento_de_código_válido %> •  Exemplo <% String name = null; if (request.getParameter(“nome") == null) { %> <%@ include file="error.html" %> <% } else { foo.setName(request.getParameter(“nome")); } %> •  Um scriptlet pode conter qualquer número de instruções, variáveis, métodos, declarações ou expressões válidos Daniel  Arndt  Alves   Java  Enterprise  Edi.on   63  
  • 64. Expressão   •  <%= expressão %> •  Exemplo O mapa tem <font color="blue"><%= mapa.getCount() %></font> entradas. •  Esta tag contém uma expressão que é avaliada e convertida para string, depois de processada. Daniel  Arndt  Alves   Java  Enterprise  Edi.on   64  
  • 65. Comentários   •  <!-- comentário [ <%= expressão %> ] --> •  Exemplo <!-- Comentário --> <!-- Esta página foi carregada em <%= (new java.util.Date()).toLocaleString() %> --> •  O processador JSP trata um comentário como texto HTML não interpretado, retornando-o ao cliente. •  Uma expressão pode ser incluída em um comentário, sendo avaliada e seu resultado é retornado ao usuário juntamente com o HTML de resposta Daniel  Arndt  Alves   Java  Enterprise  Edi.on   65  
  • 66. Comentários  para  Desenvolvimento   •  <%-- comentário --%> •  Exemplo <%@ page language="java" %> <html><head><title>Um teste - comentário</title></head> <body><h2>Um teste - comentário</h2> <%-- Este comentário não estará disponível para o cliente --%> </body></html> •  O processador JSP simplesmente ignora este tipo de comentário e não processa nenhum código ou expressão contida entre os delimitadores. •  Este tipo de comentário não será enviado para o cliente Daniel  Arndt  Alves   Java  Enterprise  Edi.on   66  
  • 67. Objetos  Pré-­‐Definidos   •  Disponíveis  para  scriplets  e  expressões   – request   – response   – session   – out   – excep3on  (somente  em  páginas  de  erro)   – page   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   67  
  • 68. Ações   •  jsp:include •  jsp:forward – ou  então  tags  personalizadas  via  taglib   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   68  
  • 69. jsp:include e jsp:forward •  Ações  u.lizadas  para  o  encadeamento  de   páginas  jsp   –  <jsp:include page="url-relativa-da-página" /> •  Suspende  o  processamento  da  página  chamadora  e   repassa  o  controle  para  a  página  chamada  até  que  esta   retorne-­‐o   –  <jsp:forward page="url-relativa-da-página" /> •  O  processamento  da  página  chamadora  é  terminado  e   o  controle  é  repassado  sem  espera  de  retorno  para  a   página  chamada   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   69  
  • 70. jsp:include <jsp:include page="{URLrelativa |<%=expressão%>}"/> •  Exemplos: <jsp:include page="scripts/login.jsp" /> <jsp:include page="copyright.html" /> <jsp:include page="/index.html" /> Daniel  Arndt  Alves   Java  Enterprise  Edi.on   70  
  • 71. jsp:forward <jsp:forward page="{URLrelativa|<%=expressão%>}"/> •  Exemplo <jsp:forward page="scripts/login.jsp" /> •  A tag <jsp:forward> repassa o objeto request enviado para o arquivo JSP para que seja processado por outra aplicação •  •  O processador JSP não executa o restante das instruções contidas após a tag. Daniel  Arndt  Alves   Java  Enterprise  Edi.on   71  
  • 72. Servlet  +  Orientação  a  Objetos   •  Agora  sabemos     – Programar  servlets   – Modelar  um  sistema  orientado  a  objetos   •  Mas  como  fazer  os  dois  funcionarem  juntos?   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   72  
  • 73. Servlet  +  Orientação  a  Objetos   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   73   browser HTTP Servlet NewClass5 NewClass NewClass4NewClass6 NewClass7 NewClass2 NewClass3 NewClass8 NewClass9 NewClass10 ??
  • 74. Arquitetura  MVC   •  O que é MVC? –  MVC – Model-View-Controller –  Surgiu nos anos 80 com SmallTalk •  Sugere a divisão de uma aplicação visual em 3 partes fundamentais –  Model •  Representa o modelo da sua aplicação, com as regras de negócio (business logic) e todo o processamento da aplicação –  View •  Representa a informação e recolhe os dados fornecidos pelo usuário –  Controller •  Recebe as informações da entrada e as transmite para o modelo Daniel  Arndt  Alves   Java  Enterprise  Edi.on   74  
  • 75. Mo.vação  para  a  Arquitetura  MVC   •  An.gamente:   –  Forms  com  ações  locais   –  Lógica  de  negócio  na  view   –  Acesso  descentralizado  e  não  padronizado  ao  BD   •  Evolução:   –  Stored  Proedures:  .ra  a  lógica  de  negócio  da  view  e  a   coloca  no  BD.   •  Manutenção  Custosa   •  Adição  de  novas  funcionalidades,  normalmente   altera  o  funcionamento  das  an.gas   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   75  
  • 76. História  do  MVC   •  O  que  precisou  para  que  o  MVC  pudesse  surgir?   •  Orientação  a  Objetos  (C++,  Smalltalk)   •  Padrões  de  Projeto  (Design  PaGerns)   –  Um  Design  PaGern  surge  para  resolver  um  problema   que  muitos  programadores  encontram.   –  Se  muitos  desenvolvedores  encontra,  muitas  soluções   surgem.   –  Através  da  colaboração,  as  soluções  são  maturadas  e   eventualmente  uma  ou  mais  soluções  emergem  como   Padrões  de  Projeto  (Design  PaGern)   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   76  
  • 77. História  do  MVC   •  Existem  Design  PaGerns  para  Undo/Redo,   padronizar  comandos,  padronizar  a  criação  de   objetos,  entre  outros.   •  Um  dos  Design  PaGerns  que  foi  essencial  para  a   ciração  do  padrão  MVC  foi  o  padrão  Controller.   •  Um  Controller  se  responsabiliza  por  receber  as   requisições  (normalmente,  proveniente  dos   atores  do  Diagrama  de  Casos  de  Uso)  e   redireciona  o  processamento  para  um  objeto  que   consegue  dar  a  resposta  adequada  à  requisição   que  chegou.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   77  
  • 78. História  do  MVC   •  O  MVC  foi  inicialmente  proposto  por  R.   Trygve,  da  Xerox  Labs,  em  1978.   •  Note,  então  que  o  Controller  não  responde   diretamente  às  requisições,  ele  direciona  o   processamento  para  quem  pode  fazer  isso   adequadamente.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   78  
  • 79. Arquitetura  MVC   •  Pela arquitetura, a interação de um usuário com o sistema se dá através de sequências de chamadas MVC Daniel  Arndt  Alves   Java  Enterprise  Edi.on   79   Servlet + Controladores (Controle) Objetos de Negócio (Modelo) JavaBean de Resposta Browser JSP doGet() (Visão)  
  • 80. Padrão  MVC   •  O  que  é  o  padrão  MVC?   •  Em  uma  aplicação  real,  e  mais  ainda  em   aplicações  que  empregam  banco  de  dados,  o   fluxo  de  dados  de  uma  operação  tem  de  seguir   um  caminho  específico:   –  Encontrar  a  chave  primária  do  dado  na  tabela   –  Requisitar  o  registro   –  Requisitar  os  registros  das  tabelas  referenciadas   através  de  chaves  estrangeiras   –  Atualizar  dados   –  Realizar  o  commit  das  mudanças  nas  tabelas   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   80  
  • 81. Padrão  MVC   •  Normalmente,  esse  fluxo  de  operações  faz   sen.do  ao  se  olhar  a  modelagem  do  banco  de   dados  para  a  aplicação,  mas  não  faz  o  menor   sen.do  para  o  usuário  final.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   81  
  • 82. Padrão  MVC   •  Qual  o  obje.vo  então?   •  Fazer  uma  abstração  dos  dados  no  domínio,   de  modo  que  a  informação  que  o  usuário   analisa  é  a  mesma  informação  que  o  domínio   mantém,  mas  não  necessariamente  na  mesma   forma.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   82  
  • 83. Padrão  MVC  -­‐  Camadas   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   83   View   View   View   Controller   Model   Model   BD  
  • 84. Padrão  MVC  -­‐  Model   •  O  model  deve  fazer  a  ponte  entre  a   representação  que  o  usuário  interage  e  a   representação  que  o  sistema  armazena  em  seu   banco  de  dados.   •  Quando  os  dados  da  aplicação  são  armazenados   em  banco  de  dados,  a  camada  model  trata  da   interação  entre  a  aplicação  e  o  seu  banco  de   dados.   •  O  Framework    Hibernate  pode  ser  empregado   como  model,  por  exemplo.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   84  
  • 85. Padrão  MVC  -­‐  View   •  A  view  tem  por  obje.vos  realizar  a  interação  com   o  usuário.   •  Chamada  de  camada  de  apresentação  ou  de   camada  de  visualização.   •  Apresenta  informações  para  o  usuário,  e  coleta   informações  dele.   •  A  view  pode  mostrar  a  informação  do  mesmo   modo  em  que  está  no  domínio,  ou  alterar  a   forma  de  apresentação  desta  informação,   ressaltando  que  a  informação  é  a  mesma.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   85  
  • 86. Padrão  MVC  -­‐  View   •  Por  exemplo,  pode-­‐se  apresentar  dados   esta~s.cos  sobre  o  acesso  a  um  determinado   website  em  uma  tabela.   •  Ou,  então,  pode  mostrar  esses  mesmos  dados   em  um  gráfico,  histograma,  ou  em  uma   .meline.   •  Ou,  apresentar  os  resultados  em  uma  página   web,  empregando  JSP  –  Java  Server  Pages,   por  exemplo.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   86  
  • 87. Padrão  MVC  -­‐  Controller   •  O  Controller  tem  por  função  receber  as   requisições  da  view  e  direcionar  o   processamento  para  uma  classe  que  possa   responder  adequadamente  à  requisição.   •  A  maioria  das  implementações  de  MVC  em   Frameworks,  encapsula  o  Controller,  de  forma   que  ele  fique  oculto.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   87  
  • 88. Padrão  MVC  -­‐  Controller   •  Isso  acontece  porque  é  muito  fácil  colocar   implementações  que  não  se  encaixam  no  padrão   Controller  em  um  Controller,  e  então,  seu   “Controller”  perde  a  caracterís.ca  de  um   Controller.  A  par.r  desse  ponto,  a  tendência  é   que  se  perca  o  controle  sobre  a  separação  em   camadas.   •  Uma  servlet  e  classes  auxiliares,  que  ficam  com  a   lógica  de  negócio,  ou  regras  de  negócio,  onde   estariam  o  código  Java,  por  exemplo.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   88  
  • 89. Padrão  MVC  -­‐  Controller   •  Pode  ser  empregadas  outras  tecnologias,  tais   como  JSF  –  Java  Server  Faces.   •  Esta  especificação  é  baseada  em   componentes  e  possui  facilidades  para  o   desenvolvimento  de  interfaces  gráficas.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   89  
  • 90. Padrão  MVC  –  Java   •  Em  linguagem  Java,  existem  diversas   implementações  do  padrão  MVC,  dentre  elas:   – Struts   – JSF   – Sping   – Vraptor   – JSP/Servlet   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   90  
  • 91. Modelo  MVC  -­‐  Java   •  Para  se  implementar  o  modelo  MVC  em   linguagem  Java,  u.lizando  JSP  e  Servlets,   u.lizamos  a  seguinte  arquitetura:   – View  =  JSP   – Controller  =  Servlet   – Model  =  DAO   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   91  
  • 92. DAO   •  O  padrão  DAO  é  visto  em  Banco  de  Dados  e  JDBC.   •  DAO  é  a  sigla  para  Data  Access  Object,  e  é   literalmente  um  objeto  para  acessar  dados.  Esses   dados,  no  caso,  estão  armazenados  no  banco  de   dados.   •  A  proposta  é  encapsular  o  acesso  ao  banco  de   dados,  de  dorma  que  a  aplicação  externa  (for  a   do  DAO),  o  acesso  aos  dados  se  resuma  a   execução  de  uma  função  em  um  objeto  DAO.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   92  
  • 93. DAO   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   93  
  • 94. JavaBeans   •  A  aplicação  está  dividida  em  camadas.  Como   que  se  dá  a  comunicação  entre  as  camadas?   •  Como  que  a  informação  de  uma  camada  para   a  outra,  do  BD  até  o  usuário  e  vice-­‐versa?   •  A  informação  e  passada  em  JavaBeans.   •  JavaBeans  são  simplesmente  classes  Java,  com   membros  não  públicos,  construtor  vazio  e   gexers/sexers  para  todos  os  membros.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   94  
  • 95. Servlets  sem  MVC   •  Esses  servlets  faziam  tudo,  como  vimos:   –  Recebiam  a  requisição  do  cliente.   –  Validavam  a  requisição.   –  Conectavam  com  o  banco  de  dados  para  pegar  dados   e  responder  à  requisição.   –  Montavam  a  resposta.   –  Escreviam  o  código  HTML  da  resposta.   •  O  código  desses  servlets  era  imenso,  altamente   acoplado,  diƒcil  de  dar  manutenção  e  diƒcil  de   localizar  e  corrigir  erros.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   95  
  • 96. Servlets  com  MVC   •  Qual  o  papel  do  Servlet  no  MVC?   •  O  JSP  se  responsabiliza  pela  view.   •  O  ideal  é  que  o  JSP  não  tenha  de  realizar   nenhum  processamento  para  a  montagem  da   resposta.   •  Todos  os  dados  rela.vos  à  resposta  devem   estar  disponíveis,  quando  o  JSP  for  montar  seu   código  HTML.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   96  
  • 97. Servlets  com  MVC   •  O  papel  do  Servlet,  então,  e  não  exatamente   coletar  estes  dados,  mas  controlar  os  objetos   que  podem  coletar  estes  dados.  De  posse  dos   dados,  então  redirecionar  o  processamento   para  o  JSP.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   97  
  • 98. Estrutura  do  Servlet   •  Um  servlet  é  uma  classe  que  herda  da  classe   javax.servlet.http.HttpServlet:   public class SCPF extends HttpServlet { Daniel  Arndt  Alves   Java  Enterprise  Edi.on   98  
  • 99. Estrutura  do  Servlet   •  A  classe  HttpServlet  tem  diversas  funções  que  podem   ser  sobrecarregadas  em  um  Servlet,  com  destaque  para:   @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } Daniel  Arndt  Alves   Java  Enterprise  Edi.on   99  
  • 100. Estrutura  do  Servlet   protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { /* TODO output your page here. You may use following sample code. */ out.println("<html>"); out.println("<head>"); out.println("<title>Servlet SCPF</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Servlet SCPF at " + request.getContextPath() + "</ h1>"); out.println("</body>"); out.println("</html>"); } finally { out.close(); } } Daniel  Arndt  Alves   Java  Enterprise  Edi.on   100  
  • 101. Considerações   •  O  exemplo  anterior  ilustra  a  forma  tradicional  de   se  implementar  um  Servlet.   •  Se  adquire  um  objeto  PrintWriter  para   escrever  a  resposta  ao  usuário,  e  se  começa  a   escrever  o  código  HTML.   •  Esta  é  a  forma  que  não  queremos  usar!   •  Nota:  Para  usarmos  o  Servlet  da  forma  que   queremos,  usando  o  padrão  MVC,  é  essencial   que  nenhuma  saída  seja  escrita  no  response   para  o  usuário.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   101  
  • 102. RequestDispatcher •  O  servlet  MVC  deve  se  comportar  apenas  como  um   gerenciador  de  requisições.   •  Para  que  isso  possa  funcionar  adequadamente,   precisamos  u.lizar  o  RequestDispatcher,  em   conjunto  com  o  setAttribute  do  request.   •  Usando  desta  forma,  o  servlet  tem  o  seguinte  fluxo:   –  Recebe  a  requisição   –  Redireciona  para  alguém  que  saiba  tratar  a  resposta   –  Configura  os  valores  nos  atributos  do  request –  Redireciona  para  algum  JSP,  que  contém  o  código  HTML.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   102  
  • 103. Exemplo   •  servletToJSP.java   protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // faz alguma coisa aqui para tratar a requisição // ... // Configura os parâmetros da resposta request.setAttribute("servletName", "servletToJSP"); // Envia dos dados ao JSP para renderização e exibição ao usuário try{ getServletConfig().getServletContext().getRequestDispatcher("/Demo/ scpf.jsp").forward(request, response); } catch(ServletException e){ e.printStackTrace(); } catch(IOException e){ e.printStackTrace(); } } Daniel  Arndt  Alves   Java  Enterprise  Edi.on   103  
  • 104. Exemplo   •  scpf.jsp   <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h1>I have been invoked by <% out.print(request.getAttribute("servletName").toString()); %> Servlet!</h1> </body> </html> Daniel  Arndt  Alves   Java  Enterprise  Edi.on   104  
  • 105. Exemplo   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   105  
  • 106. Java  Enterprise  Edi.on   106  Daniel  Arndt  Alves  
  • 107. Java  Enterprise  Edi.on   107  Daniel  Arndt  Alves  
  • 108. Imagens   •  hxp://www.digitalprank.org/wp-­‐content/uploads/2008/03/ejb.png   •  hxp://sandersconsul.ng.com/Portals/58319/images/checklist.jpg     •  hxp://vip.cs.utsa.edu/classes/cs4393f2006/lectures/images/ overview-­‐j2eeArchitecture.gif     •  hxp://www.dave-­‐woods.co.uk/wp-­‐content/uploads/2010/02/ screens.gif     •  hxp://www.ishopping.pk/product_images/y/423/iMac-­‐ Lion__45051_std.png     •  hxp://www.wegotserved.com/wp-­‐content/uploads/2011/08/ MacMiniServer.jpg     •  hxp://sao-­‐paulo.pm.org/sta.c/images/equinocio/2010/mar/dbic/ Normalized-­‐Schema.png     Daniel  Arndt  Alves   Java  Enterprise  Edi.on   108  
  • 109. Obrigado     Daniel  Arndt  Alves   daniel.alves@mackenzie.br   Java  Enterprise  Edi.on   109  Daniel  Arndt  Alves