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
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
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
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
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
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
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
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
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