0% acharam este documento útil (0 voto)
8 visualizações33 páginas

Servlets

A tecnologia Java é dividida em três plataformas: Java ME para dispositivos móveis, Java SE para desktops e servidores, e Java EE para aplicações empresariais. Java EE define um padrão para o desenvolvimento de aplicações distribuídas e é implementado por diversos servidores de aplicações. A arquitetura Java EE é baseada em uma estrutura multicamadas, incluindo cliente, camada web, camada de negócios e sistema de informação empresarial.

Enviado por

Alex Cruz
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
8 visualizações33 páginas

Servlets

A tecnologia Java é dividida em três plataformas: Java ME para dispositivos móveis, Java SE para desktops e servidores, e Java EE para aplicações empresariais. Java EE define um padrão para o desenvolvimento de aplicações distribuídas e é implementado por diversos servidores de aplicações. A arquitetura Java EE é baseada em uma estrutura multicamadas, incluindo cliente, camada web, camada de negócios e sistema de informação empresarial.

Enviado por

Alex Cruz
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 33

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

Programação para Internet 70


Flávio de Oliveira Silva, M.Sc.

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

Programação para Internet 71


Flávio de Oliveira Silva, M.Sc.
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
 produto mas uma especificação.
O Java EE não é um produto, 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

Programação para Internet 72


Flávio de Oliveira Silva, M.Sc.

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
 O l
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)
Programação para Internet 73
Flávio de Oliveira Silva, M.Sc.
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

Programação para Internet 74


Flávio de Oliveira Silva, M.Sc.

Aplicações Distribuídas
Camadas
 Cliente (Client Tier)
 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

Programação para Internet 75


Flávio de Oliveira Silva, M.Sc.
Aplicações Distribuídas
Camadas – Arquitetura Java EE
 Visão Geral das Camadas

Programação para Internet 76


Flávio de Oliveira Silva, M.Sc.

Aplicações Distribuídas
Arquitetura Java EE
 Comunicação entre as várias camadas

Programação para Internet 77


Flávio de Oliveira Silva, M.Sc.
Aplicações Distribuídas
Arquitetura Java EE
 Camada Web (Web Tier)
 JavaBeans; JSP Pages; Servlets

Programação para Internet 78


Flávio de Oliveira Silva, M.Sc.

Aplicações Distribuídas
Arquitetura Java EE
 Camada de Negócios (Business Tier)
 Baseada em EJB

Programação para Internet 79


Flávio de Oliveira Silva, M.Sc.
Java EE contêineres
 O contêiner fornece a infra-estrutura para a execução de um componente
específico da plataforma
 O servidor J2EE fornece dois tipos básicos de contêineres:
 têi
WEB contêiner
 EJB contêiner

Programação para Internet 80


Flávio de Oliveira Silva, M.Sc.

Java EE contêineres
Web Contêiner
 Executa Servlets e páginas JSP
 Servlets
 São classes Java que podem ser chamados dinamicamente e que podem executar
alguma
a gu a funcionalidade.
u c o a dade
 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 p para criar conteúdo dinâmico p
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

Programação para Internet 81


Flávio de Oliveira Silva, M.Sc.
Java EE contêineres
EJB 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
u a do a linguagem Java,
guage Ja podem se
a, que pode ser implantados (deployed)
p a ados (dep em qua
oyed) e qualquer
que
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

Programação para Internet 82


Flávio de Oliveira Silva, M.Sc.

Java EE contêineres
EJB 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

TIPO SUB TIPO


SUB‐TIPO DESCRIÇÃO
Componentes que simplesmente realizam a chamada de métodos.
Stateless (sem estado)
Utilizado para a implementação das regras de negócio
Session Componentes com estado funcionam como um proxy para aplicações
Stateful (com estado) do cliente. Estes componentes mantém seu estado entre as chamadas
de Métodos
Componentes sem estado que estão ligados ao Java Message Service
Message
(JMS), utilizado para chamada assíncrona de métodos
Componentes com estados que fazem o encapsulamento de uma
Component Managed
entidade de um banco de dados.
dados O servidor de aplicações gera o
(CMP)
código para conectar estes objetos a um banco de dados específico
Entity
Componentes com estados que fazem o encapsulamento de
entidades complexas de um banco de dados. Neste caso o
Bean Managed (BMP)
desenvolvedor deve escreve o código necessário para acessar o objeto
no banco de dados

Programação para Internet 83


Flávio de Oliveira Silva, M.Sc.
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
Especificações Versão Apache Versão Miníma
Versão Atual
Servlet/JSP Tomcat Java SE
3.0/2.2 7.0.x 7.0.21 1.6
2.5/2.1 6.0.x 6.0.32 1.5
2.4/2.0 5.5.x 5.5.33 1.4
2.3/1.2 4.1.x 4.1.40 1.3
2.2/1.1 3.3.x 3.3.2 1.1
Programação para Internet 84
Flávio de Oliveira Silva, M.Sc.

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
i i proposta t para a criação
i ã d de conteúdos
t úd di dinâmicos
â i ffoii através
t é d do
CGI (Common Gateway Interface)
 Este mecanismo permite a execução de um código, escrito em C ou Perl,
através do navegador

Programação para Internet 85


Flávio de Oliveira Silva, M.Sc.
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

Programação para Internet 86


Flávio de Oliveira Silva, M.Sc.

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

Programação para Internet 87


Flávio de Oliveira Silva, M.Sc.
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
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()

Programação para Internet 88


Flávio de Oliveira Silva, M.Sc.

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
Programação para Internet 89
Flávio de Oliveira Silva, M.Sc.
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.http
Programação para Internet 90
Flávio de Oliveira Silva, M.Sc.

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
 ( p q
doPut(HttpServletRequest q, HttpServletResponse
req, p p p)
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

Programação para Internet 91


Flávio de Oliveira Silva, M.Sc.
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

Programação para Internet 92


Flávio de Oliveira Silva, M.Sc.

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)

Programação para Internet 93


Flávio de Oliveira Silva, M.Sc.
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

Programação para Internet 94


Flávio de Oliveira Silva, M.Sc.

HttpServletRequest
Mé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
Ex: String sCmd = (String) request.getParameter("cmd");
 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();
 p p
public HttpSession g (
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

Programação para Internet 95


Flávio de Oliveira Silva, M.Sc.
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

Programação para Internet 96


Flávio de Oliveira Silva, M.Sc.

HttpServletResponse
Mé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"
 bli java.io.PrintWriter
public j i P i tW it getWriter()
tW it () throws
th j i IOE ti
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"

Programação para Internet 97


Flávio de Oliveira Silva, M.Sc.
Servlet Básico – Exemplo 1
package org.lp2.servlet;
import java.io.*; import javax.servlet.*;
public class HelloWorldServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOE ti {
IOException
//Indica que o conteudo da reposta é página html
response.setContentType("text/html");
//Obtém a stream de caracteres da saída
PrintWriter out = response.getWriter();
//Conteúdo básico de uma página HTML
out.println("<html>");
out.println("<head>");
out.println("<body bgcolor=\"blue\">");
out.println("<h1>");
t i tl (" h1 ")
out.println("HELLO SERVLET WORLD!");
out.println("</h1>");
out.println("</body>");
out.println("</html>");
}
}
Programação para Internet 98
Flávio de Oliveira Silva, M.Sc.

Servet Básico – Exemplo 2


Passagem de Parâmetros
package org.lp2.servlet;
import java.io.*; import javax.servlet.*;
public class ParameterServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOE ti {
IOException
//Obém o valor do parâmetro
String sCmd = (String) request.getParameter("cmd");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body bgcolor=\"blue\">");
out.println("<h1>");
out.println("Uso de Parâmetros em um Servlet!");
out.println("COMANDO
t i tl ("COMANDO = "+sCmd);
" C d)
out.println("</h1>");
out.println("O nome do comando acima foi passado como parâmetro.");
out.println("</body>");
out.println("</html>");
}
}
Programação para Internet 99
Flávio de Oliveira Silva, M.Sc.
Servet Básico – Exemplo 3
Passagem de Parâmetros – Login
package org.lp2.servlet;
import java.io.*;
import java.util.HashMap;
import javax.servlet.*;
i
importt javax.servlet.http.*;
j l t htt *
public class LoginServlet extends HttpServlet {
//Neste caso tanto doGet como doPost executarão as memas operações
protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException,
IOException {
doGet(arg0,arg1);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
//Para
//P definir
d fi i os usuários
á i e suas senha
h será
á criado
i d um HashMap
H hM
//que contém o nome do usuário e sua senha
HashMap<String,String> users = new HashMap();
users.put("flavio", "123");
users.put("mateus", "456");
//continua

Programação para Internet 100


Flávio de Oliveira Silva, M.Sc.

Servet Básico – Exemplo 3


Passagem de Parâmetros – Login
users.put("lucas", "101");
users.put("joao", "1213");
//Obém o valor do parâmetro
String sNome = (String) request.getParameter("nome");
St i sSenha
String S h = (String)
(St i ) request.getParameter("senha");
t tP t (" h ")
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String sStatus;
//Neste momento o Servlet poderia chamar uma classe
//responsável pela realização do serviço de login
//Neste exemplo, a fim simplificar será feita uma busca em um
//HashMap de usuarios e senhas. Neste mapa será fácil executar a a pesquisa
if (!users.containsKey(sNome)) {
sStatus
St t = "USUÁRIO NÃO CADASTRADO!"
CADASTRADO!";
}
else {
//Verifica se a senha está correta
//continua

Programação para Internet 101


Flávio de Oliveira Silva, M.Sc.
Servet Básico – Exemplo 3
Passagem de Parâmetros – Login
String sUserPass = users.get(sNome);
if (sUserPass.equals(sSenha))
sStatus = sNome + " - ACESSO AUTORIZADO! Seja bem-vindo";
else
St t = "ACESSO NÃO AUTORIZADO!"
sStatus AUTORIZADO!";
}
out.println("<html>");
out.println("<head>");
out.println("<title> :) Login no Sistema ---- </title>");
out.println("</head>");
out.println("<body bgcolor=\"green\">");
out.println("<h1>");
out.println("Uso de Forms HTML em um Servlet!");
out.println("LOGIN – RESULTADO" + sStatus);
out.println("</h1>");
out.println("</body>");
out.println("</html>");
}
}

Programação para Internet 102


Flávio de Oliveira Silva, M.Sc.

Servet Básico – Exemplo 3


Passagem de Parâmetros – Login
 O Servlet pode ser chamado utilizando o seguinte formulário HTML
<html>
<head>
<title>Formulário de Login</title>
</head>
<body>
<h1>
Bem vindo à Página de Login...
</h1>
<form action="login" method="post">
<h2>Digite Seu Nome</h2> <input type="text" name="nome">
<h2>Digite Sua senha</h2> <input type="text" name="senha">
<input type="submit" value="&Entrar no site">
</form>
</body>
</html>
 Os parâmetros "nome" e "senha" são obtidos no form e enviado no pedido
(request) para o servidor

Programação para Internet 103


Flávio de Oliveira Silva, M.Sc.
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
Especificações Versão Apache Versão Miníma
Versão Atual
Servlet/JSP Tomcat Java SE
3.0/2.2 7.0.x 7.0.12 1.6
2.5/2.1 6.0.x 6.0.32 1.5
2.4/2.0 5.5.x 5.5.33 1.4
2.3/1.2 4.1.x 4.1.40 1.3
2.2/1.1 3.3.x 3.3.2 1.1
Programação para Internet 104
Flávio de Oliveira Silva, M.Sc.

Tomcat – Estrutura de Pastas

Programação para Internet 105


Flávio de Oliveira Silva, M.Sc.
Tomcat – Estrutura de Pastas
 /bin
 Contém os scripts para inicialização (startup.sh / startup.bat) e finalização do
servidor (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
t t l
 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
<user username="admin" password=“pw" roles="tomcat,manager-gui,admin-gui"/>

Programação para Internet 106


Flávio de Oliveira Silva, M.Sc.

Tomcat – Estrutura de Pastas


 /lib
 Arquivos .Jar que compõe o Tomcat
 /logs
 Arquivos de log produzidos pelo Tomcat durante a execução
 Um chamada do tipo “System.out.println()” dentro de um Servlet será gravada
nos arquivos de log
 /webapps
 Aplicações Web Dinâmicas que estão disponíveis em uma instalação do
Tomcat
 O nome de cada pasta equivale ao contexto da aplicação web e deve ser
fornecido para acesso à mesma através do navegador
 Cada pasta destas deverá seguir o padrão para aplicações Web

Programação para Internet 107


Flávio de Oliveira Silva, M.Sc.
Estrutura de uma aplicação WEB
 / (Raiz da Aplicação)
 Todos os arquivos de acesso públicos são colocados nesta pasta como por
exemplo: HTML; JSP; GIF; etc.
 No caso do TOMCAT o diretório raiz da aplicação é criado dentro da pasta
webapps
 /WEB-INF
 Os arquivos desta pasta não são de acesso público
 Esta pasta contém um arquivo chamado web.xml, conhecido como
deployment descriptor, que contém as configurações para uma aplicação
WEB
 /WEB INF/classes
/WEB-INF/classes
 Todas as classes java compiladas (.class) são colocadas neste local
 /WEB-INF/lib
 Todas as classes que estão compactadas em um arquivo JAR são colocadas
neste diretório

Programação para Internet 108


Flávio de Oliveira Silva, M.Sc.

Deployment Descriptor
 O arquivo web.xml é conhecido como "deployment descriptor"
 Este arquivo contém toda a configuração do servlet que será utilizada
pelo contêiner de servlets (Tomcat)
 Este arquivo é escrito em XML e deve possuir no mínimo os seguintes
elementos:
<web-app>
<context-param>
</context-param>
<servlet>
</servlet>
<servlet-mapping>
</servlet-mapping>
</web-app

Programação para Internet 109


Flávio de Oliveira Silva, M.Sc.
Deployment Descriptor
Elementos – Versão 2.5
 context-param
 description
 display-name
 distributable
 ejb-ref
 ejb local ref
ejb-local-ref
 env-entry
 error-page
 filter
 filter-mapping
 icon
 jsp-config
 listener
 login-config
 mime-mapping
 resource-env-ref
 resource-ref
 security-constraint
 security-role
 servlet
 servlet-mapping
 session-config
 web-app
 welcome-file-list

Programação para Internet 110


Flávio de Oliveira Silva, M.Sc.

Deployment Descriptor
 Servlets 2.5 - JSP 2.1 (Tomcat 6)
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
p //j / / /j
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5"
>
<display-name>web app name</display-name>

<!
<!– outras declarações >
-->

</web-app>

Programação para Internet 111


Flávio de Oliveira Silva, M.Sc.
Deployment Descriptor
 Servlets 2.4 - JSP 2.0 (Tomcat 5)
<web-app
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
p // g/ /
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"
>
<display-name>web app name</display-name>

<!– outras declarações -->

</web app>
</web-app>

Programação para Internet 112


Flávio de Oliveira Silva, M.Sc.

Deployment Descriptor
 Para acessar Servlets este deve possuir no mínimo os seguintes elementos:
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xswie:bs-cahpepm
p p _a2L_o4c.axtsido"n="http://java.sun.com/xml/ns/j2ee
p //j / / /j
version="2.4">
<servlet>
<servlet-name>ServletUniqueName</servlet-name>
<servlet-class>servletClassFile</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletUniqueName</servlet-name>
<url pattern>/rootFolder</url pattern>
<url-pattern>/rootFolder</url-pattern>
</servlet-mapping>
</web-app>

Programação para Internet 113


Flávio de Oliveira Silva, M.Sc.
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 caminho
e 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
servlet (http://localhost:8080/{contextpath}/servApp)
*.do – Neste caso qualquer URL que termine com a string ".do" será mapeada para o servlet
(http://localhost:8080/{contextpath}/login.do

Programação para Internet 114


Flávio de Oliveira Silva, M.Sc.

Deployment Descriptor
Exemplo

Programação para Internet 115


Flávio de Oliveira Silva, M.Sc.
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; gravar operações em um arquivo de log e ainda
WEB.XML;
redirecionar pedidos
 Existe um único contexto em cada aplicação Web.
 A aplicação Web pode conter vários Servlets e todos compartilham o
mesmo contexto.

Programação para Internet 116


Flávio de Oliveira Silva, M.Sc.

Passagem de Parâmetros de
Configuraçã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)
 O parâmetro sempre é obtido como String
<context-param>
<param-name>webmaster-email</param-name>
<param-value>[email protected]</param-value>
</context-param>

Programação para Internet 117


Flávio de Oliveira Silva, M.Sc.
ServletContext
Métodos Principais
 Representa o contexto da aplicação
 Caminho físico de arquivos; web.xml
 O objeto ServletContext poder ser obtido com o seguinte método da classe
HttpServlet
 public ServletContext getServletContext()
 public java.lang.String getInitParameter(java.lang.String name)
 Este método permite obter o valor de parâmetros existentes no arquivo WEB.XML
 Para isto é necessário informar o nome do parâmetro (name)
 Um exemplo de parâmetros é uma string que contém o nome do banco de dados
 public RequestDispatcher getRequestDispatcher(java.lang.String path)
 O RequestDispatcher é um objeto que recebe pedido do cliente e envia este pedido
para qualquer
l recurso dde uma aplicação
li ã webb existente
i t t no servidor,
id como por exemplo,
l
um Servlet, um arquivo HTML ou um JSP
 Para obter este objeto é necessário informar o caminho (path) do recurso
RequestDispatcher rd = request.getRequestDispatcher("/CatalogView.jsp")

Programação para Internet 118


Flávio de Oliveira Silva, M.Sc.

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()
Programação para Internet 119
Flávio de Oliveira Silva, M.Sc.
Servlets
Classes API – Visão Geral

Programação para Internet 120


Flávio de Oliveira Silva, M.Sc.

Armazenamento e Recuperação de
Informações (Objetos)
 É possível armazenar e recuperar informações em tempo de
execução de um servlet
 Desta forma é possível o intercambio de informações entre
diferentes servlets
 Armazenar Objeto
 void setAttribute(String name, Object object)
 Recuperar Objeto
 Object getAttribute(String name)

Programação para Internet 121


Flávio de Oliveira Silva, M.Sc.
Armazenamento e Recuperação de
Informações (Objetos)
 O objeto armazenado pode estar em diferentes escopos, conforme sua
necessidade
 Nível Aplicação
 Classe: ServletContext
 Objeto armazenado está disponível para todos os servlets daquele contexto, todas as
sessões existentes e qualquer pedido ou resposta
 Durante toda a execução da aplicação
 Nível Sessão
 Classe: HttpSession
 Objeto armazenado esteja disponível para todos os servlets
 Duração equivalente à Sessão
 Nível Pedido
 HttpServletRequest
 Objeto armazenado pode ser enviado para outro servlet através do RequestDispatcher
 Duração do pedido

Programação para Internet 122


Flávio de Oliveira Silva, M.Sc.

Servlets
Encaminhamento de Pedido
 Uma operação comum entre vários servlets é o encaminhamento do
pedido (request)
 Para isto é utilizado a classe RequestDispatcher
 Este objeto pode ser obtido tanto a partir do contexto da aplicação
(ServletContext) quanto de um pedido (HttpServletRequest)
 O código abaixo mostra como encaminhar o pedido uma página de erro
(/errorpage) que neste caso pode ser tratado por outro servlet

1. RequestDispatcher rd;
2. q g q p p g
rd = request.getRequestDispatcher("/errorpage");
//Encaminhar request e response para outro servlet
3. rd.forward(request, response);

Programação para Internet 123


Flávio de Oliveira Silva, M.Sc.
Exemplo
Realização Login

Programação para Internet 124


Flávio de Oliveira Silva, M.Sc.

Exemplo – Login
Encaminhamento Pedido

Programação para Internet 125


Flávio de Oliveira Silva, M.Sc.
Armazenamento e Recuperação de Informações
Contexto Aplicação (ServletContext)
1. public class LoginStaticServlet extends HttpServlet {
2. public void init(ServletConfig config) throws ServletException {
3. super.init(config);
4. ServletContext context = config.getServletContext();
5
5. t t tAtt ib t ("LOGINCOUNTER"
context.setAttribute("LOGINCOUNTER",new I t (0))
Integer(0));
6. }
7. protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
8. //...
9. String loginreceived = request.getParameter("user");
10. String password = request.getParameter("password");
11. ServletContext context = this.getServletContext();
12. retorno = service.doLogin(loginreceived, password);
13.
13 if (retorno){
14. //login com sucesso
15. Integer loginCounter;
16. loginCounter = (Integer) context.getAttribute("LOGINCOUNTER");
17. //A cada login com sucesso o contador é acrescido de um
18. loginCounter = loginCounter + 1;
19. context.setAttribute("LOGINCOUNTER", loginCounter);
}
Programação para Internet
20.
126
21. }
Flávio de Oliveira Silva, M.Sc.

Armazenamento de Informações
Contexto da Sessão
1. public class LoginStaticServlet extends HttpServlet {
2. protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
3. //...
4
4. retorno = service doLogin(loginreceived password);
service.doLogin(loginreceived,
5. if (retorno){
6. //login com sucesso
7. //...
8. //Cria a sessão usuário, caso a mesma não exista
9. HttpSession session = request.getSession(true);
10. //Armazena o nome do usuário na sessão
11. session.setAttribute("USER", loginreceived);
12. //...
13.
13 //Encaminha pedido para o AppServerlet
14. RequestDispatcher rd;
15. rd = request.getRequestDispatcher("/apphome");
16. rd.forward(request, response);
17. }
18. }

Programação para Internet 127


Flávio de Oliveira Silva, M.Sc.
Recuperação de Informações
Contexto da Aplicação e Sessão
1. public class AppServlet extends HttpServlet {
2. protected void doPost(HttpServletRequest request, HttpServletResponse
3. response) throws ServletException, IOException {
4. //recupera o contexto da aplicação e o valor dos atributos
5
5. S l tC t t context
ServletContext t t = thi tS l tC t t()
this.getServletContext();
6. Integer logCounter = (Integer) context.getAttribute("LOGINCOUNTER");
7. //Obtem o nome do usuario que realizou o login
8. HttpSession session = request.getSession();
9. String sLoginName = (String) session.getAttribute("USER");
10. response.setContentType("text/html");
11. PrintWriter out = response.getWriter();
12. out.println("<html>");
13. out.println("<head>");
14. out.println("<title>AppHome</title>");
t i tl (" titl A H /titl ")
15. out.println("</head>");
16. out.println("<body>");
17. out.println("Bem Vindo " + sLoginName);
18. out.println("<h3>Sistema acessado "+ logCounter.toString()+ " vezes");
19. out.println("</body>");
20. out.println("</html>");
21. } Programação para Internet 128
22. } Flávio de Oliveira Silva, M.Sc.

Servlet
Papéis
 No geral os servlets os servlets estão relacionados com dois papéis
básicos
 Controle
 Neste caso o servlet não é responsável pela produção de conteúdo
 Realiza operações invocando serviços de outras classes
 Armazena dados no contexto da aplicação, da sessão ou do pedido
 ServletContext; HttpSession e HttpServletRequest
 Encaminha pedido para outros servlets
 RequestDispatcher
 Exemplo Anterior: LoginServlet
 Conteudo
 Responsável pela produção de conteúdo
 Servlet que efetivamente produz o código HTML
 Devolve a resposta para o cliente
 Obtém dados armazenados no contexto da aplicação, da sessão ou do pedido
 Exemplo Anterior: AppServlet e LoginErrorServlet

Programação para Internet 129


Flávio de Oliveira Silva, M.Sc.
Arquitetura MVC para WEB
 No caso da abordagem WEB existem algumas
particularidades, então o padrão ficou conhecido como
"Model 2"
 Esta particularidade acontece pois o browser não é
necessariamente a parte VIEW do modelo pois o mesmo
simplesmente mostra um código HTML
 Desta forma o código mostrado no browser está
desacoplado, pois precisa ser traduzido para o HMTL antes
de ser visualizado.

Programação para Internet 130


Flávio de Oliveira Silva, M.Sc.

Model 1 x Model 2
 Model 1
 Primeiro modelo disponível para o desenvolvimento de aplicações WEB
 Elementos: Browser; Servlets/Páginas JSP e um Banco de dados
 Neste modelo pode ocorrer duplicação de código
 As regras de negócio e a Apresentação dos dados estão combinadas em um único
elemento, dificultando modificações e manutenções

Programação para Internet 131


Flávio de Oliveira Silva, M.Sc.
Model 1 x Model 2
 Model 2
 Segundo modelo disponível para o desenvolvimento de aplicações WEB
 Baseado no modelo MVC (Model – View – Controller)
 El t
Elementos: B
Browser; C t ll (Servlets);
Controller (S l t ) View(Servlets
Vi (S l t ou Páginas
Pá i JSP)
JSP);
Model(Outras classes) e um Banco de dados
 Elementos separados e responsabilidades bem definidas
 Facilita a reutilização de código e futuras modificações
 Permite o uso de múltiplos Banco de Dados e Clientes

Programação para Internet 132


Flávio de Oliveira Silva, M.Sc.

Arquitetura MODEL 2

1.
1 O usuário envia o pedido que é recebido por um servleto de controle (Controller)
2. O servlet instância um ou mais Beans (Classes Java) para realizar o trabalho
3. O servlet adiciona os Beans no pedido, sessão ou contexto da aplicação e envia
o pedido para um Servlet de Conteúdo ou uma página JSP (VIEW)
4. Este finalmente extrai os dados destes Beans, produz a resposta HTML e envia
o resultado (response)
Programação para Internet 133
Flávio de Oliveira Silva, M.Sc.
Aplicação Exemplo
 Fluxo entre páginas

Programação para Internet 134


Flávio de Oliveira Silva, M.Sc.

Aplicação Exemplo - Servlets


 Servlets envolvidos

Programação para Internet 135


Flávio de Oliveira Silva, M.Sc.

Você também pode gostar