Action - CCSL

Propaganda
Java para Web com Struts
Danilo Toshiaki Sato
[email protected]
Treinamento ALESP – SPL
Módulo I
Visão Geral
 Curso Dividido em 3 módulos
 Módulo I (Geral)
 Java para Web
 MVC
 Struts Básico
 Módulo II (Struts)
 Model
 Controller
 Módulo III (Struts)
 View
Copyleft 2006 Danilo Sato
2
Agenda - Módulo I
1. Web
1. Partindo do princípio: HTTP, HTML
2. Java para Web: Servlets, JSP
2. MVC (Model-View-Controller)
3. Outras tecnologias utilizadas
1. Java Beans
2. XML
4. Struts básico
Copyleft 2006 Danilo Sato
3
Web - HTTP
 HTTP = Hypertext Transfer Protocol
 Protocolo que é a fundação da Web
 Orientado a transações de
transferência de dados entre cliente e
servidor
 Implementado sobre TCP/IP
 TCP: Garante integridade dos pacotes
 IP: Responsável pelo roteamento dos
pacotes
Copyleft 2006 Danilo Sato
4
Web - HTTP
 Protocolo “sem estado” (stateless)
 Cada transação é tratada isoladamente
 Estrutura básica de uma transação HTTP:
 Request
 Ação (Método HTTP)
 URL a ser acessada
 Parâmetros
 Response
 Código de status (Sucesso ou Erro)
 Tipo do conteúdo (texto, imagem, HTML, ...)
 Conteúdo
Copyleft 2006 Danilo Sato
5
Web - HTTP
GET URL
Headers
... ... ...
... ...
HTTP Request
HTTP Response
Cliente
200 OK
Headers
... ... ...<html>
Servidor
... ......
</html>
Copyleft 2006 Danilo Sato
6
Web - HTTP
 Métodos HTTP (Request)
 GET: Requisição de um recurso numa URL
 POST: Requisição para o servidor interpretar o
conteúdo do Request e encaminhá-lo para a URL
 HEAD: Pede apenas pelo cabeçalho que seria
retornado por um GET
 TRACE: Pede apenas um loopback da
mensagem enviada (para testes)
 PUT: Requisição para guardar o conteúdo na
URL informada
 DELETE: Requisição para apagar o recurso na
URL informada
 OPTIONS: Pede uma lista dos métodos HTTP
suportados na URL informada
Copyleft 2006 Danilo Sato
7
Web - HTTP (GET x POST)
 Anatomia de um GET:
Caminho
H
e
a
d
e
r
s
Parâmetros
GET /search?hl=pt-BR&q=struts HTTP/1.1
Host: www.google.com.br
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows
NT 5.1; SV1)
Accept: image/gif, image/x-xbitmap, image/jpeg,
image/pjpeg, application/x-shockwave-flash,
application/vnd.ms-excel, application/vnd.ms-powerpoint,
application/msword, */*
Accept-Language: en-us
Keep-Alive: 300
Connection: keep-alive
Copyleft 2006 Danilo Sato
8
Web - HTTP (GET x POST)
 Anatomia de um POST:
Caminho
H
e
a
d
e
r
s
POST /search HTTP/1.1
Host: www.google.com.br
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows
NT 5.1; SV1)
Accept: image/gif, image/x-xbitmap, image/jpeg,
image/pjpeg, application/x-shockwave-flash,
application/vnd.ms-excel, application/vnd.ms-powerpoint,
application/msword, */*
Accept-Language: en-us
Keep-Alive: 300
Connection: keep-alive
?hl=pt-BR&q=struts
Corpo
Copyleft 2006 Danilo Sato
9
Web - HTML
 HTML = HyperText Markup Language
 Quando o servidor responde um
Request HTTP ele geralmente envia
algum tipo de conteúdo para ser
exibido no navegador (cliente)
 Descreve como o navegador deve
exibir o conteúdo para o usuário
 Decora um texto com tags e atributos
Copyleft 2006 Danilo Sato
10
Web - HTML
 Estrutura básica:
<html>
<head>
<title>Título da Página</title>
</head>
<body>
<!– Aqui vai o conteúdo a ser exibido -->
<h1>Título</h1>
<p>
Parágrafo com um link para o
<a href=“http://www.google.com”>Google</a>
</p>
<img src=“foto.jpg”/>
</body>
</html>
Copyleft 2006 Danilo Sato
11
Web
 Servidores Web são bons para localizar um
recurso (uma página HTML, por exemplo) e
entregar para o cliente (navegador)
 Bom para conteúdo estático
 E se eu quiser colocar uma informação
dinâmica na página HTML?
 Data atual?
 Loja virtual:
 1 página para cada produto?
 Total da compra?
Copyleft 2006 Danilo Sato
12
Web
 Servidor pode pedir ajuda para uma
“aplicação amiga”
 CGI = Common Gateway Interface
 Permite que o cliente (navegador) peça
conteúdo para outra aplicação que roda no
servidor web
 O servidor inicia a aplicação em outro
processo e encaminha os parâmetros da
requisição
 A aplicação gera a página com conteúdo
dinâmico e devolve para o servidor
Copyleft 2006 Danilo Sato
13
Web
HTTP Request
1
2
4
3
HTTP Response
Aplicação
Amiga
Servidor
Cliente
Copyleft 2006 Danilo Sato
14
Java para Web - Servlets
 Resposta de Java: Servlets
 Servlets são classes Java executadas no
servidor
 Servlets permitem o tratamento dinâmico
do Request e do Response
 Uso mais comum: HTTPServlet
 Servlets rodam dentro de um contêiner
 Contêiner funciona como a “aplicação
amiga” do servidor
Copyleft 2006 Danilo Sato
15
Java para Web - Servlets
 Vantagens sobre CGI:
 Eficiência: No uso tradicional de CGI, um novo
processo é iniciado a cada requisição HTTP. O
contêiner é responsável pelo gerenciamento dos
servlets, rodando sobre a mesma JVM em
diferentes Threads
 Conveniência: Escritos em Java. API que
facilita manipulação da transação HTTP
(cabeçalhos, cookies, session, ...)
 Durabilidade: Servlets podem guardar
informações entre diferentes requisições,
facilitando o uso de, por exemplo, um pool de
conexão com o Banco de Dados ou um cache
Copyleft 2006 Danilo Sato
16
Java para Web - Servlets
 Vantagens sobre CGI:
 Portabilidade: Podem ser utilizados em
diferentes plataformas, pois são escritos
em Java e seguem uma API bem definida
 Segurança: Servlets são executados
dentro de um contêiner rodando num
Sandbox protegido, evitando a
possibilidade de execução de Servlets
potencialmente perigosos e malintencionados
Copyleft 2006 Danilo Sato
17
Java para Web - Servlets
 Ciclo de vida gerenciado pelo contêiner
 Quando uma requisição é mapeada para
um Servlet, o contêiner:
 Se uma instância do Servlet não existe:
 Carrega a classe do Servlet
 Cria uma instância do Servlet
 Inicializa o Servlet chamando o método init
 Chama o método service passando os
objetos correspondente ao Request e ao
Response
Copyleft 2006 Danilo Sato
18
Java para Web - Servlets
HTTP Request
1
4
2
Contêiner
Web
3
Servlet
HTTP Response
Cliente
2
response
service(request, response)
doGet(request, response)
request
Copyleft 2006 Danilo Sato
Servidor
19
Java para Web - Servlets
 Exemplo: Hello WWW
public class HelloWWW extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<HTML>\n");
out.println("<HEAD><TITLE>Hello WWW</TITLE></HEAD>\n");
out.println("<BODY>\n");
out.println("<H1>Hello WWW</H1>\n");
out.println("<P>Data atual:" + new Date() + "</P>");
out.println("</BODY></HTML>");
}
}
Copyleft 2006 Danilo Sato
20
Java para Web - Servlets
 Exemplo: Deployment Descriptor
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/webapp_2_4.xsd" version="2.4">
<servlet>
<servlet-name>Hello WWW</servlet-name>
<servlet-class>HelloWWW</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello WWW</servlet-name>
<url-pattern>/Hello.do</url-pattern>
</servlet-mapping>
</web-app>
Copyleft 2006 Danilo Sato
21
Java para Web - Servlets
 Organização em um web-app (WAR):
Hello
...
WEB-INF
HTMLs
classes
lib
web.xml
HelloWWW.class
Copyleft 2006 Danilo Sato
22
Java para Web - JSP
 Problema:
 Gerar código HTML não é fácil
 Muitos print() e println()
 Solução: JSP
 JSP = Java Server Pages
 Vantagens:
 Separação da parte estática do HTML da
parte dinâmica
 Separação de profissionais
Copyleft 2006 Danilo Sato
23
Java para Web - JSP
 Basta incluir código Java no arquivo HTML
entre os marcadores "<%" e "%>"
 Um arquivo JSP parece mais com HTML que
com um Servlet
 Porém, o JSP é compilado e convertido num
Servlet (a parte estática vira println() e
print())
 Isso acontece na primeira vez que a página
é requisitada
Copyleft 2006 Danilo Sato
24
Java para Web - JSP
 Exemplo:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">
<%@ page import="java.util.Date"%>
<html>
<head>
<title>Hello WWW</title>
</head>
<body>
<h1>Hello WWW</h1>
<p>Data atual: <%= new Date() %></p>
</body>
</html>
Copyleft 2006 Danilo Sato
25
Java para Web - JSP
 JSP permite três tipos de construção:
 Elementos de script: Código Java que
fará parte do Servlet resultante
 Diretivas: Controla a estrutura geral do
Servlet resultante
 Ações: Permite utilizar componentes
existentes e controlar o comportamento
do compilador JSP
 Algumas variáveis pré-definidas
Copyleft 2006 Danilo Sato
26
Java para Web - JSP
Elemento JSP
Sintaxe
Interpretação
Expressão
<%= expressão %>
Expressão é avaliada
e impressa na saída
Scriptlet
<% código %>
Código é inserido no
método service()
Declaração
<%! código %>
Código é inserido no
corpo do servlet
Diretiva JSP: page
<%@ page att="val“ Diretiva geral para o
%>
compilador JSP
Diretiva JSP:
include
<%@ include
file="url" %>
Copyleft 2006 Danilo Sato
Inclui um arquivo na
hora que o servlet é
gerado
27
Java para Web - JSP
Elemento JSP
Sintaxe
Interpretação
Comentário
<%-- foo --%>
Foo é ignorado
Ação jsp:include
<jsp:include
page="url"/>
Inclui um arquivo na
hora que a página é
requisitada
Ação jsp:useBean
<jsp:useBean
att="val"/>
Encontra ou constrói
um JavaBean
Ação
jsp:setProperty
<jsp:setProperty
att="val"/>
Atualiza uma
propriedade do bean
Ação
jsp:getProperty
<jsp:getProperty
name="bean"
property="prop"/>
Imprime o valor de
uma propriedade do
bean na saída
Copyleft 2006 Danilo Sato
28
Java para Web - JSP
Elemento JSP
Sintaxe
Interpretação
Ação jsp:forward
<jsp:forward
page="url"/>
Encaminha a
requisição para outra
página
Ação jsp:plugin
<jsp:plugin
att=val*>
...
</jsp:plugin>
Gera um tag OBJECT
ou EMBED para
executar um applet
através do plugin
Java
Copyleft 2006 Danilo Sato
29
Java para Web - JSP
 Variáveis pré-definidas:
 request: representa o HttpServletRequest
 response: representa o HttpServletResponse
 out: representa o PrintWriter associado ao
response
 session: representa o HttpSession associado
ao request
 application: representa o ServletContext
 config: representa o ServletConfig
 pageContext: representa o PageContext
 page: apenas um sinônimo para this
Copyleft 2006 Danilo Sato
30
Java para Web - Servlets & JSP
 As aplicações web começaram a ficar
muito centradas no JSP
 Muita lógica e código Java misturado
no meio da página JSP
 Nas primeiras especificações de JSP
foram definidos:
 Modelo 1: Utiliza somente páginas JSP
 Modelo 2: Utiliza páginas JSP e Servlets
Copyleft 2006 Danilo Sato
31
Java para Web - Servlets & JSP
 Modelo 1:
 Páginas JSP responsáveis pelo
processamento da requisição e
construção da página de exibição
Copyleft 2006 Danilo Sato
32
Java para Web - Servlets & JSP
 Modelo 2:
 Servlets processam a requisição
 Páginas JSP constroem da página de
exibição
Copyleft 2006 Danilo Sato
33
MVC
 Semelhança com idéia antiga de
Smalltalk
 Padrão conhecido como MVC
 Divisão de responsabilidades:
 Model: representa o estado da aplicação
(dados)
 Controller: representa o fluxo de
controle
 View: representa a camada de exibição
(apresentação na tela)
Copyleft 2006 Danilo Sato
34
MVC
 Vantagens:
 Desacoplamento entre o modelo da
aplicação e a camada de exibição
 Permite a existência de diferentes
camadas de exibição
 Transparência: o modelo não precisa
saber qual a camada de exibição usada
 Utiliza o padrão Observer para que o
modelo notifique alterações para a
camada de exibição (View)
Copyleft 2006 Danilo Sato
35
MVC
Model
Seleciona a View
View
Controller
Ações do usuário
Copyleft 2006 Danilo Sato
36
Outras Tecnologias - JavaBeans
 JavaBeans são classes Java com
algumas características especiais
 Seguem um determinado padrão:
 A classe deve ser concreta e pública
 Deve disponibilizar um construtor sem
argumentos
 Expõem os campos internos como
propriedades acessadas por métodos de
acesso/atualização padronizados
Copyleft 2006 Danilo Sato
37
Outras Tecnologias - JavaBeans
 Por seguir um padrão, podem ser
manipulados por introspecção
 Foram originalmente projetados para
serem utilizados por reflexão
 São largamente utilizados em outras
aplicações (em especial no Struts)
 Exemplo: Form do Struts
Copyleft 2006 Danilo Sato
38
Outras Tecnologias - JavaBeans
 Setters:
 Métodos de alteração de estado
 Nome do método deve ser prefixado por “set”
 O primeiro caractere do nome da propriedade
deve ter letra maiúscula
 O valor de retorno é sempre void
 O método deve aceitar somente um argumento,
que pode ser de qualquer tipo
 Exemplo:
 public void setTotal(Double total)
Copyleft 2006 Danilo Sato
39
Outras Tecnologias - JavaBeans
 Getters:
 Métodos de recuperação de estado
 Nome do método deve ser prefixado por “get”
 O primeiro caractere do nome da propriedade
deve ter letra maiúscula
 O valor de retorno coincide com o parâmetro do
método setter
 O método não deve ter argumentos
 Exemplo:
 public Double getTotal()
Copyleft 2006 Danilo Sato
40
Outras Tecnologias - JavaBeans
 Getters:
 Variação para tipos booleanos:
 Nome do método pode ser prefixado por
“is”
 O primeiro caractere do nome da
propriedade deve ter letra maiúscula
 O valor de retorno deve ser Boolean ou
boolean
 O método não deve ter argumentos
 Exemplo:
 public boolean isActive()
Copyleft 2006 Danilo Sato
41
Outras Tecnologias - JavaBeans
 Reflexão:
 É o processo de determinar os membros e
métodos de um objeto em tempo de execução
 Introspecção:
 É uma forma especializada de reflexão usada na
API dos JavaBeans
 Através de introspecção é possível descobrir
quais métodos de um JavaBean devem ser
chamados para alterar seu estado
 O Struts usa introspecção para converter
parâmetros HTTP em propriedades JavaBean e
para popular campos HTML a partir de um
JavaBean
Copyleft 2006 Danilo Sato
42
Outras Tecnologias - XML
 XML = Extensible Markup Language
 Originalmente criado para definir um
padrão para documentos estruturados
 Permite a separação da semântica dos
dados
 Atualmente é utilizado em diversas
situações e muitas tecnologias foram
desenvolvidas ao seu redor:
 XML Schema, XPath, XSLT, RDF, SOAP ...
Copyleft 2006 Danilo Sato
43
Outras Tecnologias - XML
 Muitas tecnologias Java utilizam
documentos XML como arquivos de
configuração
 Quando utilizados dessa forma, os
documentos XML são geralmente são
chamamos de descritores
 Exemplos:
 web.xml
 struts-config.xml
Copyleft 2006 Danilo Sato
44
Struts Básico
 Struts é um arcabouço (framework)
para desenvolvimento de aplicações
Web em Java
 Disponibiliza uma camada de controle
robusta baseada em tecnologias
conhecidas
 Foco principal no Controller do MVC
 Encoraja o desenvolvimento de
aplicações no Modelo 2
Copyleft 2006 Danilo Sato
45
Struts Básico
 Utiliza um componente próprio para o
Controller
 Possui integração com outras tecnologias
para suporte ao Model e ao View:
 Model: JavaBeans e classes utilitárias
 View: TagLibs para utilização nas páginas JSP
 Utiliza arquivos de configuração XML para
juntar todos os componentes
 O nome é uma analogia às características
do Struts que facilitam a estruturação de
uma aplicação web
Copyleft 2006 Danilo Sato
46
Struts Básico - Por quê?
 Por que usar o Struts?
 Diversas tecnologias para representar
o Model (JavaBeans, EJB, JDBC)
 Diversas tecnologias para representar
o View em aplicações web (JSP,
Velocity, JSF)
 E o Controller?
Copyleft 2006 Danilo Sato
47
Struts Básico - Por quê?
 O Struts funciona como um
controlador central entre as regras de
negócio e a interface com o usuário
 Vantagens:
 Separação entre código de apresentação
e regras de negócio
 Você pode reaproveitar partes da regra
de negócio em diferentes fluxos
 Um lugar central para controlar a
interação entre as camadas
Copyleft 2006 Danilo Sato
48
Struts Básico - Por quê?
 Outras funcionalidades:
 Internacionalização: suporte através
de ResourceBundles e TagLibs
 Gerenciamento de erros: mensagens
de erro geradas nas regras de negócio
podem ser exibidas para o usuário
 Validação de campos: suporte à
validação dos dados de entrada de um
Form
Copyleft 2006 Danilo Sato
49
Struts Básico - Visão Geral
 Fluxo Básico de Controle
Copyleft 2006 Danilo Sato
50
Struts Básico - Visão Geral
 ActionServlet
 Responsável pelo controle do fluxo de navegação
 Esse fluxo é definido no arquivo de configuração
(struts-config.xml)
 Fluxo pode ser alterado sem recompilar a aplicação
 Action
 Classe de controle responsável por:
 Acessar a camada de negócio
 Construir a resposta para a requisição
 Controle e tratamento de erros
 Redireciona o fluxo de execução para uma página JSP
(ou outra Action)
Copyleft 2006 Danilo Sato
51
Struts Básico - Visão Geral
 ActionForms
 São JavaBeans
 Coletam informações de formulários para os objetos
Action
 Podem ser utilizados para preencher formulários
automaticamente
 Páginas JSP
 Responsáveis apenas pela apresentação dos
resultados
 Tipicamente devem ter muito pouco código Java
(devem usar as taglibs do Struts)
Copyleft 2006 Danilo Sato
52
Struts Básico - Visão Geral
 ActionMapping
 Informa ao ActionServlet quais Action, ActionForm e
ActionForwards devem ser utilizados para cada URI
 Definidos no arquivo de configuração (strutsconfig.xml)
 ActionForward
 Associa um nome lógico para um encaminhamento
(URI para um JSP ou outra Action)
 Definidos no arquivo de configuração (strutsconfig.xml)
 Geralmente uma requisição é encaminhada
primeiramente para uma Action e depois para um JSP
Copyleft 2006 Danilo Sato
53
Struts Básico - Visão Geral
 Fluxo de uma requisição:
1. O servidor recebe uma requisição cuja URL
corresponde a um Servlet (ActionServlet)
2. O container transfere o controle para o
ActionServlet
3. O ActionServlet encontra o ActionMapping
correspondente à URL requisitada
4. O ActionMapping especifica qual classe Action
deve ser utilizada e o ActionForm associado
5. O ActionForm é populado com os dados de
formulário da requisição (feito automaticamente
pelo Struts – Introspecção no JavaBean)
Copyleft 2006 Danilo Sato
54
Struts Básico - Visão Geral
6. O controle é transferido para Action
correspondente (através de uma chamada do
método execute())
7. A Action utiliza os dados do ActionForm e
acessa a camada de negócio (Model) para gerar
uma resposta para a requisição
8. Uma vez gerada a resposta, a Action a
armazena em algum contexto do contêiner
(tipicamente request ou session) para acesso
pela página JSP
9. A Action retorna um ActionForward para o
ActionServlet indicando a página JSP (ou outro
recurso) que exibirá a resposta
Copyleft 2006 Danilo Sato
55
Struts Básico - Visão Geral
10. A página JSP constrói o resultado com
informações obtidas dos contextos utilizados
(request ou session) ou do ActionForm
11. A página JSP encaminha o resultado para o
contêiner
12. O contêiner encaminha a resposta para o cliente
que iniciou a requisição
Copyleft 2006 Danilo Sato
56
Dúvidas ou Sugestões?
Copyleft 2006 Danilo Sato
57
Download