Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introdução • Desde meados da década de noventa, a Internet tem evoluído e se popularizado no mundo todo; � O número de usuários é cada vez maior no mundo inteiro; � O número de páginas é cada vez maior; Introdução • Todos estes fatores tornaram a Web um ambiente propício para a realização de diversas atividades: � Comércio eletrônico; � Acesso a diversos tipos de informação; � Oferecimento de diversos tipos de serviços; Introdução • Toda essa demanda faz surgir a necessidade de se desenvolver aplicações para o ambiente Web; • É necessário uma tecnologia que dê suporte ao desenvolvimento deste tipo de aplicação; Entendendo o HTTP • O principal mecanismo para a navegação na Internet é o protocolo HTTP; • Interação na forma de requisição- resposta; • O cliente faz a solicitação através de um browser ao servidor Web no qual o recurso desejado está armazenado; Entendendo o HTTP • Na maioria das vezes, esse recurso é uma página HTML; � Mas também pode ser um documento pdf, um vídeo, uma imagem, um documento de texto, etc; Entendendo o HTTP • Visão geral de uma comunicação HTTP: Entendendo o HTTP • Uma interação HTTP é composta por dois elementos principais: � A requisição enviada pelo cliente; � A resposta devolvida pelo servidor; Entendendo o HTTP • A requisição contém as seguintes informações: � A ação (método) que deve ser executada; � A URL do recurso que deve ser recuperado; � Os parâmetros que devem ser usados na ação; Entendendo o HTTP • A resposta contém as seguintes informações: � Um código de status; � O tipo de recurso que foi retornado; � O conteúdo que foi retornado pelo servidor; Entendendo o HTTP • A maior parte das requisições HTTP é feita usando os métodos GET e POST; � Mas o protocolo também define outras operações; • Os dois métodos recuperam um recurso armazenado no servidor; � Embora de uma forma um pouco diferente; Entendendo o HTTP • O método GET: � É o método de requisição mais simples; � Quantidade limitada de caracteres; �Varia de acordo com o servidor; � Normalmente é usado quando clicamos em um link para ir para outra página ou para abrir/baixar um arquivo; Entendendo o HTTP • O método GET: � Exemplos de URLs usadas com o método get; �http://www.ifpb.edu.br �http://www.ifpb.edu.br/artigos/artigo.doc Entendendo o HTTP • O método GET: � O método também pode enviar parâmetros para o servidor, mas estas informações são colocadas como parte da URL; �http://www.minhaplicacao.com.br/meuservlet?cu rso=ads&disciplina=psd Entendendo o HTTP • O método POST: � É um tipo de solicitação mais poderosa; � As informações são passadas no corpo da mensagem, e não na URL; � Podemos passar uma grande quantidade de informações; �Como os dados de um formulário; Entendendo o HTTP • O servidores Web tradicionais só entregam páginas HTML estáticas; � Os documentos são estáticos e desenvolvidos em tempo de design; • Como gerar páginas cujo conteúdo varia de acordo com os resultados de uma aplicação? Entendendo o HTTP • Para a geração de páginas dinâmicas, uma outra aplicação precisa ajudar o servidor; � Invocando a aplicação correta para a geração da página; � Devolvendo a página gerada para o cliente que fez a solicitação; As soluções existentes • Algumas tecnologias foram propostas para a geração de páginas dinâmicas: � Applets; � Servlets; � Java Server Pages (JSP); � Common Gateway Interface (CGI); � Active Server Pages (ASP); � Hypertext Preprocessor (PHP); Applets • Primeira solução proposta para a linguagem java; • As classes java são embutidas na página HTML através de uma tag especial; • São executados na JVM da máquina cliente; Applets • Algumas desvantagens: � Requerem que o browser tenha uma JVM instalada; � A JVM tem que ser carregada antes de executar o applet pela primeira vez; � Applets são executados na máquina cliente, e, por isso, podem sofrer restrições de segurança; Servlets • Servlets são classes java capazes de manipular e responder requisições de clientes Web; • Eles são armazenados e executados na máquina do servidor web; • São independentes do protocolo de rede, mas, normalmente atuam com o protocolo HTTP; Java Server Pages • Outra tecnologia Java para a geração de páginas dinâmicas; • Permite uma melhor abstração para servlets; • Permite que tags e códigos para a chamada de comandos java sejam inseridos dentro da página; Common Gateway Interface • Tecnologia que permite que páginas sejam geradas a partir de programas feitos em linguagem de scripting; � Principalmente Perl; • Os scripts CGI também rodam no lado do servidor; Active Server Pages • Solução da Microsoft para a geração de páginas dinâmicas; • Também baseada em linguagens de scripting, com os scripts sendo executados no servidor; • Foi substituída pela tecnologia ASP.NET; Hypertext Preprocessor (PHP) • Linguagem bastante popular desenvolvida para o desenvolvimento de páginas dinâmicas; � Mas também pode ser usada como uma linguagem de propósito geral; • A linguagem é interpretada e os programas rodam no lado do servidor; O container Web • O servidor web tradicional não é capaz de tratar servlets; • Quem faz isso é um programa chamado de container Web; � É ele quem gerencia e executa os servlets de uma aplicação; O container Web • O container Web desempenha várias tarefas: � Gerenciamento do ciclo de vida; �Carregando, instanciando, chamando métodos e destruindo servlets; � Suporte a multithread; �Criando, destruindo e sincronizando threads; O container Web • O container Web desempenha várias tarefas: � Gerenciamento de segurança; �Um descritor pode ser usado para configurar e modificar a segurança da aplicação; � Suporte a Java Server Pages; �Traduzindo o código JSP em código java de verdade; O Apache Tomcat • Container web oferecido pela Apache; • Ferramenta Open Source; • Implementa as tecnologias de servlets e JSP; O Apache Tomcat • Pode ser integrado às principais IDEs usadas para o desenvolvimento de aplicações Java; � Mas também pode ser usado de forma isolada; Servlets • Java Servlets é uma tecnologia presente na plataforma J2EE; � Presente no diretório lib do servidor de aplicações ou do container web; • O pacote javax.servlet contém as classes e interfaces necessárias para a criação de servlets; Principais componentes da API de servlets Servlets • A interface Servlet: � Interface padrão que descreve o comportamento de um servlet; � Descreve entre outras coisas, a implementação dos métodos referentes ao ciclo de vida do servlet; � Ela é implementada pela classe GenericServlet; Servlets • A interface Servlet: � A interface oferece alguns métodos relacionados ao seu ciclo de vida; � init(ServletConfig config); – Chamado no momento em que o servlet é inicializado; �service(ServletRequest, ServletResponse); – Chamado para que o servlet responda à requisição do cliente; Servlets • A interface Servlet: � A interface oferece alguns métodos relacionados ao seu ciclo de vida; �destroy(); – Chamado para finalizar o servlet; Servlets • A interface Servlet: � Todos os métodos que controlam o ciclo de vida do servlet são invocados pelo container; � Uma versão default destes métodos já é oferecida pelas classes que implementam a interface; Servlets • A interface ServletConfig: � Interface que descreve o comportamento de um objeto que encapsula informações de configuração do servlet; � Os objetos desta interface encapsulam informações de inicializaçãodo servlet; � Falaremos mais sobre isso nos próximos assuntos; Servlets • A classe GenericServlet: � Classe que implementa as interfaces Servlet e ServletConfig; � Representa um servlet genérico, independente do protocolo de rede usado durante a requisição; � Oferece uma implementação default para os métodos do ciclo de vida do servlet; Servlets • A classe HttpServlet: � Classe que representa um servlet que manipula apenas requisições feitas com o protocolo HTTP; � Estende a classe GenericServlet; � Normalmente, novos servlets são criados através da extensão esta classe; Servlets • A classe HttpServlet: � Os seus principais métodos são: �doGet(HttpServletRequest, HttpServletResponse); – Método chamado quando a requisição usa o método GET; �doPost(HttpServletRequest, HttpServletResponse); – Chamado quando a requisição usa o método POST; Servlets • A interface ServletRequest: � Define o comportamento de uma requisição feita para o servlet; �Independente do protocolo utilizado; � Encapsula informações como o nome do servidor para o qual a requisição foi enviada e os parâmetros de entrada com seus respectivos valores; Servlets • A interface HttpServletRequest: � Interface que estende a ServletRequest, adicionando características específicas de requisições HTTP; � Uma característica importante é que através dela podemos acessar um objeto que representa a sessão do cliente; Servlets • A interface HttpSession: � Interface que descreve o comportamento de um objeto que representa uma sessão entre o cliente a aplicação; � Falaremos sobre o gerenciamento de sessão nos próximos assuntos; Servlets • A interface ServletResponse: � Define o comportamento da resposta gerada pelo servlet; �Independente do protocolo de rede utilizado na solicitação; � Ela é estendida pela interface HttpServletResponse; Servlets • A interface HttpServletResponse: � Interface que estende a interface ServletResponse, adicionando características específicas de requisições HTTP; O ciclo de vida de um servlet • Etapas na execução de um servlet: � Solicitação HTTP do cliente; � Geração da requisição e da resposta; � Criação do servlet; � Inicialização e execução do servlet; � Geração da resposta; � Resposta ao cliente; O ciclo de vida de um servlet • Solicitação HTTP: � Corresponde à solicitação HTTP feita por um cliente; � Isto acontece quando o cliente clica em uma URL que tem uma solicitação para um servlet; � Esta solicitação pode ser feita através dos métodos GET ou POST; O ciclo de vida de um servlet • Geração da requisição e da resposta: � No momento em que o container percebe que a requisição é para um servlet, ele cria dois objetos: � Uma requisição, que encapsula as informações recebidas através da solicitação do cliente; � Uma resposta, que vai encapsular as informações que serão enviadas de volta para o cliente; O ciclo de vida de um servlet • Criação do servlet: � Depois de criar os objetos que representam a requisição e a resposta, o container localiza o servlet que deve ser executado; � Feito isso, ele aloca uma nova thread para tratar a solicitação; � O container passa para a thread a referências para os objetos da requisição e da resposta; O ciclo de vida de um servlet • Inicialização e execução do servlet: � Uma vez criada, a thread que vai tratar a solicitação do cliente é inicializada através do método service; � Após a sua execução, o método service invoca o método doGet ou doPost do servlet; �Dependendo do método HTTP usado na requisição; O ciclo de vida de um servlet • Geração da resposta: � Durante a execução dos métodos doGet ou doPost, o servlet gera uma página dinâmica no objeto que representa a resposta; � O servlet faz isso “editando” o fluxo de saída do objeto que encapsula a resposta; O ciclo de vida de um servlet • Resposta ao cliente: � Depois que o servlet é executado, o container converte o objeto da resposta em uma página HTML e a retorna para o cliente; � Feito isso, o container destrói a thread usada na solicitação e os objetos da requisição e da resposta; Criando uma aplicação Web no Apache Tomcat • Aplicações web no Tomcat devem ser colocadas no seu diretório WebApps; � Aplicações neste diretório são detectadas automaticamente pelo container; � Outros locais podem ser usados, mas isso precisa ser configurado diretamente no servidor; Estrutura de uma aplicação Web no Apache Tomcat Criando uma aplicação Web no Apache Tomcat • O arquivo Web.xml: � É o arquivo de configuração da aplicação; � Todos os servlets da aplicação precisam ser descritos neste arquivo; � Outros itens de configuração podem ser definidos neste arquivo e serão estudados mais adiante; O Primeiro Servlet • Vamos ver um exemplo de um servlet que, quando chamado, imprime uma mensagem dizendo que a requisição foi tratada com sucesso; O Primeiro Servlet O Primeiro Servlet • Note que: � O servlet estende a classe HttpServlet; � O método que processa a requisição recebe como parâmetro de entrada os objetos que representam a requisição e a resposta; O Primeiro Servlet • Note que: � Usamos o objeto retornado pelo método getWriter para imprimir o código HTML da resposta que deve ser enviada ao cliente; � Antes de editar a resposta, usamos o método getWriter para acessar o objeto que edita o fluxo de saída da resposta; O Primeiro Servlet • Após criarmos o servlet, precisamos adicioná-lo à aplicação Web; • Isto pode ser feito de duas formas: � Através do descritor da aplicação; � Através de anotações; Usando o Descritor da Aplicação • No descritor da aplicação, precisamos de dois elementos para adicionar o servlet; � servlet; � servlet-mapping; Usando o Descritor da Aplicação • Configuração de um servlet no arquivo Web.Xml: Identificação do servlet no descritor Mapeamento para a classe Java URL usada para a invocação Usando Anotações • Servlets também podem ser adicionados à aplicação Web através de anotações; • Este recurso foi introduzido na versão 3.0 da API; Usando Anotações • Para adicionar um servlet à aplicação, usamos a anotação WebServlet; • O valor do atributo url-pattern usado para invocar o servlet precisa ser definido junto com a anotação; Usando Anotações Usando Anotações • Ao definir uma anotação, também podemos especificar explicitamente o valor de cada atributo; • Para isso, usamos os atributos name e url-patterns; Usando Anotações Usando Anotações • Importante: Caso o servlet tenha sido declarado das duas formas, o descritor da aplicação prevalece sobre a anotação; Invocando o servlet • Uma vez declarado, o servlet está pronto para receber requisições dos clientes; • Estas requisições devem ser realizadas com base no valor do atributo url- pattern; Invocando o servlet • Importante: Caso o servlet tenha sido declarado como uma anotação, o atributo metadata-complete do descritor da aplicação deve ser definido com o valor false; Invocando o servlet • Invocando um servlet a partir de uma página; Invocando o servlet Invocando o servlet Invocando o servlet Invocando o servlet Invocando o servlet • Quando o servlet é executado, encontramos a seguinte resposta: Recuperando um parâmetro da requisição • Vamos agora escrever um servlet que recupera o valor de um parâmetro de entrada; • O servlet recupera o nome passado pelo usuário e o imprime em outra página; � O valor é passado através de uma caixa de texto em um formulário; Formulário de entrada Recuperando um parâmetroda requisição • A informação é passada como um parâmetro da requisição; • O nome do parâmetro corresponde ao nome do campo no formulário; • O valor do parâmetro é o valor digitado pelo usuário no campo de texto; Recuperando um parâmetro da requisição Nome do parâmetro Recuperando um parâmetro da requisição • Para recuperar o valor de um parâmetro de entrada, usamos o método getParameter do objeto que representa a requisição; • Para isso, passamos para o método o nome do parâmetro cujo valor deve ser recuperado; � Cuidado: Lembre-se que java é case sensitive; Recuperando um parâmetro da requisição • Importante: o servlet trata o nome e o valor de um parâmetro como strings; • Caso o valor de um parâmetro deva ser usado como um outro tipo, um casting precisa ser realizado antes; Código do servlet que recupera a informação Resultado gerado pelo servlet que recupera a informação Recuperando todos os parâmetros da requisição • Vamos agora escrever um servlet que imprime o nome e o valor de todos os parâmetros da requisição; • Para isso, vamos usar um formulário que contém os seguintes campos: � Nome, idade, cidade, curso; Formulário de entrada Recuperando todos os parâmetros da requisição • O nome de cada parâmetro corresponde ao nome do componente do formulário; Nome do parâmetro Recuperando todos os parâmetros da requisição • No exemplo anterior, o servlet já sabia o nome do parâmetro usado na requisição; • Quando isto não for possível, podemos usar o método getParameterNames da requisição; Recuperando todos os parâmetros da requisição • Este método retorna uma enumeração com os nomes de todos os parâmetros da requisição; • Para cada parâmetro, podemos usar o método getParameter para obter o seu valor; � Como no exemplo anterior; Servlet que recupera os parâmetros de entrada Exemplo de Saída Imprimindo os dados do cabeçalho da requisição • Vamos agora criar um servlet que imprime os dados do cabeçalho da requisição do cliente; • Para isso, usaremos o método getHeaderNames do objeto que representa a requisição; Imprimindo os dados do cabeçalho da requisição • O método getHeaderNames retorna uma enumeração com os nomes de todos os headers enviados no cabeçalho requisição; • O método getHeader pode ser usado para obter o valor para um determinado header; Servlet que imprime os cabeçalhos da requisição Resultado da execução do servlet Gerando outro tipo de conteúdo • Vamos agora escrever um servlet que gera outro tipo de conteúdo para o cliente; • Neste exemplo, os headers da requisição, com os seus respectivos valores, são retornados como um arquivo XML; Gerando outro tipo de conteúdo • Neste exemplo, usamos o método setContentType para alterar o tipo de retorno para “application/xml”; � O valor default é text/html; � O browser do cliente usa esta informação para saber como interpretar e apresentar o conteúdo da resposta retornada pelo servidor; Servlet que retorna um arquivo XML Resultado gerado pelo servlet
Compartilhar