Top Banner
J2EE Projeto de Sistemas de Software
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.

Apr 17, 2015

Download

Documents

Internet User
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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?