Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Projeto de Sistemas de Software
Java EE Projeto de Sistemas de Software
2
Visão geral da Arquitetura Java EE Servlets JSP Boas Práticas
Agenda Visão geral da Arquitetura Java EE Servlets JSP Boas Práticas MVC Command © LES/PUC-Rio
3
JavaTM Platform, Enterprise Edition (Java EE)
Arquitetura de referência Plataforma de Tecnologias Desenvolvimento de aplicações corporativas distribuídas Provê Suporte ao gerenciamento automático de componentes Infra-estrutura de serviços complexos Transações Segurança Persistência Objetivo Central Desenvolvedores podem concentrar-se no desenvolvimento da lógica de negócio © LES/PUC-Rio
4
Componentes Java EE Aplicações Java EE Componente Java EE
Constituídas por componentes Componente Java EE Unidade funcional de software 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 © LES/PUC-Rio
5
Modelos de Componente Java EE
A especificação Java EE define os seguintes componentes Java EE: Aplicações stand-alone aplicação Java mantidos e executados no cliente GUI Componentes Web Servlet Objetos java que respondem requisições em HTTP Resposta normalmente é Html gerado dinamicamente Mantidos e executados no servidor JSP Linguagem de script adequada para escrita de servlets de apresentação Applets Normalmente executados dentro do browser Mantidos pelo servidor e executados no cliente Enterprise JavaBeans (EJBs) componentes mantidos e executados em um ambiente gerenciado pelo servidor Provê Monitoramento transacional Persistência Distribuição de objetos Segurança Não são JavaBeans! © LES/PUC-Rio
6
Exemplos de Componentes Java EE
Componentes Clientes Applets Aplicações Java Stand-Alone Componentes Web Servlets JSPs Componentes EJB Session Beans Message-Driven Beans © LES/PUC-Rio
7
Arquitetura de Aplicações Java EE
© LES/PUC-Rio
8
Servidores Java EE Componentes Java EE são instalados em 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 © LES/PUC-Rio
9
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 © LES/PUC-Rio
10
Java Servlets
11
Servlet - Conceito Aplicação Java executada do lado do servidor, estendendo a capacidade do servidor web Alternativa Java para os scripts CGI Gerenciado pelo módulo web Vantagens Melhor aproveitamento dos recursos do sistema Fácil de programar Portável © LES/PUC-Rio
12
Arquitetura Cliente-Servidor
GET (request) Documento HTML retorna (response) Documento HTML Cliente / Browser Servidor Formulário Submetido via POST (request) Servidor retorna HTML gerado pelo Servlet © LES/PUC-Rio
13
Arquitetura Cliente-Servidor
Arquitetura baseada na divisão do processamento em processos distintos 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 utilizando protocolo HTTP Para cada requisição o servidor cria uma nova Thread © LES/PUC-Rio
14
Requisitando um Servlet via GET
GET (HTTP) © LES/PUC-Rio
15
Requisitando um Servlet via POST
© LES/PUC-Rio
16
API de Servlet API de Servlet java.lang.Object |
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 +----com.teccomm.pss.MeuServlet © LES/PUC-Rio
17
HttpServlet 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() © LES/PUC-Rio
18
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 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 Coleta de lixo Executado somente uma vez Alguns servidores somente removem o servlet quando ocorre o shutdown Utilizado para liberar recursos © LES/PUC-Rio
19
Recapitulando... Para criar um Servlet é necessário
Estender a classe HttpServlet pacote javax.servlet.http do JSDK Implementar os métodos doGet ou doPost © LES/PUC-Rio
20
Request e Response Métodos doGet(), doPost() recebem dois parâmetros
HttpServletRequest encapsula os parâmetros da requisição HttpServletResponse encapsula a resposta ao cliente © LES/PUC-Rio
21
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 © LES/PUC-Rio
22
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 © LES/PUC-Rio
23
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”); Também é possível configurar qual é o tipo dos dados que estão sendo enviados de volta ao cliente setContentType(String type) Os tipos mais comuns são text/html, text/xml O método setContentType deve ser chamado antes do método getWriter © LES/PUC-Rio
24
Primeiro Exemplo: Hello World!
© LES/PUC-Rio
25
Segundo Exemplo © LES/PUC-Rio
26
Gerenciamento de sessão (I)
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 identificar usuários através de várias requisições HTTPs e recuperar suas informações Dados do estado do cliente Para obter uma sessão HttpSession getSession() Obtém sessão existente, caso não exista retorna uma nova sessão HttpSession getSession(boolean create) Obtém sessão existente ou cria uma nova sessão dependendo do valor do parâmetro create © LES/PUC-Rio
27
Gerenciamento de sessão (II)
Métodos para manipulação de objetos em sessão void removeAttribute(java.lang.String name) Retira objeto da sessão void setAttribute(java.lang.String name, java.lang.Object value) Coloca ou sobreescreve objeto na sessão identificado por name java.lang.Object getAttribute(java.lang.String name) Obtém objeto da sessão java.util.Enumeration getAttributeNames() Obtém os nomes de todos os objetos armazenados na sessão © LES/PUC-Rio
28
Gerenciamento de sessão (III)
Tempo de duração da sessão Sessões em geral tem intervalo máximo de tempo que podem ficar inativas public int getMaxInactiveInterval() public void setMaxInactiveInterval(int interval) As sessões também podem ser encerradas explicitamente pelo programador public void invalidate() © LES/PUC-Rio
29
Exemplo – Carrinho de compras (I) Adicionando parâmetros à Sessão
© LES/PUC-Rio
30
Exemplo – Carrinho de compras (II) Recuperando parâmetros da Sessão
© LES/PUC-Rio
31
Exemplo – Carrinho de compras (III) Recuperando parâmetros da Sessão
© LES/PUC-Rio
32
Exemplo – Carrinho de compras (IV) Encerrando a Sessão
© LES/PUC-Rio
33
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 Application Server Jakarta Tomcat Java Web Server Etc. Servidor gratuito baseado em java Configurável de maneira simples via XML Oferece suporte a Java (Servlets e JSP) © LES/PUC-Rio
34
Configurando o Tomcat Onde colocar as classes dos Servlets?
Em geral as classes são colocadas no diretório: %TOMCAT_HOME%\webapps\XXX\WEB-INF\classes A partir deste diretório devem ser colcadas em seus próprios pacotes © LES/PUC-Rio
35
Configurando o Tomcat Registrando os Servlets
Servlets devem ser chamados com seu nome completo (Pacotes e classe) Muitas vezes o nome se torna grande demais Pode-se então dar um nome ao servlet através do qual o servidor redirecionará a chamada à classe específica Arquivo web.xml Localizado em geral no diretório %TOMCAT_HOME%\webapps\ROOT\WEB-INF Registrando um servlet <web-app> <servlet> <servlet-name>ServletSes</servlet-name> <servlet-class>interfPesquisa.ServletSes</servlet-class> </servlet> </web-app> © LES/PUC-Rio
36
Jakarta Tomcat © LES/PUC-Rio
37
Configurando o Tomcat Outras configurações Arquivo server.xml
Localizado no diretório %TOMCAT_HOME%\conf Configuração da porta do servidor <Connector className="org.apache.tomcat.service.SimpleTcpConnector"> … <Parameter name="port" value="8081"/> </Connector> © LES/PUC-Rio
38
JSP
39
Servlet + Controladores
Arquitetura 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() doPost() (Visão) © LES/PUC-Rio
40
JSP - Conceito Tecnologia que permite combinar informações estáticas com informações geradas dinamicamente Script executado no servidor Combinação de sintaxe JSP e tags de marcação Tags estáticos 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> © LES/PUC-Rio
41
Compilação de JSP (cont.)
requisição para xxx.jsp resposta de erro xxx.jsp Geração de Código Java xxx.java (servlet) Compilação xxx.class (servlet) resposta © LES/PUC-Rio
42
Tags JSP Diretivas Comandos de script Ações
Configuração do processador JSP Inclusão estática 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 © LES/PUC-Rio
43
Diretivas <%@ 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 %> © LES/PUC-Rio
44
Atributos da Diretiva 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-informativo” © LES/PUC-Rio
45
Exemplos de Diretivas 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.*” %> © LES/PUC-Rio
46
Tags de Script Declarações <%! declaração %> Scriptlets
<% comandos %> Expressões <%= expressão %> Comentários <!-- comentário html --> <%-- comentário jsp --> © LES/PUC-Rio
47
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 © LES/PUC-Rio
48
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 © LES/PUC-Rio
49
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. © LES/PUC-Rio
50
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 © LES/PUC-Rio
51
Comentários para Desenvolvimento
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 © LES/PUC-Rio
52
Objetos Pré-Definidos
Disponíveis para scriplets e expressões request response session out exception (somente em páginas de erro) page © LES/PUC-Rio
53
© LES/PUC-Rio
54
Ações jsp:include jsp:forward ou então tags personalizadas via taglib
© LES/PUC-Rio
55
jsp:include e jsp:forward
Ações utilizadas 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 © LES/PUC-Rio
56
jsp:include <jsp:include page="{URLrelativa |<%=expressão%>}"/> Exemplo <jsp:include page="scripts/login.jsp" /> <jsp:include page="copyright.html" /> <jsp:include page="/index.html" /> © LES/PUC-Rio
57
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. © LES/PUC-Rio
58
Boas Práticas MVC
59
Servlet + Modelo de Objetos
Agora sabemos Programar servlets Modelar um sistema orientado a objetos Mas como fazer os dois funcionarem juntos? © LES/PUC-Rio
60
Servlet + Modelo de Objetos
browser HTTP Servlet ?? © LES/PUC-Rio
61
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 © LES/PUC-Rio
62
Servlet + Controladores
Arquitetura MVC Pela arquitetura, a interação de um usuário com o sistema se dá através de seqüências de chamadas MVC Servlet + Controladores (Controle) Objetos de Negócio (Modelo) JavaBean de Resposta Browser JSP doGet() doPost() (Visão) © LES/PUC-Rio
63
Arquitetura MVC O modelo será uma aplicação Java orientada a objetos
O controlador será alguma tecnologia de implementação (padrão comando) que juntamente com o Servlet redirecionará as chamadas feitas pelo cliente aos objetos responsáveis no modelo A apresentação será representada pelo JSP © LES/PUC-Rio
64
Boas Práticas Padrão Command
65
Padrão Command Objetivos
Reduzir acoplamento entre as requisições dos clientes e os objetos que as executam Parametrizar objetos por uma ação a ser executada Especificar, enfileirar e executar solicitações em tempos diferentes para desfazer operações, por exemplo Estruturar um sistema em torno de operações de alto nível, como transações, por exemplo © LES/PUC-Rio
66
Padrão Command (I) Como implementar? Atributo hidden © LES/PUC-Rio
67
Padrão Command (II) Como implementar?
Atributo hidden Ex: Atributo hidden + Comando abstrato + Hashtable © LES/PUC-Rio
68
Padrão Command (III) © LES/PUC-Rio
69
Padrão Command (IV) O Comando Genérico: HttpServletRequest
Passa o comando a ser instanciado (input do formulário) HttpServletResponse Contém o PrintWriter que deverá receber as respostas do Comando © LES/PUC-Rio
70
Padrão Command (V) O Servlet deve possuir um atributo HashTable com todos os Commands Ao ser iniciado, cada Comando deve ser instanciado e inserido na HashTable © LES/PUC-Rio
71
Padrão Command (VI) © LES/PUC-Rio
72
Padrão Command (VII) © LES/PUC-Rio
73
Dicas de Modelagem © LES/PUC-Rio
74
Fim Perguntas?
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.