1/25/2014 1 Programação para Internet Prof. Flávio de Oliveira Silva, Ph.D. Java – Plataformas A tecnologia Java está dividida em plataformas. Cada plataforma oferece um conjunto de funcionalidades para o desenvolvimento de diferentes tipos de aplicações Existem três plataformas baseadas na tecnologia Java Java ME – Java Platform, Micro Edition Java SE – Java Platform, Standard Edition Java EE – Java Platform, Enterprise Edition 70 Programação para Internet Prof. Flávio de Oliveira Silva, Ph.D. Java – Plataformas Java ME – Java Platform, Micro Edition Fornece um ambiente específico para a criação de aplicações destinadas a dispositivos como telefones celulares, pagers, PDAs, Smartphones; etc. Destinado a criação de aplicações para dispositivos móveis Java SE – Java Platform, Standard Edition Fornece um ambiente completo para o desenvolvimento de aplicações em destktops (clientes) e também servidores Base da tecnologia Java. Fornece a máquina virtual (JRE – Java Runtime Environment) Java EE – Java Platform, Enterprise Edition Define um padrão para o desenvolvimento de aplicações baseadas em componentes e estruturadas em várias camadas Seu foco é o desenvolvimento de aplicações do lado servidor, cujo objetivo é prover funcionalidades para aplicações distribuídas 71
36
Embed
Java – Plataformasflavio/pi/files/2013-02/servlets.pdf · Java EE – Java Platform, Enterprise Edition 70 Programação para Internet Prof. Flávio de Oliveira Silva, Ph.D. Java
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
1/25/2014
1
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Java – Plataformas A tecnologia Java está dividida em plataformas.
Cada plataforma oferece um conjunto de funcionalidades para o desenvolvimento de diferentes tipos de aplicações
Existem três plataformas baseadas na tecnologia Java Java ME – Java Platform, Micro Edition
Java SE – Java Platform, Standard Edition
Java EE – Java Platform, Enterprise Edition
70
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Java – Plataformas Java ME – Java Platform, Micro Edition
Fornece um ambiente específico para a criação de aplicações destinadas a dispositivos como telefones celulares, pagers, PDAs, Smartphones; etc.
Destinado a criação de aplicações para dispositivos móveis
Java SE – Java Platform, Standard Edition Fornece um ambiente completo para o desenvolvimento de aplicações em
destktops (clientes) e também servidores
Base da tecnologia Java. Fornece a máquina virtual (JRE – Java RuntimeEnvironment)
Java EE – Java Platform, Enterprise Edition Define um padrão para o desenvolvimento de aplicações baseadas em
componentes e estruturadas em várias camadas
Seu foco é o desenvolvimento de aplicações do lado servidor, cujo objetivo é prover funcionalidades para aplicações distribuídas
71
1/25/2014
2
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Java – Java EE O padrão Java EE define um grupo da APIs( Application Programming
Interfaces) que pode ser combinado para a criação de aplicações distribuídas baseadas ou não na Web
O Java EE não é um produto, mas uma especificação.
A especificação é criada pela JCP (Java Community Process)
Esta comunidade é responsável pelo desenvolvimento da tecnologia Java e é aberta a qualquer desenvolver ou empresa interessado na tecnologia
Esta especificação é então implementada pelas mais variadas companhias como, por exemplo: ORACLE
SUN
BEA
IBM
JBOSS
72
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Java – Java EE O resultado desta implementação é um Servidor de Aplicações
(Application Server)
Exemplos de servidores de aplicações compatíveis com o padrão J2EE Oracle
Oracle - Oracle Application Server 10g
Sun - Sun GlassFish Enterprise Server
BEA – Oracle WebLogic Server
IBM – Websphere
JBoss – JBoss Application Server
SAP AG - Web Application Server Sybase – EAServer
Adobe - JRun Server
Borland – AppServer
Fujitisu – Interstage Application Server
Os servidores implementam uma das especificações Java EE (1.2; 1.3; 1.4 , 5 e 6)
73
1/25/2014
3
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Aplicações Distribuídas Camadas O modelo para desenvolvimento de aplicações utilizando o Java EE é
baseado em uma arquitetura multicamadas
Cada camada contém componentes de acordo com a sua função.
Basicamente existem as seguintes camadas: Cliente (Client Tier)
Camada Web (Web Tier)
Camada de Negócios (Bussiness Tier)
Camada Enterprise Information System (EIS)
A camada Web Tier estará presente quando a aplicação for baseada na WEB ou seja, o cliente é um navegador (browser)
A arquitetura acima é conhecida como três camadas (3-tier) visto que existem 3 máquinas envolvidas: O cliente;
O servidor de aplicações Java EE
O servidor de banco de dados
74
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Componentes que são executados na máquina do cliente.
Podem ser executados em um Browser ou uma aplicação desktop baseada no Java SE
Camada Web (Web Tier) Componentes que são executados em um servidor Java EE
Basicamente tratam da apresentação do conteúdo na WEB
Esta camada é responsável por gerar e enviar para o cliente o conteúdo gerado de forma dinâmica
Camada de Negócios (Bussiness Tier) Contém os objetos relacionados ao negócio e suas regras
O servidor de aplicações oferece recursos como controle de transações, de sessões para os objetos desta camada.
Pode ser implementa com EJB (Enterprise JavaBeans)
Camada Enterprise Information System (EIS) Consiste dos recursos que serão utilizados pela aplicação. Inclui gerenciadores de banco de dados
(DBMS) e aplicações legadas, baseadas em mainframes, por exemplo.
Esta camada é executada fora do servidor J2EE e a arquitetura J2EE possui uma interface para esta camada, que pode ser feita, por exemplo, através de conectores
75
1/25/2014
4
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Aplicações DistribuídasCamadas – Arquitetura Java EE Visão Geral das Camadas
76
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Aplicações DistribuídasArquitetura Java EE Comunicação entre as várias camadas
77
1/25/2014
5
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Aplicações DistribuídasArquitetura Java EE Camada Web (Web Tier)
JavaBeans; JSP Pages; Servlets
78
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Aplicações DistribuídasArquitetura Java EE Camada de Negócios (Business Tier)
Baseada em EJB
79
1/25/2014
6
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Java EE contêineres O contêiner fornece a infra-estrutura para a execução de um componente
específico da plataforma
O servidor Java J2EE (Application Server) fornece dois tipos básicos de contêineres: WEB contêiner
EJB contêiner
80
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Java EE contêineresWeb Contêiner Executa Servlets e páginas JSP
Servlets São classes Java que podem ser chamados dinamicamente e que podem executar
alguma funcionalidade.
Estes programas podem ser executado em um Servidor Web ou em um contêiner para Servlets
Normalmente estão ligados a geração de conteúdo para browsers.
O Servlet implementa a interface Servlet e possui um funcionamento pré-definido
Os Servlets recebem e respondem a requisições feitas normalmente através do protocolo HTTP
JavaServer Pages (JSP) Consistem de uma maneira para criar conteúdo dinâmico para a Web
Seu objetivo é criar uma separação entre a apresentação e os dados que estarão presentes em uma página no navegador.
Normalmente a página JSP é um modelo que contém tanto o conteúdo estático, como a indicação de como o conteúdo dinâmico será gerado
81
1/25/2014
7
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Java EE contêineresEJB Contêiner Realiza a criação, destruição e gerenciamento dos EJBs (Enterprise JavaBeans)
Enterprise JavaBeans Enterprise JavaBeans é um padrão para o desenvolvimento de componentes,
utilizando a linguagem Java, que podem ser implantados (deployed) em qualquer servidor J2EE. Em sua essência são classes Java.
Existem vários tipos de EJBs cada um com características próprias
Além disso o contêiner de EJBs é responsável pelo: Gerenciamento Distribuído de Transações
Implementação da Segurança
Gerenciamento de Recursos
Persistência dos EJBs
Acesso Remoto
Transparência de Localização
Monitoramento
Todas as funções são realizadas de forma transparente pelo servidor de aplicações.
O EJB contêiner é aquele que realmente caracteriza um servidor de aplicações baseado na especificação Java EE
82
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Java EE contêineresEJB Contêiner Existem vários tipos de EJBs cada um com características próprias
O seu uso depende das características da aplicação, de suas vantagens e desvantagens particulares
83
TIPO SUB‐TIPO DESCRIÇÃO
Session
Stateless (sem estado) Componentes que simplesmente realizam a chamada de métodos.
Utilizado para a implementação das regras de negócio
Stateful (com estado) Componentes com estado funcionam como um proxy para aplicações do cliente. Estes componentes mantém seu estado entre as chamadas
de Métodos
Message Componentes sem estado que estão ligados ao Java Message Service
(JMS), utilizado para chamada assíncrona de métodos
Entity
Component Managed (CMP)
Componentes com estados que fazem o encapsulamento de uma entidade de um banco de dados. O servidor de aplicações gera o
código para conectar estes objetos a um banco de dados específico
Bean Managed (BMP)
Componentes com estados que fazem o encapsulamento de entidades complexas de um banco de dados. Neste caso o
desenvolvedor deve escreve o código necessário para acessar o objeto no banco de dados
1/25/2014
8
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Apache Tomcat O apache Tomcat basicamente é um contêiner Web (Servlets e JSP)
O Tomcat é a implementação de referência das especificações para Servlets e JavaServer Pages
Estas especificações são desenvolvidas pela Sun através da JCP (Java Community Process).
A JCP é uma entidade aberta que possui como membros pessoas e empresas envolvidas com a tecnologia Java.
A seguintes tabela mostra as versões das especificações e as respectivas versões do Tomcat
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Tomcat – Estrutura de Pastas
86
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Tomcat – Estrutura de Pastas /bin
Contém os scripts para inicialização (startup.sh / startup.bat) e finalização do contêiner web (shutdown.sh / shutdown.bat)
/conf Arquivos de configuração do tomcat
Server.xml Definição dos serviços (elemento <Service>)oferecidos pelo Tomcat. Um serviço
consiste de uma coleção de conectores
O conector (elemento <Connector>) representa um ponto onde é possível receber e responder a requests. Neste elemento é definido o protocolo e porta onde as requisições serão recebidas
tomcat-users.xml Permite defnir papeis (<role>) e usuários (<user>)
Certas aplicações que são fornecidas com o Tomcat necessitam de papéis específicos para funcionamento
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Deployment Descriptor O elemento <servlet> contém dois elementos-filho que descrevem o servlet
O elemento <servlet-name> deve ser único no arquivo web.xml. Este nome será utilizado para referenciar o servle em outros elementos como no elemento <servlet-mapping>
O nome da classe (<servlet-class>)é o nome completo a partir da pasta classes. Indica a classe será utilizada como resposta ao chamado do servlet
Caso a classe esteja em um pacote o nome do mesmo deve ser utilizado
Ex: com.mycompany.servlets.NomeClasse
O elemento <servlet-mapping> é utilizado para realizar uma ligação entre um caminhoe um determinado servlet Para isto este elemento contém um elemento-filho como o nome do Servlet (<servlet-name>) e um
elemento (<url-pattern>) que descreve a um caminho URL
Quando este caminho estiver presente a solicitação será mapeada para o servlet indicado no arquivo web.xml - indicado por (<servlet-name>)
Exemplos:
/servApp – Neste caso qualquer URL que finalize com /servApp será mapeada para o
*.do – Neste caso qualquer URL que termine com a string ".do" será mapeada para o servlet(http://localhost:8080/{contextpath}/login.do
95
1/25/2014
14
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Deployment DescriptorExemplo
96
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Aplicações WEB Em sua concepção a WEB é um meio para a troca de documentos HTML
entre diferentes pontos, utilizando a infra-estrutura oferecida pela Internet.
A medida que a WEB se popularizou novas aplicações começaram a surgir
Em muitos sites da WEB o conteúdo não poderia ser constituído de código HTML estático, mas precisaria ser alterado, muitas das vezes a cada minuto.
A partir desta necessidade começaram a surgir meios para se conseguir a produção de conteúdos dinâmicos
A primeira proposta para a criação de conteúdos dinâmicos foi através do CGI (Common Gateway Interface)
Este mecanismo permite a execução de um código, escrito em C ou Perl, através do navegador
97
1/25/2014
15
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Aplicações WEB Usando CGI Uma aplicação CGI pode ser invocada da seguinte forma:http://www.server.com/cgi-bin/MyExecutable?name1=value1&name2=value2
Aplicação CGI, porém apresenta algumas desvantagens: Criada a partir de linguagens procedimentais
Instabilidade em uma aplicação CGI pode impedir até a operação do servidor
Problemas de Escalabilidade. A cada chamada uma nova instância da aplicação é criada, criando um novo thread e consumindo recursos do servidor.
Outro aspecto é que através de uma aplicação CGI não é possível agregar recursos na aplicação como: estabelecimento de sessão; autenticação e autorização.
Neste contexto e como uma resposta a estas desvantagens, na plataforma Java foi desenvolvido o conceito dos Servlets
98
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Aplicações WEB Usando Servlets São programas Java que podem ser chamados dinamicamente e que
podem executar alguma funcionalidade.
Este programas podem ser executado em um Servidor Web ou em um contêiner para Servlets
Todos os Servlets implementam a interface Servlet
O servlet possui um ciclo de vida padrão e desta forma os métodos são chamados de uma maneira pré-determinada. init()
service()
destroy()
99
1/25/2014
16
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Servlets - Operações Métodos são chamados durante o ciclo de vida de um Servlet:
init() Chamado na inicialização do Servlet uma única vez, antes que o mesmo possa
responder às requisições feitas pelos clientes.
service() Chamado a fim de que o Servlet possa responder a uma solicitação.
Em aplicações HTTP este método verifica qual o tipo de requisição (GET, POST, etc.) e encaminha o fluxo, conforme cada caso, para o métodos que tratarão cada situação
Uma mesma instância de um Servlet pode ser utilizada por vários clientes, permitindo desta forma a economia de recursos do servidor.
destroy() Chamado uma única vez, antes que o objeto seja destruído.
Responsável pela liberação dos recursos alocados pelo método init()
100
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Servlets – API Java Os Servlets são definidos como uma interface na API Java, sendo assim uma
classe qualquer deve implementar esta interface a fim de que possa ser considerando um Servlet
Esta interface é definida no pacote javax.servlet
Métodos definidos pela interface: void destroy()
Responsável pela finalização do Servlet e liberação de recursos
ServletConfig getServletConfig() Retorna um objeto ServeletConfig que contém informações de inicialização e de configuração
de um Servlet
java.lang.String getServletInfo() Retorna informações sobre o Servlet como autor,versão; etc
void init(ServletConfig config) Responsável pela inicialização e alocação de recursos
void service(ServletRequest req, ServletResponse res) Chamado pelo contêiner a fim de que o Servlet possa responder a uma requisição de serviço.
Esta interface é implementada pela classes: javax.servlet.GenericServlet; javax.servlet.http.HttpServlet
101
1/25/2014
17
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
HttpServlet Normalmente os Servlets a fim de serem executados sobre o protocolo
HTTP, o mesmo utilizado pela WEB
O protocolo HTTP define as seguintes operações: GET
Requisita uma página para leitura
HEAD Requisita o cabeçalho de uma página WEB
PUT Envia uma página a fim de ser escrita em servidor WEB
POST Envia informações que são adicionadas a uma página WEB
DELETE Remove uma página WEB
A classe HttpServlet uma classe abstrata que cria um Servlet próprio para uso com a Web.
Esta classe está definida no seguinte pacote: javax.servlet.http102
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
HttpServlet A classe HpptServlet define os métodos para que o Servlet possa ser utilizado
juntamente com o protocolo HTTP
Normalmente uma classe deverá especializar os métodos definidos nesta classe a fim de imprimir o comportamento desejado pelo Servlet
Métodos principais doGet(HttpServletRequest req, HttpServletResponse resp)
Utilizado em requisições do tipo HTTP GET
doHead(HttpServletRequest req, HttpServletResponse resp) Utilizado em requisições do tipo HTTP HEAD
doPost(HttpServletRequest req, HttpServletResponse resp) Utilizado em requisições do tipo HTTP POST
doPut(HttpServletRequest req, HttpServletResponse resp) Utilizado em requisições do tipo HTTP PUT
doDelete(HttpServletRequest req, HttpServletResponse resp) Utilizado em requisições do tipo HTTP DELETE
init; destroy; getServletInfo
103
1/25/2014
18
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
HttpServlet Normalmente os métodos Service, doOptions e doTrace não são
especializados
Os método doGet() e doPost() são os métodos usualmente especializados
As informações utilizadas na requisição e na resposta estão encapsuladas em HttpServletRequest e HttpServletResponse
104
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
HttpServlet Além dos métodos descritos anteriormente que devem ser especializados
existe outros métodos muito utilizados em um Servlet public ServletContext getServletContext()
Permite o obter um objeto que representa o contêiner do Servlet
public ServletConfig getServletConfig() Recupera um objeto ServletConfig.
Este objeto contém a configuração do Servlet que contém parâmetros de inicialização do Servlet, definidos no arquivo WEB.XML
public void log(java.lang.String msg) Escreve uma mensagem no arquivo de log do contêiner de Servlets
O nome do Servlet é adicionado ao início da mensagem (msg)
105
1/25/2014
19
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
HttpServletRequest A classe HpptServletRequest representa o pedido (request)
que é enviado do navegador(cliente) para o servidor (contêiner de Servlets)
Todos os parâmetros que são passados do cliente para o servidor estão encapsulados neste objeto
Este objeto é instanciado pelo contêiner e entregue para uso do servlet
Os principais métodos da classe HttpServlet sempre recebem um objeto HttpServletRequest
106
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
HttpServletRequestMétodos Principais public java.lang.String getParameter(java.lang.String name)
Este método permite o acesso a parâmetros que são recebidos do cliente.
Cada parâmetro possui um nome (name) que deve ser informado
O nome está definido em um Form Html ou então na URL de acesso ao servlet
public HttpSession getSession() Retorna uma sessão (objeto HttpSession) associado ao pedido e caso a mesma não
exista uma nova sessão é criada
Através da sessão é possível compartilhar objetos entre vários execuções pedido/resposta de um servlet
Ex: HttpSession session = request.getSession();
public HttpSession getSession(boolean create) Retorna uma sessão (objeto HttpSession) associado ao pedido
Uma nova sessão é criada somente se o parâmetro create igual a true
107
1/25/2014
20
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
HttpServletResponse A classe HpptServletRequest representa a reposta(response) que é
enviada do servidor (contêiner de Servlets) para o navegador(cliente)
Este objeto é instanciado pelo contêiner e normalmente é alterado pelo servlet a fim de produzir o resultado desejado
Os principais métodos da classe HttpServlet sempre recebem um objeto HttpServletResponse
Basicamente o servlet consiste em alterar este objeto conforme o necessário
Este objeto contém métodos que permite o acesso ao cabeçalho (headers) HTTP e cookies bem como ao conteúdo da resposta
108
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
HttpServletResponseMétodos Principais public void setContentType(java.lang.String type)
Permite definir o tipo de resposta que será devolvida ao navegador
O tipo mais comum é "text/hmtl"
public java.io.PrintWriter getWriter() throws java.io.IOException Este método obtém a stream (sequência de dados) que será utilizada na
resposta
Neste caso a stream representa uma sequência de carateres, como é um caso do conteúdo do tipo "text/html"
public ServletOutputStream getOutputStream() throws java.io.IOException Este método obtém a stream (sequência de dados) que será utilizada na
resposta
Neste caso a stream representa uma sequência de bytes (binária), como é um caso do conteúdo do tipo MIME (Multipurpose Internet Mail Extensions) como por exemplo: “application/zip”; application/pdf ou "image/jpeg"
109
1/25/2014
21
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
ServletContext Esta classe representa o contexto da aplicação ou seja o contêiner de um
Servlet
Através desta classe o Servlet pode obter parâmetros comuns existentes no arquivo WEB.XML; obter acesso ao arquivo de log da aplicação e ainda redirecionar pedidos
Existe uma única instância deste objeto em cada aplicação Web.
A aplicação Web pode conter vários Servlets e todos compartilham o mesmo contexto. Cada Servlet possui associado um objeto da classe ServletConfig que
representa configurações particulares deste Servlet
Estas configurações são expressas no element <servlet> do arquivo web.xml
117
1/25/2014
25
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
Passagem de Parâmetros deConfiguração Context-Param
O elemento context-param permite o uso parâmetros de inicialização para todo o sistema
A partir de qualquer servlet ou página JSP é possível obter seus valores através do método getInitParameter da classe ServletContext
O elemento contém dois elementos filhos que contém o nome do parâmetro (param-name) e o valor do parâmetro (param-value)
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.
HttpSession O protocolo HTTP é stateless, ou seja, um conjunto request/response
independe de outro
Normalmente é necessário implementar na aplicação do conceito de sessão onde um conjunto de diferentes request/reponse estão ligados entre si Exemplo: Aplicação bancária – agência e conta são informadas apenas no
primeiro request, porém é compartilhada por todos os outros request/response
Classe Implementa o conceito de sessão
Métodos principais Object getAttribute(String name)
void setAttribute(String name, Object value)
void invalidate()
void setMaxInactiveInterval(int interval)
boolean isNew()120
Programação para InternetProf. Flávio de Oliveira Silva, Ph.D.