J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE...

83
J2EE Projeto de Sistemas de Software

Transcript of J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE...

Page 1: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

J2EE

Projeto de Sistemas de Software

Page 2: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

2 © LES/PUC-Rio

Agenda

• Visão geral da Arquitetura J2EE

• Servlets

• JSP

• Boas Práticas– MVC

– Command

Page 3: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

3 © LES/PUC-Rio

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

Page 4: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

4 © LES/PUC-Rio

Componentes J2EE

• Aplicações 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

Page 5: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

5 © LES/PUC-Rio

Modelos de Componente J2EE

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

• Plataforma J2EE define quatro tipos diferentes de componentes de aplicação

Page 6: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

6 © LES/PUC-Rio

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

Page 7: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

7 © LES/PUC-Rio

Arquitetura de Aplicações J2EE

Page 8: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

8 © LES/PUC-Rio

Servidores J2EE

• Componentes J2EE 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

Page 9: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

9 © LES/PUC-Rio

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

Page 10: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

Java Servlets

Page 11: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

11 © LES/PUC-Rio

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

Page 12: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

12 © LES/PUC-Rio

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

Page 13: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

13 © LES/PUC-Rio

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

Page 14: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

14 © LES/PUC-Rio

Requisitando um Servlet via GET

GET (HTTP)

http://localhost/servlet/ServletHyperMed?Comando=SetCtxLabPorNome&Por=&No=Apsen

Page 15: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

15 © LES/PUC-Rio

Requisitando um Servlet via POST

Page 16: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

16 © LES/PUC-Rio

API de Servlet

• API de Servlet

– 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

Page 17: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

17 © LES/PUC-Rio

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

Page 18: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

18 © LES/PUC-Rio

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

Page 19: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

19 © LES/PUC-Rio

Recapitulando...

• Para criar um Servlet é necessário

– Estender a classe HttpServlet

• pacote javax.servlet.http do JSDK

– Implementar os métodos doGet ou doPost

Page 20: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

20 © LES/PUC-Rio

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

Page 21: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

21 © LES/PUC-Rio

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

Page 22: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

22 © LES/PUC-Rio

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

Page 23: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

23 © LES/PUC-Rio

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

Page 24: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

24 © LES/PUC-Rio

Primeiro Exemplo: Hello World!

Hello World!

Page 25: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

25 © LES/PUC-Rio

Segundo Exemplo

Page 26: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

26 © LES/PUC-Rio

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

Page 27: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

27 © LES/PUC-Rio

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

Page 28: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

28 © LES/PUC-Rio

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

Page 29: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

29 © LES/PUC-Rio

Exemplo – Carrinho de compras (I)Adicionando parâmetros à Sessão

Page 30: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

30 © LES/PUC-Rio

Exemplo – Carrinho de compras (II)Recuperando parâmetros da Sessão

Page 31: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

31 © LES/PUC-Rio

Exemplo – Carrinho de compras (III)Recuperando parâmetros da Sessão

Page 32: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

32 © LES/PUC-Rio

Exemplo – Carrinho de compras (IV)Encerrando a Sessão

Page 33: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

33 © LES/PUC-Rio

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

Page 34: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

34 © LES/PUC-Rio

Parâmetros de Inicialização

• Configurando no Tomcat

– Arquivo web.xml

Page 35: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

35 © LES/PUC-Rio

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)

Page 36: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

36 © LES/PUC-Rio

Inicializando o Servlet

Page 37: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

37 © LES/PUC-Rio

Inicializando o Servlet

Page 38: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

38 © LES/PUC-Rio

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.

• Jakarta Tomcat

– Servidor gratuito baseado em java

– Configurável de maneira simples via XML

– Oferece suporte a Java (Servlets e JSP)

Page 39: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

39 © LES/PUC-Rio

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

Page 40: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

40 © LES/PUC-Rio

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>

Page 41: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

41 © LES/PUC-Rio

Jakarta Tomcat

Page 42: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

42 © LES/PUC-Rio

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>

Page 43: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

JSP

Page 44: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

44 © LES/PUC-Rio

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)

Page 45: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

45 © LES/PUC-Rio

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>

Page 46: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

46 © LES/PUC-Rio

Compilação de JSP (cont.)

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

Page 47: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

47 © LES/PUC-Rio

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)

Page 48: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

48 © LES/PUC-Rio

Do Servlet ao JSP

• Include

– getServletContext().getRequestDispatcher("pagina.jsp").include(request, response);

• Forward

– getServletContext().getRequestDispatcher("pagina.jsp").forward(request, response);

Servlet JSP

Servlet JSP

Page 49: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

49 © LES/PUC-Rio

Tags JSP

• Diretivas

– 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

Page 50: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

50 © LES/PUC-Rio

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

Page 51: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

51 © LES/PUC-Rio

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”

Page 52: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

52 © LES/PUC-Rio

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.*” %>

Page 53: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

53 © LES/PUC-Rio

Tags de Script

• Declarações

<%! declaração %>

• Scriptlets

<% comandos %>

• Expressões

<%= expressão %>

• Comentários

<!-- comentário html -->

<%-- comentário jsp -->

Page 54: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

54 © LES/PUC-Rio

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

Page 55: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

55 © LES/PUC-Rio

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

Page 56: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

56 © LES/PUC-Rio

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.

Page 57: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

57 © LES/PUC-Rio

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

Page 58: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

58 © LES/PUC-Rio

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

Page 59: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

59 © LES/PUC-Rio

Objetos Pré-Definidos

• Disponíveis para scriplets e expressões

– request

– response

– session

– out

– exception (somente em páginas de erro)

– page

Page 60: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

60 © LES/PUC-Rio

Page 61: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

61 © LES/PUC-Rio

Ações

• jsp:useBean

• jsp:setProperty

• jsp:getProperty

• jsp:include

• jsp:forward

– ou então tags personalizadas via taglib

Page 62: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

62 © LES/PUC-Rio

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

Page 63: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

63 © LES/PUC-Rio

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

Page 64: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

64 © LES/PUC-Rio

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

Page 65: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

65 © LES/PUC-Rio

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.

Page 66: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

Boas Práticas

MVC

Page 67: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

67 © LES/PUC-Rio

Servlet + Modelo de Objetos

• Agora sabemos

– Programar servlets

– Modelar um sistema orientado a objetos

• Mas como fazer os dois funcionarem juntos?

Page 68: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

68 © LES/PUC-Rio

Servlet + Modelo de Objetos

browserHTTP

Servlet

NewClass5

NewClass

NewClass4NewClass6

NewClass7

NewClass2

NewClass3 NewClass8

NewClass9 NewClass10

??

Page 69: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

69 © LES/PUC-Rio

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

Page 70: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

70 © LES/PUC-Rio

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)

Page 71: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

71 © LES/PUC-Rio

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

Page 72: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

72 © LES/PUC-Rio

MVC

Servlet + Controladores

(Controle)

Objetos de Negócio

(Modelo)

JavaBean de Resposta

Browser

JSP

doGet()

doPost()

(Visão)

Page 73: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

Boas Práticas

Padrão Command

Page 74: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

74 © LES/PUC-Rio

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

Page 75: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

75 © LES/PUC-Rio

Padrão Command (I)

• Como implementar?

– Atributo hidden

Page 76: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

76 © LES/PUC-Rio

Padrão Command (II)

• Como implementar?

– Atributo hidden

• Ex:

• Atributo hidden + Comando abstrato + Hashtable

Page 77: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

77 © LES/PUC-Rio

Padrão Command (III)

HttpServlet

ComandoA

processaComando()

ComandoB

processaComando()

ComandoC

processaComando()

MeuServlet

comandos : Hashtable

doGet()doPost()init()

ComandoAbstrato

processaComando()

Page 78: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

78 © LES/PUC-Rio

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

Page 79: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

79 © LES/PUC-Rio

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

Page 80: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

80 © LES/PUC-Rio

Padrão Command (VI)

Page 81: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

81 © LES/PUC-Rio

Padrão Command (VII)

Page 82: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

82 © LES/PUC-Rio

Dicas de Modelagem

Page 83: J2EE Projeto de Sistemas de Software. 2 © LES/PUC-Rio Agenda Visão geral da Arquitetura J2EE Servlets JSP Boas Práticas –MVC –Command.

Fim

Perguntas?