Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Projeto de Sistemas de Software
J2EE Projeto de Sistemas de Software
2
Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas
Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas MVC Command © LES/PUC-Rio
3
Java 2 Enterprise Edition (J2EE)
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 J2EE Aplicações J2EE Componente J2EE
Constituídas por componentes Componente J2EE 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 J2EE Deve seguir a especificação J2EE © LES/PUC-Rio
5
Modelos de Componente J2EE
Plataforma J2EE define quatro tipos diferentes de componentes de aplicação 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 J2EE
Componentes Clientes Applets Aplicações Java Stand-Alone Componentes Web Servlets JSPs Componentes EJB Session Beans Entity Beans Message-Driven Beans © LES/PUC-Rio
7
Arquitetura de Aplicações J2EE
© LES/PUC-Rio
8
Servidores J2EE Componentes J2EE 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
J2EE – 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
Parâmetros de Inicialização
Motivação Muitas vezes existem valores que são constantes durante a execução do servlet, mas que podem mudar durante a vida da aplicação Ex: Localização de recursos Mensagens padrão © LES/PUC-Rio
34
Parâmetros de Inicialização
Configurando no Tomcat Arquivo web.xml © LES/PUC-Rio
35
Parâmetros de Inicialização
Principais métodos Classes Servlet e ServletConfig public java.util.Enumeration getInitParameterNames() public java.lang.String getInitParameter(java.lang.String name) © LES/PUC-Rio
36
Inicializando o Servlet
© LES/PUC-Rio
37
Inicializando o Servlet
© LES/PUC-Rio
38
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
39
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
40
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
41
Jakarta Tomcat © LES/PUC-Rio
42
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
43
JSP
44
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
45
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
46
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
47
Escopo dos Atributos O JSP pode acessar objetos em tempo de execução em quatro escopos diferentes Página Objeto PageContext corrente (pageContext) Requisição Objeto HttpServletRequest corrente (request) Sessão Objeto HttpSession corrente (session) Aplicação Objeto ServletContext corrente (servletContext) Para armazenar informações setAttribute(String, Object) Para recuperar informações getAttribute(String) © LES/PUC-Rio
48
JSP Servlet Servlet JSP Do Servlet ao JSP Include Forward
getServletContext().getRequestDispatcher("pagina.jsp"). include(request, response); Forward getServletContext().getRequestDispatcher("pagina.jsp"). forward(request, response); JSP Servlet Servlet JSP © LES/PUC-Rio
49
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
50
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
51
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
52
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
53
Tags de Script Declarações <%! declaração %> Scriptlets
<% comandos %> Expressões <%= expressão %> Comentários <!-- comentário html --> <%-- comentário jsp --> © LES/PUC-Rio
54
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
55
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
56
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
57
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
58
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
59
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
60
© LES/PUC-Rio
61
Ações jsp:useBean jsp:setProperty jsp:getProperty jsp:include
jsp:forward ou então tags personalizadas via taglib © LES/PUC-Rio
62
jsp:useBean Cria ou recupera uma instância de um bean
<jsp:useBean lista_de_atributos> A lista_de_atributos pode ser id: “nomeDaInstânciaDoBean” scope:”page|request|session|application” class: “com.teccomm.NomeClasse” type: “com.teccomm.NomeDoTipo” Exemplo <jsp:useBean id=“stringBean” class=“com.teccomm.MeuBean” scope=“session”> © LES/PUC-Rio
63
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
64
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
65
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
66
Boas Práticas MVC
67
Servlet + Modelo de Objetos
Agora sabemos Programar servlets Modelar um sistema orientado a objetos Mas como fazer os dois funcionarem juntos? © LES/PUC-Rio
68
Servlet + Modelo de Objetos
browser HTTP Servlet ?? © LES/PUC-Rio
69
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
70
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
71
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
72
Servlet + Controladores
MVC Servlet + Controladores (Controle) Objetos de Negócio (Modelo) JavaBean de Resposta Browser JSP doGet() doPost() (Visão) © LES/PUC-Rio
73
Boas Práticas Padrão Command
74
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
75
Padrão Command (I) Como implementar? Atributo hidden © LES/PUC-Rio
76
Padrão Command (II) Como implementar?
Atributo hidden Ex: Atributo hidden + Comando abstrato + Hashtable © LES/PUC-Rio
77
Padrão Command (III) © LES/PUC-Rio
78
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
79
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
80
Padrão Command (VI) © LES/PUC-Rio
81
Padrão Command (VII) © LES/PUC-Rio
82
Dicas de Modelagem © LES/PUC-Rio
83
Fim Perguntas?
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.