Prévia do material em texto
Prof. William Geraldo Sallum Curso Técnico em Informática SERVLETS Conceitos SERVLETS Histórico 1/2 Boa parte do que se acessa na Web (portais, blogs, home bankings, etc.) é baseado em conteúdo dinâmicos: servidores web consultando outros arquivos com conteúdos (CGI : Perl, PHP, ASP e até C ou C++). Surgiu então, em 1997, o Servlet, um “pequeno servidor” (traduzindo do inglês: servidozinho) cujo objetivo era receber chamadas HTTP, processá-las e devolver as respostas. As Servlets são programas Java residentes na memória, executando na porta 8080, dentro de containers e se tornaram a primeira forma de se criar páginas dinâmicas com Java. De forma prática, a tecnologia Servlet é uma classe Java, a qual consegue gerar páginas dinâmicas para a camada de apresentação de aplicações web. SERVLETS Histórico 1/2 Como se acessa o servidor Web, utilizando Servlets, através do protocolo HTTP: SERVLETS Histórico 1/2 E por que usar Servlets? Portabilidade - Os servlets permitem ser movidos para outras aplicações Java em diferentes sistemas operacionais. Desempenho - Ao contrário da tecnologia CGI, cada solicitação é gerenciada pelo processo de um container. Agilidade - Possui acesso às bibliotecas Java, as quais ajudam no ciclo do desenvolvimento. Robustez - Por serem gerenciados pela JVM, os Servlets não têm muitos problemas de memória. SERVLETS Histórico 1/2 Em Servlets, tal como no Java tradicional, tenta-se (sempre que possível), trabalhar OO - orientado a objetos. Assim, nada mais natural que uma Servlet seja representada como um objeto a partir de uma classe Java. Cada servlet é um objeto Java que recebe requisições (request) e produz algo (response), tal como uma página HTML dinamicamente gerada. A servlet pode ser carregada ou executada através de um servidor web especial, conhecido como “Container” - isso acontece, porque as Servlets não possuem um método main(). SERVLETS As Servlets promovem a comunicação entre clientes e servidores através do protocolo HTTP. 1. O cliente envia uma solicitação de HTTP ao servidor ou ao contêiner da Servlet. 2. O servidor ou contêiner recebe a solicitação e a direciona para ser processada pela Servlet apropriada. 3. A Servlet faz seu processamento, que pode incluir interação com um banco de dados ou com outros componentes do lado servidor, como outros JSPs ou Enterprise JavaBeans. 4. A Servlet retorna seus resultados para o cliente - normalmente na forma de um documento HTML, XHTML ou XML para exibir em um navegador, podendo também ser retornados outros formatos de dados, tal como imagens e dados binários. SERVLETS Histórico 1/2 Elementos e fluxos de requisições e respostas dos Sevlets SERVLETS Histórico 1/2 Container: É um tipo de servidor Web especial; Exemplos: Apache-Tomcat, GlassFish e JBoss. TomCat: originalmente projetado pela Sun, teve seu código fonte entregue à Apache Software Foundation. É uma referência quando se trata de implementações em Servlet, pois é um servidor HTTP e também um contêiner Servlet Java mais leve. GlassFish: possui inteface HTTP própria. É um Application Server produzido pela Oracle e que necessida de JDK completo. Será Nossa escolha para as atividades! JBoss: atualmente denominado WildFly e desenvolvido pela Red Hat, recentemente adquirida pela IBM, é semelhante ao GlassFish, nas suas características. SERVLETS Histórico 1/2 Benefícios dos Containers: Suporte para comunicações; Suporte a multithread; Segurança; Suporte ao JSP (visto mais adiante); Gerenciamento do ciclo de vida; Para começar a construir uma Servlet é necessário o IDE, Eclipse ou Netbeans e o container Tomcat e/ou GlassFish (ou outro) instalado(s) e configurado(s). SERVLETS SERVLETS Interface Servlet e o ciclo de vida de um Servlet Todos os Servelts devem implementar a interface Servlet Os métodos de interface Servlet são invocados automaticamente pelo servidor. Essa interface defini os métodos: Void init(ServletConfig config) – chamado uma única vez para inicializar o Servlet. ServletConfig getServletConfig() – fornece os parâmetros de configuração na inicialização ao ambiente (container). String getServletInfo() – retorna um string contendo versão, autor, etc. do Servlet. Void service(ServletRequest req, ServletResponse res) – chamado para responder a uma solicitação de um Servlet. É executado uma única vez e as múltiplas chamadas são feitas por threads de execução. Void Destroy() – método de limpeza chamado pelo container quando o Servlet é terminado. SERVLETS SERVLETS Histórico 1/2 Em suma, quando uma aplicação web executa servlets, o Container trata dos seguintes casos: Criação do servlet ou da nova thread para tratar uma solicitação de resposta. Invocação do método doPost() ou doGet() do servlet. Tratamento do envio das solicitações de requisição e resposta HTTP. Gerenciamento da vida e morte dos recursos do servlet. SERVLETS Histórico 1/2 O comportamento das servlets é definido na classe HttpServlet do pacote javax.servlet onde são definidos os métodos doGet e doPost (chamados pelo método service), responsáveis por responder às solicitações get e post de um servidor. Os métodos doGet e doPost recebem como argumentos os métodos: HttpServletRequest e HttpServletResponse HttpServletRequest: facilita acesso aos dados fornecidos pela solcitação. HttpServletResponse: facilita o retorno dos resultados do servlet para o cliente web. public class Helloworld extends HttpServlet { public void service (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... } } SERVLETS Interface HttpServletRequest O método criado por essa interface contém a solicitação do cliente. Métodos fornecidos pela interface: String getParameters(String name) – Obtém o valor de um parâmetro enviado ao servlet (por get ou post), em que name é o nome do parâmetro. Enumeration getParameterName() – Retorna os nomes de todos os parâmetros enviados ao servlet como parte de uma solicitação post. String[] getParameterValues(String name) – Retorna um array de string contendo os valores do parâmetro de um servlet especificado. Cookie[] getCookies() – Retorna um array de objetos Cookie armazenados no cliente pelo servidor. HttpSession getSession(boolean create) – Retorna objeto HttpSession associado à sessão de navegação atual do cliente. SERVLETS Interface HttpServletResponse Esta interface é implementada a cada chamada (doGet/doPost) para um HttpServlet. Métodos que permitem ao servlet formular a resposta para o cliente, em get (onde é recuperado o conteúdo de uma URL) ou post (onde é recuperado o conteúdo de formulários): void addCookie(Cookie cookie) – Adiciona um cookie ao cabeçalho da resposta para o cliente. ServletOutputStream getOutStream() – Obtém o fluxo de dados (em bytes) que permitem que os dados binários sejam enviados para o cliente. PrintWriter getWriter() – Obtém um fluxo de dados (em caracteres) que permitem que os dados de texto sejam enviados para o cliente. void setContentType(String type) – Especifica o tipo MIME da resposta para o navegador. (p.ex: “text/html” indica uma resposta de um documento XHTML; ou “text/plain” ou “image/gif”, etc.). SERVLETS Histórico 1/2 Completando o exemplo anterior, é possível obter um objeto que represente a saída a ser enviada ao usuário através do método getWriter da variável response. E, a partir disso, utilizar um PrintWriter para imprimir algo na resposta do cliente: public class Helloworld extends HttpServlet { public void service (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(“text/html”); PrintWriter out = response.getWriter(); // escreve o texto out.println("<html>\n" + "<head><title>Hello WORLD</title></head>\n"+ "<body>\n" + "<h1>Hello WORLD</h1>\n" + "</body></html>"); } } SERVLETS Histórico 1/2 Para implementar os exemplos e atividades Servlets, utilizaremos a IDE NetBeans (versão >= 8.0). A instalação e preparação desta plataforma de desenvolvimento é pré-requisito para as atividades e, portanto, já deve ter sido aprendido e executada. SERVLETS Histórico 1/2 Nos exemplos a seguir, através de sequências de ações na IDE, elaboraremos duas Servlets: a) uma simples que deverá apresentar uma mensagem de boas vindas e b) uma que apresentará dados pessoais tais como: nome, data de nascimento (calculada através de método de classe criada para esta finalidade) e idade atual. SERVLETS Histórico 1/2 Simples SERVLET de BOAS VINDAS SERVLETS Histórico 1/2 (1) Selecionando Novo projeto (2) Selecionando o tipo do projeto (3) Denominando o projeto SERVLETS Histórico 1/2 (4) Selecionando o Web Server, a versão do Java EE e o caminho do Contexto. (5) Término e visualização da estrutura inicial do projeto SERVLETS Histórico 1/2 (6) Insere uma nova Servlet (7) Denominando a nova Servlet SERVLETS Histórico 1/2 (8) Código produzido SERVLETS Histórico 1/2 (8) Alterando Servelt SERVLETS Histórico 1/2 (9) Alterando index.java (10) Executando projeto App1 SERVLETS Histórico 1/2 SERVLET de apresentação de dados SERVLETS Histórico 1/2 (1) Selecionando Novo projeto (2) Selecionando o tipo do projeto (3) Denominando o projeto SERVLETS Histórico 1/2 (4) Selecionando o Web Server, a versão do Java EE e o caminho do Contexto. (5) Término e visualização da estrutura inicial do projeto SERVLETS Histórico 1/2 (6) Insere uma nova sessão para as regras de negócios (7) Denominando a sessão num novo pacote SERVLETS Histórico 1/2 (8) Visualização dos códigos gerados: classe e interface “CalculaIdadeBean” (9) Inserção do método de regra de negócio “CalculaIdade” SERVLETS Histórico 1/2 (10) Denominação do novo método e respectivos parâmetros (11) Visualização do método “CalculaIdade” SERVLETS Histórico 1/2 (12) Estrutura física, até então gerada... SERVLETS Histórico 1/2 (13) Criação do Servlet “CalculaIdadeServlet” 1 3 2 SERVLETS Histórico 1/2 (14) Estrutura física, até então gerada... SERVLETS Histórico 1/2 SERVLETS Histórico 1/2 SERVLETS Histórico 1/2 SERVLETS Histórico 1/2 SERVLETS Histórico 1/2 SERVLETS Histórico 1/2 (15) Inserindo chamada ao Bean (método de negócio anteriormente criado) SERVLETS Histórico 1/2 Gera objeto CalculaIdadeBean a partir do método CalculaIdade SERVLETS Histórico 1/2 Atribuição a idade do retorno produzido pelo método CalculaIdade. SERVLETS Histórico 1/2 SERVLETS Histórico 1/2 SERVLETS Histórico 1/2 (16) Execução do Servlet SERVLETS Os servlets trabalham juntamente com a tecnologia Java Server Pages (JSP). https://www.devmedia.com.br/introducao-ao-java-server-pages-jsp/25602 SERVLETS Histórico 1/2 Fim SERVLETS CGI - Commom Gateway Interface: No surgimento da Internet, existiam apenas páginas com conteúdos estáticos desenvolvidos em HTML. Com o tempo, foram aparecendo no mercado páginas web com conteúdos dinâmicos através da tecnologia Commom Gateway Interface (CGI). A maioria dos programas CGI é escrita como script em Perl, C, Python e PHP. Voltar https://www.devmedia.com.br/python-tutorial/33274 https://www.devmedia.com.br/guia/linguagem-php/38780 SERVLETS CGI - Commom Gateway Interface: Mas essa tecnologia tem a seguinte falha: consome muitos ciclos de CPU e memória, com isso, a cada solicitação do cliente, o servidor web acaba reproduzindo um novo processo do programa CGI solicitado. Resumindo: em CGI, cada cliente é representado por um processo, enquanto que com Servlets, cada cliente é representado por uma linha de execução. Voltar SERVLETS JVM - Java Virtual Machine: Máquina virtual Java - MVJ é um programa que carrega e executa os aplicativos Java, convertendo os bytecodes em código executável de máquina. A JVM é responsável pelo gerenciamento dos aplicativos, à medida que são executados. Graças à máquina virtual Java, os programas escritos em Java podem funcionar em qualquer plataforma de hardware e software que possua uma versão da JVM, tornando assim essas aplicações independentes da plataforma onde funcionam. Voltar https://pt.wikipedia.org/wiki/Linguagem_de_programa%C3%A7%C3%A3o_Java https://pt.wikipedia.org/wiki/Bytecode_Java