Você está na página 1de 8

Conhecendo a tecnologia Servlet

Por Thiago Vincius Varallo Palmeira www.devmedia.com.br

No surgimento da Internet, existiam apenas pginas com contedos estticos desenvolvidos em HTML. Com o tempo, foram aparecendo no mercado pginas web com contedos dinmicos atravs da tecnologia Commom Gateway Interface (CGI). A maioria dos programas CGI escrita escrita como script em Perl, C, Python e PHP. O CGI tem o processo que permite ao servidor web chamar o programa externo e passar informaes de solicitaes HTTP para conseguir processar uma solicitao. A resposta do programa externo passada de volta ao servidor web, que a encaminha ao browser do cliente. Mas essa tecnologia tem a seguinte falha: Consome muitos ciclos de CPU e memria, com isso, quando acontece o processo de cada solicitao do cliente, o servidor web acaba reproduzindo um novo processo do programa CGI solicitado. Servlets A tecnologia Servlet uma classe Java, que consegue gerar pginas dinmicas para a camada de apresentao de aplicaes web. O principal objetivo receber chamadas HTTP, sendo processada e devolvida uma resposta para o cliente. Os servlets trabalham juntamente com a tecnologia Java Server Pages (JSP). Vantagens dos Servlets Portabilidade - Os servlets permitem serem movidos para outros aplicaes Java e sistemas operacionais. Desempenho - Ao contrrio da tecnologia CGI, cada solicitao gerenciada pelo processo do container. Agilidade - Possui acesso s bibliotecas Java, que ajudam no ciclo do desenvolvimento. Robustez - Pelos servlets serem gerenciados pela JVM, no tem muitos problemas de memria. Container O servlet pode ser carregado ou executado atravs por um servidor web especial, conhecido como Container. Isso acontece, porque os Servlets no possuem um mtodo main(). Existem muitos aplicativos desse tipo, sendo que o oficial o Tomcat. Originalmente projetado pela Sun, seu cdigo fonte foi entregue Apache Software Foundation. Hoje o Tomcat, referncia quando se trata de implementaes em servlet. O Tomcat um servidor web, sendo usado para solicitar servios HTTP processados. O Container trata dos seguintes casos em uma aplicao web, quando envolve servlets que so: Criao do servlet ou da nova thread para tratar uma solicitao de resposta. Invocao do mtodo doPost() ou doGet() do servlet. Tratamento do envio das solicitaes de requisio e resposta HTTP. Gerenciamento da vida e morte dos recursos do servlet.

Vantagens do Container O Container proporciona uma srie de benefcios que so: Suporte para comunicaes; Suporte a multithread; Segurana;

Suporte ao JSP; Gerenciamento do ciclo de vida; Pontos importantes Para comear a construir um servlet necessrio o JDK, Eclipse, o Tomcat instalado e configurado. Mais informaes sobre essa preparao pode ser encontrada nos links abaixo: http://www.devmedia.com.br/conhecendo-o-eclipse-uma-apresentacao-detalhada-da-ide/25589 http://www.devmedia.com.br/instalacao-e-configuracao-do-apache-tomcat-no-eclipse/27360 Arquitetura do servlet Na Figura 1 mostrado como o Container trata uma solicitao de servlet. A simulao desse diagrama acontece quando o Cliente (usurio) clica em um link que chamado um servlet. Aps isso, quando o container visualiza que a requisio (request) aponta para um servlet, ele cria dois objetos: HttpServletResponse e HttpServletRequest. Sendo assim, o Container encontra o servlet correto baseado na URL da requisio, podendo criar ou alocar uma thread para essa requisio, passando os objetos de requisio (request) e resposta (response) para a thread do servlet. Dependendo de como foi o tipo de solicitao, o Container chama o mtodo doPost() ou doGet() ou service() do servlet. Esse mtodo gera uma pgina dinmica e a insere no objeto response. Esse processo termina com a thread, e o Container converte o objeto response em uma resposta HTTP, aonde envia de volta ao cliente e apaga os objetos request e response.

Figura 1: Arquitetura de um servlet

Em uma aplicao Servlet, podem ser includos contedos estticos (pginas HTML, arquivos de imagem, entre outros). Como boas prticas comum deixar que um servidor web fique na frente, para gerenciar todas as solicitaes do cliente. O servidor web, serve o contedo esttico que passa para a aplicao do Container Web. Mapeando um Servlet Aps a criao de um servlet, realize-se um processo de mapeamento que auxilia na flexibilidade e segurana da aplicao. Esse processo tem um fator positivo, pois ajuda a esconder do cliente o caminho e o nome do arquivo nos JSPs e as pginas HTML que usam algum servlet. Geralmente quando o cliente chama o servlet, visto na barra de endereo o pseudonome que foi dado ao servlet. Por trs desse nome, existe toda uma configurao sofrida na classe do servlet feita pelo programador, contendo o nome da classe e pacote, nome de arquivo e o caminho real. O arquivo web.xml (WebContent\WEB-INF) conhecido como Deployment Descriptor (DD), serve

para informar ao Container como executar os servlets e pginas web. Esse arquivo detalhado na Listagem 1, onde so usados dois elementos XML para mapear as URLs aos servlets, que so: <servlet> - informa ao Container quais arquivos de classes pertencem na aplicao. <servlet-mapping> - informa qual servlet chamar para a url solicitada. A Figura 2 mostra uma decomposio do processo que funciona o mapeamento.

Figura 2: Decomposio do mapeamento Criando um projeto e servlet Abaixo so demonstrados os passos para a criao de um projeto e um servlet.

Figura 3: Criao do projeto servlet

Figura 4: Etapa de configurao marcar a opo para gerar o Deployment Descriptor Aps finalizar a criao do projeto, podemos criar um servlet seguindo os passos nas imagens abaixo:

Figura 4: Etapa de configurao marcar a opo para gerar o Deployment Descriptor Aps finalizar a criao do projeto, podemos criar um servlet seguindo os passos nas imagens abaixo: Figura 5: Criao do Servlet

Figura 6: Descrevendo o nome do servlet

Figura 7: Especificando os mtodos para gerar no servlet Listagem 1: Arquivo web.xml configurao de mapeando do servlet <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" 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_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>ProjetoServlet</display-name> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>Primeiro Servlet</servlet-name> <servlet-class>br.com.exemplos.PrimeiroServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Primeiro Servlet</servlet-name> <url-pattern>/ServletNomeAlterado.do</url-pattern> </servlet-mapping> </web-app>

Sendo um Servlet
A Listagem 2 apresenta o arquivo JSP, que aponta para o servlet (ServletNomeAlterado.do) que

chamado quando o usurio efetua uma solicitao ao servidor. Quando houver uma solicitao, o Container verifica no arquivo web.xml o mapeamento desse servlet, podendo visualizar a qual classe Java pertence. O fluxo desse processo foi mostrado na Figura 2. Listagem 2: Arquivo login.jsp <%@ page language="java" contentType="text/html; charset=ISO-88591" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO8859-1"> <title>Login do sistema</title> </head> <body> <form action="ServletNomeAlterado.do" method="POST"> <h2>Faa o login</h2> <table border="0" cellpadding="1"> <tr> <td><label>Usurio</label></td> <td><input type="text" name="usuario" size="20" /> </td> </tr> <tr> <td><label>Senha</label></td> <td><input type="password" name="senha" size="20" /> </td> </tr> <tr> <td colspan="2"> <input type="submit" value="Entrar"/> <input type="reset" value="Limpar"/> </td> </tr> </table> </form> </body> </html>

Na Listagem 3, efetua-se uma validao nos campos de entrada (input) do arquivo login.jsp. Quando acontece uma requisio por parte do usurio, o servlet recupera as informaes atravs da solicitao (request). Para conseguir resgatar as informaes que so passadas nos campos de entrada, necessrio que a propriedade name seja definida e usada com o mesmo nome no parmetro do mtodo getParameter(name). Listagem 3: Arquivo servlet PrimeiroServlet.java import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class PrimeiroServlet extends HttpServlet { private static final long serialVersionUID = 1L; public PrimeiroServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String nome = request.getParameter("usuario"); String senha = request.getParameter("senha"); if(nome.equals("servlet") && senha.equals("12345")){ response.sendRedirect("index.jsp"); }else{ response.sendRedirect("login.jsp"); } } }

Concluso
Ao finalizar a criao desses trs arquivos, j possvel rodar o projeto e fazer o teste.No servlet da Listagem 3 est sendo apresentado o usurio e senha estticos apenas para fins educativos. Vale citar mais uma questo, nesse artigo foi demonstrado o mapeamento do servlet de maneira manual. Hoje, nas verses superiores ao 7 do Tomcat, o mapeamento feito automtico, pois j inclui a anotao @WebServlet (javax.servlet.annotation.WebServlet), onde que definido o nome do servlet.

Você também pode gostar