A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Projeto de Sistemas de Software

Apresentações semelhantes


Apresentação em tema: "Projeto de Sistemas de Software"— Transcrição da apresentação:

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?


Carregar ppt "Projeto de Sistemas de Software"

Apresentações semelhantes


Anúncios Google