2 - Programação Servidor Com JAVA
2 - Programação Servidor Com JAVA
Descrição
Propósito
Preparação
Web Servers
Identificar as características de Web Servers no ambiente Java.
Módulo 2
Application Servers
Identificar as características de Application Servers no ambiente Java.
Módulo 3
Módulo 4
1 - Web Servers
Ao final deste módulo, você será capaz de identificar as
características de Web Servers no ambiente Java.
O protocolo HTTP e o
ambiente servidor
Protocolo HTTP
Neste vídeo, apresentaremos o protocolo HTTP. Vamos lá?
Atenção!
De acordo com a metodologia mais aceita, atualmente, no que se refere
à construção de páginas, a estruturação do conteúdo utiliza HTML,
dados transitam nos formatos XML ou JSON, e a formatação tipográfica
é baseada em CSS (Cascading Style Sheets).
Java
content_copy
Comentário
Algo que devemos ter em mente, com relação ao modelo Web, é a
grande diferença do modelo desktop, no que se refere à gestão de
estado de objetos. No modelo desktop, temos a armazenagem de
objetos em um espaço de memória local, permitindo que os dados
sejam mantidos durante toda a execução do sistema, mesmo que
ocorra a troca de janelas, o que viabiliza a manutenção de estados,
enquanto no modelo Web, a cada requisição e resposta, todos os
objetos são recriados e o estado não pode ser mantido.
Java
content_copy
Cookie
É um pequeno arquivo de computador ou pacote de dados enviado
por um site de internet para o navegador do usuário. Cada vez que o
usuário visita o site novamente, o navegador envia o cookie de volta
para o servidor para notificar atividades prévias do usuário.
Dica
Com base em uma tecnologia servidora, a melhor solução para manter
os estados será a utilização de sessões, que correspondem a objetos
alocados ao servidor, fazendo referência a dada conexão. Enquanto o
usuário se mantiver no site, todos os dados atribuídos serão mantidos,
sendo eliminados na perda da conexão.
No ambiente Java, um objeto da classe HttpSession, que costuma se
chamar session, permite a gerência de sessões HTTP, mas é sempre
importante lembrar que ocorre consumo de memória no servidor, e a
prática deve ficar restrita a finalidades específicas.
Contêiner
Ambiente de execução fechado voltado para tipos específicos de
componentes.
Atenção!
Um componente que implemente a interface Servlet é uma classe que
permite ampliar as funcionalidades básicas de um servidor, ou seja, na
prática é um aplicativo plugável, que deve ser executado em ambiente
específico, como o contêiner Web oferecido pelo Tomcat. Por meio de
um Servlet, temos o processamento no servidor, permitindo a geração
dinâmica de conteúdo para a resposta HTTP.
keyboard_arrow_right bin
Binários estruturais do servidor, agrupados em
arquivos no formato jar, e scripts para inicialização
ou término da execução.
keyboard_arrow_right conf
Arquivos de configuração, como server.xml, que
guardam os parâmetros gerais do Tomcat, incluindo
a porta utilizada para comunicação.
keyboard_arrow_right lib
Bibliotecas de inicialização do servidor, no formato
jar, que também ficam disponíveis para todos os
aplicativos do ambiente.
keyboard_arrow_right logs
Arquivos de log, extremamente úteis para a
identificação dos erros que ocorreram durante a
execução do servidor.
keyboard_arrow_right webapps
Di ói d b i l ã d li i
Diretório de base para a instalação dos aplicativos
Java Web, ou seja, define a raiz do site. Cada
aplicativo corresponderá a um subdiretório.
Java
content_copy
Xml
content_copy
Xml
content_copy
Com a alteração efetuada, podemos acessar os gestores gráficos,
clicando em alguns dos links presentes na página inicial do servidor,
como Manager App e Host Manager.
b d d à d di ói d fi id l
obedecendo à estrutura de diretórios definida pelo
pacote, e o reconhecimento pelo servidor pode ser
configurado, com a utilização do mapeamento
correto, no arquivo web.xml.
Questão 1
Questão 2
A Requisição
B Resposta
C Cookie
D Sessão
E Retorno
2 - Application Servers
Ao final deste módulo, você será capaz de identificar as
características de Application Servers no ambiente Java.
Visão geral
video_library
Servidores de aplicativos
Para começar, assista ao vídeo a seguir para aprender mais sobre
servidores de aplicativos.
Quando nos referimos a servidores de aplicativos, ou Application
Servers, estamos considerando plataformas capazes de suportar o
perfil de processamento necessário para projetos de grande porte, com
alto nível de conectividade, processamento paralelo e
distribuído, pools de recursos compartilhados, serviços de autenticação
e autorização, entre diversos outros elementos comuns para um
ambiente empresarial complexo. Entre os componentes necessários, é
comum encontrar os Web Servers, que nesse caso atuam como
módulos internos dos Application Servers.
Comentário
O objetivo primário de um servidor de aplicativos é prover um ambiente
que trate das necessidades comuns do ambiente de execução, como
segurança, balanceamento de carga, alta disponibilidade, gerenciamento
de exceções e controle transacional, entre outras. Esses servidores
oferecem uma arquitetura e um conjunto de contêineres, permitindo ao
programador se concentrar apenas nas regras de negócio e deixando
para o servidor a responsabilidade sobre a gerência de recursos e
funcionalidades comuns.
Atenção!
Uma transação é um processo atômico e isolado, que deve ser
executado de forma consistente e com resultados duráveis.
Comentário
Devido à grande quantidade de componentes e recursos
compartilhados, é natural que haja a necessidade de individualização, o
que deve ser feito com o uso de nomes únicos, gerenciados por
serviços de nomes e diretórios. Para servidores criados na plataforma
Java, o JNDI (Java Naming and Directory Interface) gerencia os
serviços para registro e localização de recursos, funcionando como um
canal de identificação comum entre os aplicativos, tanto internamente
quanto para acessos externos, além de centralizar toda a integração
com serviços de nomes e diretórios de outras plataformas.
Objetos distribuídos e o
Glassfish
Tecnologias de objetos distribuídos
Vamos entender mais sobre tecnologias de objetos distríbuidos?
Assista ao vídeo a seguir.
Atenção!
O registro dos EJBs, no ambiente Java, utiliza JNDI, e a comunicação
utiliza o protocolo misto RMI-IIOP. Quanto ao descritor de serviços,
utilizamos interfaces Java, mas pode ser gerado o IDL a partir das
interfaces.
REGISTRO E
TECNOLOGIA DESCRITOR
LOCALIZAÇÃO
Tabela: Componentes arquiteturais para serviços distribuídos.
Denis Gonçalves Cople
video_library
Ferramentas do servidor de
aplicações Glassfish
Assista ao vídeo a seguir para saber mais sobre a instalação e as
principais ferramentas do console administrativo do servidor de
aplicações Glassfish.
Atenção!
Seguindo a arquitetura JEE, o ponto central do servidor é o contêiner
EJB, que gerencia o ciclo de vida dos objetos distribuídos, além de
intermediar a utilização de recursos do ambiente. A disponibilização de
recursos para os EJBs é configurada através de arquivos XML e
anotações de código, sempre por meio de identificadores no JNDI.
bin
Contém apenas a ferramenta asadmin para inicialização pelo
console e representa a divisão descrita.
glassfish
Diretório do servidor de aplicativos, com os componentes
estruturais, arquivos de configuração e domínios
estabelecidos.
javadb
Corresponde a uma distribuição do banco de dados Derby,
contendo os subdiretórios bin e lib, com scripts de
gerenciamento e bibliotecas.
mq
Contém os componentes da mensageria GlassFish MQ, além
de diversos exemplos de utilização, disponibilizados no
subdiretório examples.
Atenção!
Com a camada de negócios completa, ao nível do jar, podemos
implementar a interface Web no projeto war, com a criação de
elementos como Servlets e JSPs. Os elementos de interface não podem
conter inteligência de negócios, funcionando como um simples canal de
comunicação com o usuário e direcionador das solicitações efetuadas
para a camada de negócios.
Questão 1
A IIOP
B SOAP
C RMI
D RMI-IIOP
E RPC
Questão 2
A JDBC
B JMS
C JTA
D JTS
E JEE
Aplicativos web no
Netbeans
Neste vídeo, vamos aprender sobre os aplicativos web no Netbeans.
Passo 2
Defina o nome do projeto (WebTeste001).
Passo 3
Escolha o servidor (GlassFish) e a versão do JEE (Java EE 8
Web).
keyboard_arrow_right Libraries
Bibliotecas Java requeridas pelo aplicativo Web.
keyboard_arrow_right Configuration Files
Arquivos de configuração,
como MANIFEST.MF e web.xml.
Comentário
A classe HttpServlet, filha de GenericServlet, integra-se ao ambiente de
execução do servidor através do contêiner Web, tirando proveito das
tecnologias Java presentes ali, como pools de conexão, controle
transacional e ferramentas de segurança. Quanto à comunicação com o
usuário, a classe HttpServlet apresenta métodos para responder às
chamadas dos tipos GET e POST no protocolo HTTP.
Passo 1
Escolha o arquivo do tipo Servlet na categoria Web.
Passo 2
Defina o nome do Servlet (ServCalc) e do pacote (servlets).
Psso 3
Finalize sem adicionar as informações ao arquivo web.xml.
Java
content_copy
A assinatura do método processRequest, assim como ocorre
em doGet e doPost, traz dois tipos de parâmetros:
Tipo Tipo
HttpServletRequest HttpServletResponse
Com o nome request, close Com o nome response,
para receber a requisição que será responsável pela
do usuário. resposta HTTP.
Exemplo de localhost:8080/WebTeste001/ServCalc?a=10&b=15.
Html
content_copy
Tecnologia de JSPS
video_library
Demonstração dos
artefatos do JSP
Assista ao vídeo a seguir para saber mais sobre a criação de página
JSP.
Vamos criar uma página JSP simples, utilizando o nome ListaCores. Ela
não irá fornecer nenhuma funcionalidade relevante para o sistema, mas
permitirá que analisemos os elementos estruturais principais das
páginas JSP.
Html
content_copy
Vamos agora compreender melhor Diretivas, HTML e Scriptlet a seguir:
Diretivas expand_more
HTML expand_more
Scriptlet expand_more
Controle de sessões
As sessões HTTP são de grande utilidade no ambiente Web, provendo
uma forma de manutenção de estados na troca de páginas, pois ao
contrário dos sistemas desktop, com valores mantidos na alternância de
janelas, a cada página temos um novo conjunto de variáveis,
desconsiderando-se todas as existentes antes da requisição ser
efetuada.
Atenção!
Nas páginas JSP, o controle de sessões é feito com o uso do objeto
implícito session, da classe HttpSession.
Para demonstrar o processo de login, vamos criar uma página JSP, que
receberá o nome "Segura.jsp" e representará um recurso com acesso
autenticado.
Html
content_copy
Enquanto os parâmetros da requisição HTTP assumem apenas valores
do tipo texto, os atributos da sessão permitem guardar qualquer tipo de
objeto. Embora seja possível a utilização de estruturas mais complexas,
iremos utilizar apenas um elemento de texto.
Html
content_copy
Java
content_copy
Aqui estamos tratando de um processo de login muito simples, mas
que, por se tratar de uma autenticação de usuário, deverá adotar apenas
o método doPost. O parâmetro acao, indicando a solicitação de conexão
ou desconexão, é obrigatório, sendo gerada uma exceção caso ele não
seja fornecido.
Atenção!
Caso sejam fornecidas credenciais diferentes das estipuladas, será
definido o atributo erro para a requisição, com a mensagem "Dados
Inválidos", e ocorrerá o retorno para Login.jsp, por meio de um
redirecionamento interno.
Página de login.
Questão 1
A name
B class
C urlPatterns
D link
E Location
A Diretiva
B Expression
C Comentário
D Scriptlet
E Componente
O conceito de middleware
video_library
Middleware
Neste vídeo, vamos aprender sobre middleware.
Front-end expand_more
Back-end expand_more
Vejamos um exemplo:
Exemplo
As mensagerias são outro bom exemplo de back-end, com uma
arquitetura voltada para a comunicação assíncrona entre sistemas,
efetuada por meio da troca de mensagens. Essa é uma tecnologia
crucial para diversos sistemas corporativos, como os da rede bancária.
Comentário
Com diferentes componentes para acesso e modelos de programação
heterogêneos, a probabilidade de ocorrência de erros é simplesmente
enorme, levando à necessidade de uma camada de software
intermediária, responsável por promover a comunicação entre o front-
end e o back-end. Foi definido o termo middleware para a classificação
desse tipo de tecnologia, que permite integração de forma transparente
e mudança de fornecedor com pouca ou nenhuma alteração de código.
Passo 1 expand_more
Passo 2 expand_more
Passo 3 expand_more
Passo 4 expand_more
Java
content_copy
No início do código, temos o driver Derby sendo instanciado a partir a
partir de uma chamada para o método forName. Com o driver
instanciado, ele fica disponível para o aplicativo, permitindo abrir as
conexões com o banco de dados através de JDBC.
Atenção!
As consultas ao banco são feitas com a utilização de executeQuery,
mas os comandos para manipulação de dados são executados através
de executeUpdate.
video_library
Demonstração de uso de
componentes JDBC
Assista ao vídeo a seguir para saber mais sobre os aplicativos web com
uso de DAO.
Data access object (DAO)
Agora que sabemos efetuar as operações sobre o banco de dados, seria
interessante organizar a forma de programar, pois é fácil imaginar a
dificuldade de manutenção em um sistema com dezenas de milhares de
linhas de código Java, contendo diversos comandos SQL espalhados ao
longo das linhas.
Java
content_copy
Java
content_copy
Inicialmente, criamos os métodos getStatement e closeStatement com
o objetivo de gerar executores de SQL e eliminá-los, efetuando também
as conexões e desconexões nos momentos necessários. Outro método
é o getConnection, utilizado apenas para encapsular o processo de
conexão com o banco.
Atenção!
O método obterTodos irá retornar todos os registros da tabela Produto
no formato de um ArrayList de entidades do tipo Produto.
Primeiramente, é executado o SQL necessário para a consulta e, para
cada registro obtido no cursor, é gerado um novo objeto da classe
Produto e adicionado à lista de retorno.
Html
content_copy
A princípio, foi necessário importar as classes Produto e ProdutoDAO,
com a utilização da diretiva page, viabilizando o uso delas no Scriptlet.
A partir daí, bastou instanciar o DAO, efetuar a chamada
para obterTodos e percorrer a coleção, acrescentando os itens de lista
para cada produto recebido.
Java
content_copy
Dica
Para definir os parâmetros, utilizamos pontos de interrogação, que
assumem valores posicionais, a partir de um, o que é um pouco
diferente da indexação dos vetores, que começa em zero.
Html
content_copy
Em seguida, vamos adicionar um arquivo do tipo JSP, na categoria Web,
com o nome ProdutoLista. A nova página será responsável pela exibição
dos dados emitidos a partir do Servlet, além de apresentar links para
inclusão e exclusão de produtos.
Html
content_copy
Atenção!
Como os atributos podem ser de qualquer tipo de objeto, é necessário
efetuar o type cast ao recebê-los, via método getAttribute.
Após resgatar a lista, executamos um loop do tipo for each para visitar
todos os produtos da lista, e para cada um é executado o bloco de
repetição. Note que o bloco, delimitado com o uso de chaves, contém
elementos HTML e Scriptlets, uma técnica muito interessante, que nos
permite aproveitar a melhor forma de escrita a cada ponto.
Html
content_copy
WebServlet
content_copy
O primeiro passo, na execução do Servlet, é a captura do
parâmetro acao, e se ele não é fornecido, assumimos o valor padrão
"listar". Com base nesse parâmetro, teremos a escolha da página de
destino, que será ProdutoDados.html para o início do processo de
inclusão e ProdutoLista.jsp para as demais ações.
Comentário
A finalização do processo de inclusão, após o preenchimento dos dados
e envio pelo usuário, bem como a exclusão de um registro e a simples
listagem, direciona para a página ProdutoLista.jsp, onde deve ser
resgatado o atributo listaProduto. Com base na necessidade, temos a
chamada para setAttribute, no nível do Servlet, para qualquer ação que
seja diferente do início da inclusão.
Questão 1
A PreparedStatement
B ResultSet
C Statement
D Connection
E Exception
Questão 2
A Session Facade
B DAO
C Flyweight
D Front Controller
E Composite
Considerações finais
Neste estudo, analisamos dois servidores de grande relevância para a
plataforma Java: o Web Server Tomcat e o Application
Server GlassFish. Observamos como eles podem ser configurados e
utilizados, além de compreender o formato correto para a geração de
aplicativos para os servidores.
headset
Podcast
Agora, encerramos nosso estudo abordando um pouco mais sobre
programação Servidor com Java.
Explore +
Para se aprofundar mais neste tema, sugerimos as seguintes leituras:
Referências
CASSATI, J. P. Programação servidor em sistemas web. Rio de Janeiro:
Estácio, 2016.
Download material