Servlets em Java

Se você está querendo aprender Java, você está no lugar errado.

Antes de começarmos, saibam que o Java Servlet roda em um servidor de aplicação que fica instalado no servidor. Um muito usado é o Apache Tomcat, não irei falar sobre ele já que não é o foco deste artigo, mas espero que pesquisem um pouco sobre o mesmo e instalem-no na sua IDE de preferência o eclipse, pois no ultimo tópico deste artigo faremos um exemplo usando o Tomcat junto com o eclipse.

O que é um Servlet?

O nome “servlet” vem do inglês e dá uma ideia de servidor pequeno cujo objetivo basicamente é receber requisições HTTP, processá-las e responder ao cliente, essa resposta pode ser um HTML, uma imagem etc.

Em Java, procuramos sempre trabalhar orientado a objeto, portanto essa nosso servlet será também um objeto de uma classe Java.

O funcionamento se dá da seguinte forma:

  1. Cliente (navegador) faz uma requisição HTTP ao servidor.
  2. O servlet responsável trata a requisição e responde ao cliente de acordo.
  3. O cliente recebe os dados e exibe.

Para esse artigo abordaremos os comportamentos de servlet que foram definidos na classe HttpServlet do pacote javax.servlet, que é usada em quase em quase 99% dos casos.

Para criarmos uma classe servlet ela terá que ser subclasse de HttpServlet e sobrescrever o método service(), que é responsável por receber as requisições e retornar suas respostas.Vejamos como ficaria:

Listagem 01: Estrutura básica de um servlet.

        public class OlaMundo extends HttpServlet {
        protected void service (HttpServletRequest request,
        HttpServletResponse response)
        throws ServletException, IOException {
        // tratamentos
        }
        }
        

Em outro tópico desse artigo irei mostrar um “hello world”, por isso deixemos o código da listagem assim por enquanto.

Observação: em Java classes java são compiladas em bytecode, dessa forma nosso servlet também será compilado.

Mapeamento do Servlet

Servlet definido, mas como acessá-lo pelo navegador? Para uma página HTML basta passarmos a url e pronto, ela é interpretada pelo navegador, mas acessar a nossa classe pela url seria muito complexo.

Para solucionar a questão, mapearemos nossa classe em URL’s dentro do arquivo web.xml que é criado dentro da pasta WEB-INF automaticamente pela ide que você esteja usando. No próximo tópico veremos a estrutura de diretórios.

Para mapearmos, usaremos as tags <servlet> e <servlert-mapping>.

Primeiro definiremos o nome do servlet e qual a classe dele. Depois diremos qual será a o caminho que ele ficará acessível. Vejam:

Listagem 02: Mapeamento do servlet

        <servlet>
        <servlet-name>olaServlet</servlet-name>
        <servlet-class>br.servlets.OlaMundo</servlet-class>
        </servlet>
        <servlet-mapping>
        <servlet-name>olaServlet</servlet-name>
        <url-pattern>/olaMundo</url-pattern>
        </servlet-mapping>
        

Logo nosso servlet vai ficar acessível por http://localhost:8080/diretorio_do_projeto/olaMundo.

Hello World

Vamos fazer o famoso hello world, e espero que já tenham instalado e configurado o tomcat no Eclipse. O exemplo será de maneira objetiva, não irei me deter a detalhes.

Para isso deveremos criar um novo projeto do tipo Dynamic Web Project, digitar o nome do projeto, use primeiroServlet, escolher o target runtime que é o tomcat e clicar em finish, responda não a pergunta sobre mudar de perspectiva.

Agora na aba Servers clique com o botão direito no Tomcat e depois em Add and Remove... agora basta adicionar o projeto que acabamos de criar.

Vejamos como fica a estrutura de diretórios gerada.

  • src - código fonte Java (.java)
  • build - onde o Eclipse compila as classes (.class)
  • WebContent - content directory (páginas, imagens, css etc vão aqui)
  • WebContent/WEB-INF/ - pasta oculta com configurações e recursos do projeto
  • WebContent/WEB-INF/lib/ - bibliotecas .jar.
  • WebContent/WEB-INF/classes/ - arquivos compilados são copiados para cá.

A pasta META-INF é opcional, mas é gerada pelo Eclipse. É onde fica o Arquivo de manifesto como usado em arquivos .jar.

Agora, dentro de src, criaremos a classe br.servlets.OlaMundo.java com o seguinte conteúdo:

Listagem 03: Montando o servlet para o hello world

        public class OlaMundo extends HttpServlet {
        protected void service (HttpServletRequest request,
        HttpServletResponse response)
        throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<body>");
        out.println("Hello World");
        out.println("</body>");
        out.println("</html>");
        }
        }
        

Não se esqueça de mapear o servlet no arquivo web.xml dentro de WEB-CONTENT/WEB-INF. Você pode usar o mesmo código da Listagem 02 se quiser.

E vamos lá, façamos nosso primeiro teste em HTTP://localhost:8080/primeiroServlet/olaMundo.

Você pode querer saber

O JavaEE trabalha sobre o conceito de contextos Web para os diferentes sites e projetos no mesmo servidor. Por padrão o Eclipse gera o context name com o mesmo nome do projeto, no nosso caso primeiroServlet, por isso nosso servlet’s fica acessível por localhost:8080/primeiroServlet, mas podemos alterar indo em Project > Properties > Web Project Settings e mudando o Context Root.

Links Úteis

  • ASP.NET MVC e Entity Framework: criando uma aplicação 1:N:
    Neste curso você aprenderá a implementar um CRUD em ASP.NET MVC com relacionamento 1:N (um para muitos). Veremos como desenvolver as telas do CRUD com seleção do registro relacionado em um dropdown, bem como fazer da forma mestre-detalhe, com adição de campos dinâmicos.
  • Qualidade no código Java com boas práticas e Clean Code:
    Manter um código limpo tem um impacto muito relevante na qualidade e na facilidade de manutenção de um sistema. Este artigo demonstrará a importância que deve ser dada em manter o código da sua aplicação limpo.
  • O que é Redis?:
    Neste curso aprenderemos o que é o Redis, um banco de dados NoSQL capaz de armazenar dados no formato chave-valor. O Redis é atualmente uma das estruturas de armazenamento mais performáticos do mercado e tem sido amplamente utilizado.

Saiba mais sobre Java ;)

  • Cursos de Java:
    Torne-se um programador Java completo. Aqui você encontra cursos sobre as mais ferramentas e frameworks do universo Java. Aprenda a desenvolver sites e web services com JSF, Jersey, Hibernate e mais.
  • Criando meu primeiro projeto no Java:
    Neste curso você aprenderá a criar o seu primeiro programa com Java, e não, ele não será um simples “Hello, World!”. :) Para isso, vamos começar ensinando como instalar o Java e preparar o ambiente de desenvolvimento.
  • Web services RESTful em Java: Trabalhando com subrecursos no Jersey:
    Neste curso você aprenderá a implementar uma Web API RESTful quando seu sistema possuir relacionamentos do tipo 1:N no banco de dados. Para isso, aprenderemos como fazer o mapeamento objeto-relacional para que o JPA/Hibernate saiba como lidar com esse tipo relacionamento.