Entendendo uma aplicação Web em Java


O objetivo desse artigo é fornecer os conhecimentos básicos necessários para entender o funcionamento de uma aplicação Web escrita em Java.

Vamos implementar aqui uma aplicação Web simples, e quando eu digo simples, acredite, é bem simples mesmo, mas também não vai ser um “Hello World”.

Entendendo o contexto

Primeiramente, o que é uma aplicação Web?

"Aplicação Web", é um termo genérico usado para identificar aplicações projetadas para utilização através de navegadores (browsers), tanto na internet quanto em redes privadas (intranet).

Pode-se dizer então, que: uma aplicação Web, é um conjunto de programas sendo executado em um servidor HTTP (ou servidor Web).

Um "Servidor Web" por sua vez, nada mais é que um computador ligado a uma rede, executando um programa que se comunica com outros programas nos outros computadores que fazem parte daquela rede usando um protocolo específico, o HTTP, ou Hypertext Transfer Protocol - Protocolo de Transferência de Hipertexto.

Para a exibição do conteúdo desejado no browser, a linguagem usada mais frequentemente é a HTML, ou HyperText Markup Language, que significa Linguagem de Marcação de Hipertexto.

De forma muito simplificada, funciona assim:

  1. No seu computador, usando o browser de sua preferência, você digita uma URL, como www.marcric.com por exemplo. Essa URL é transformada pelo browser numa requisição do protocolo HTTP e enviada para a rede. Quando essa URL cai na rede (web), o IP do Servidor ao qual ela está associada (por um registro de domínio), é localizado. E o comando HTTP é enviado a ele.
  2. O servidor por sua vez, ao receber a URL, verifica nas suas configurações, qual é o diretório associado aquela URL, e procura por arquivos que devem ser enviados de volta.
  3. Geralmente, nesse diretório existe um arquivo chamado “index.html”. O servidor lê esse arquivo, coloca o seu conteúdo num pacote HTTP e o envia de volta.
  4. O seu browser recebe o pacote HTTP enviado pelo servidor, abre esse pacote e exibe o conteúdo do arquivo "index.html" na sua tela.
  5. O processo continua de forma repetitiva, com troca de pacotes HTTP entre o seu computador e o servidor Web. É a chamada sequencia: request / response.

Exemplo de um request HTTP:

Exemplo de um response HTTP:

O programa que executa num servidor web, é chamado de... Servidor Web, é claro!

Ou seja, o termo Servidor Web, identifica tanto o hardware quanto o software que trabalham em conjunto para hospedar aplicações web, que vão interagir com seus usuários através da rede que os interliga.

Exemplos de softwares Servidores Web:

Produto Fornecedor
Apache HTTPD Apache
IIS Microsoft
nginx NGINX, Inc.
GWS Google

O próximo passo no nosso entendimento desse ambiente, é falar sobre o Servidor de Aplicação, que seria uma extensão do Servidor Web, passando a gerenciar a reutilização de aplicações além das funções de um servidor Web e também outras facilidades.

Podemos dizer que um servidor de aplicação atua “por trás” de um Servidor Web permitindo que várias aplicações compartilhem o uso de trechos de um programa (métodos), escrito em determinada linguagem de programação. Então podemos dizer que os Servidores de Aplicação são construídos para linguagens específicas, como BASIC, C++, Haskell, PHP, Python, e Java, claro.

Exemplos de Servidores de Aplicação Java:

Produto Fornecedor
Geronimo ASF
GlassFish GlassFish Community
JBoss AS Red Hat
Resin Open Source Caucho Technology
TomEE ASF
WebLogic Server Oracle Corporation BEA Systems
WebSphere Application Server IBM

A pergunta mais frequente é: quando deve ser usado um Servidor Web e quando é necessário um Servidor de Aplicação?

Um Servidor Web, é mais simples e mais leve, e se as suas aplicações são independentes entre si, se elas atendem clientes completamente diferentes, não há, em princípio, necessidade de um Servidor de Aplicação. Um Servidor Web será suficiente.

Por outro lado, se as aplicações atendem um ambiente corporativo, a possibilidade de uma mesma funcionalidade ser usada por aplicações diferentes de forma compartilhada, aumenta. A integração de diferentes plataformas de desenvolvimento pode ser necessária. Nesses casos um Servidor de Aplicação torna-se necessário.

Tomcat, um meio termo

Nesse ponto nós sabemos o que é um Servidor Web, como o Apache e um servidor de Aplicação como o TomEE.

Mas e se o que necessitamos é algo além de um simples Servidor Web para arquivos estáticos, porém menos do que todas as facilidades oferecidas por um Servidor de Aplicação?

É ai que entra o Apache Tomcat, que é um Servidor Web, capaz de também dar suporte às implementações das tecnologias: Java Servlets e JavaServer Pages, que permitem a geração de conteúdo de forma dinâmica.

A primeira versão pública do Tomcat, foi a 3.0.x de 1999. A versão 4.x (2004 a 2009), compreendia os seguintes componentes principais:

Ao longo do tempo, outros componentes foram adicionados de forma a implementar técnicas que viriam a permitir um aumento de performance das aplicações, tais como: clusterização e alta disponibilidade, tornando o Tomcat um servidor Web completo, robusto e consistente.

Na verdade, em termos históricos, o Tomcat é predecessor do TomEE.

Criando uma aplicação Web simples

Para os fins desse artigo, vamos usar como Servidor Web, o Tomcat. Como pretendemos desenvolver um curso específico sobre aplicações Web usando Eclipse num futuro próximo, nesse laboratório, não vamos fazer uso de nenhuma IDE, apenas um editor de arquivos simples.

Instalando o Tomcat

A primeira atitude, é localizar a versão mais recente do Tomcat.

No momento, da criação deste artigo, a versão mais atual é a 7.0.40. Escolha portanto aquela de acordo com o seu sistema operacional.

A instalação, é extremamente simples. Depois de efetuado o download do arquivo ZIP.

Basta descompactá-lo num local adequado. No meu caso, foi no disco "D". Se houver uma versão mais antiga, basta apagar o diretório correspondente

Não podemos nos esquecer de verificar se o ambiente Java está configurado na variável de ambiente PATH, de forma a ser automaticamente localizado quando for acionado.

Depois disso, é necessário atualizar a variável de ambiente que vai ser usada para identificar a localização do Tomcat atualmente instalado.

Para isso, primeiro vamos acionar o Painel de controle => Sistema => Configurações avançadas.

Na aba "Avançado", acionar o botão "Variáveis de ambiente".

No painel seguinte, acionar o botão "Novo" na parte referente as "Variáveis do Sistema".

Em seguida, vamos preencher com os seguintes valores:

      Nome da variável:
      CATALINA_HOME
      
      Valor da variável:
      D:\apache-tomcat-7.0.40
      

Claro que o valor acima, deve ser substituído pelo local onde você instalou o Tomcat no seu ambiente.

O resultado final deve ser este:

A Aplicação Web

Uma aplicação Web escrita em Java, possui uma estrutura de diretórios bem definida:

      <webapp-root>
      foo.gif
      bar.html
      /WEB-INF
        web.xml
        /classes
           servlet_1.class
           servlet_2.class
        /lib
           foo.jar
      

Os componentes estáticos (.html, .gif etc.) e dinâmicos (Servlets e JSPs), são distribuídos de uma forma pré-determinada nessa estrutura de diretórios.

Cada aplicação Web é disponibilizada no Servidor Web, basicamente copiando essa estrutura de diretório de cada aplicação, para a seguinte estrutura:

      <WebServerHome>/webapps
      

Dependendo das ferramentas utilizadas para o desenvolvimento, essa estrutura de diretórios pode sofrer pequenas variações. No caso do Eclipse, supondo uma aplicação chamada "JPI-02" a estrutura se assemelha a esta:

Vamos então criar essa estrutura de diretórios:

      Microsoft Windows [Version 6.1.7601]
      Copyright (c) 2009 Microsoft Corporation.  All rights reserved.
      
      C:\Users\Ricardo>
      
      C:\Users\Ricardo>e:

      E:\>mkdir MeuTesteWeb
      
      E:\>cd MeuTesteWeb
      
      E:\MeuTesteWeb>mkdir WEB-INF
      
      E:\MeuTesteWeb>cd WEB-INF

      E:\MeuTesteWeb\WEB-INF>mkdir classes\iniciantes

      E:\MeuTesteWeb\WEB-INF>mkdir src\iniciantes

      E:\MeuTesteWeb\WEB-INF>cd src\iniciantes

      E:\MeuTesteWeb\WEB-INF\src\iniciantes>
      

O que nos leva à seguinte estrutura de diretórios:

No diretório raiz da aplicação, vamos criar os seguintes arquivos JSP:

No diretório "src\iniciantes" da aplicação, vamos criar mais dois arquivos.

Primeiramente, um "Bean" que terá a responsabilidade de armazenar as informações do Cliente:

Em seguida, um "Servlet" que terá a responsabilidade de recuperar as informações do Cliente informadas no formulário associado ao "Cliente.jsp" e exibi-las no formulário associado ao "BemVindo.jsp". Um exemplo bem didático de utilização da sequência Request/Response:

Com os arquivos criados, ficamos assim:

A próxima etapa, é compilar esses arquivos, usando o compilador "javac":

      E:\MeuTesteWeb\WEB-INF\src\iniciantes>javac Cliente.java

      E:\MeuTesteWeb\WEB-INF\src\iniciantes>javac -cp .;%CATALINA_HOME%\lib\servlet-api.jar 
      Cliente.java ExibirClienteServlet.java

      E:\MeuTesteWeb\WEB-INF\src\iniciantes>
      

Notem que para compilar o Servlet, é necessário especificar o "classpath" (-cp) da localização do arquivo onde estão as classes de API de servlet. O "." denota a localização das classes de usuário. No nosso caso, a classe Cliente (Cliente.java), que está no mesmo diretório. Além disso, é necessário compilar as duas classes simultaneamente para que o include seja bem sucedido.

Depois de geradas as classes, elas podem ser movidas para o diretório "classes\iniciantes" do WEB-INF.

      E:\MeuTesteWeb\WEB-INF\src\iniciantes>move *.class ..\..\classes\iniciantes
      E:\MeuTesteWeb\WEB-INF\src\iniciantes\Cliente.class
      E:\MeuTesteWeb\WEB-INF\src\iniciantes\ExibirClienteServlet.class
        2 file(s) moved.
      
      E:\MeuTesteWeb\WEB-INF\src\iniciantes>cd ..

      E:\MeuTesteWeb\WEB-INF\src>cd ..

      E:\MeuTesteWeb\WEB-INF>cd ..
      
      E:\MeuTesteWeb>
      

Para fechar o ciclo, vamos agora criar o arquivo que associa cada uma das classes java a uma URL. Trata-se do arquivo "web.xml", que vai diretamente no diretório "WEB-INF".

Assim, definimos um servlet chamado "cliente" e associamos a ele a classe "ExibirClienteServlet". Em seguida, associamos a esse servlet, a URL "/dadosCliente".

Isso feito, podemos "empacotar" a nossa aplicação web de forma que ela possa ser publicada num servidor web. No nosso caso, o Tomcat.

Então, nesse momento, temos a seguinte situação:

Sendo assim, o diretório "MeuTesteWeb", já contém todo o material necessário para criar o "pacote" da nossa aplicação web simples. Vamos então, criar o pacote com o comando "jar".

      E:\MeuTesteWeb>
      
      E:\MeuTesteWeb>jar cf MeuTesteWeb.war *
      
      E:\MeuTesteWeb>dir
       Volume in drive E is Data
       Volume Serial Number is 38C6-96ED
      
       Directory of E:\MeuTesteWeb
      
      06/09/2013  01:13 AM    <DIR>          .
      06/09/2013  01:13 AM    <DIR>          ..
      06/08/2013  10:20 PM             1,113 BemVindo.jsp
      06/08/2013  10:12 PM             1,176 Cliente.jsp
      06/09/2013  01:13 AM             5,976 MeuTesteWeb.war
      06/09/2013  12:14 AM    <DIR>          WEB-INF
                     4 File(s)          8,480 bytes
                     3 Dir(s)  63,180,095,488 bytes free
      
      E:\MeuTesteWeb>
      

Esse arquivo ".war", deve ser copiado então para o diretório "webapps" do Tomcat.

      E:\MeuTesteWeb>copy MeuTesteWeb.war %CATALINA_HOME%\webapps
              1 file(s) copied.
      
      E:\MeuTesteWeb>
      

Pronto! Sua aplicação já está disponível no Servidor Web. Basta agora iniciá-lo. No meu caso, o Tomcat foi instalado no disco "D". No subdiretório "bin", devemos acionar o comando "startup".

      E:\MeuTesteWeb>d:
      
      D:\apache-tomcat-7.0.40\bin>startup
      Using CATALINA_BASE:   "D:\apache-tomcat-7.0.40"
      Using CATALINA_HOME:   "D:\apache-tomcat-7.0.40"
      Using CATALINA_TMPDIR: "D:\apache-tomcat-7.0.40\temp"
      Using JRE_HOME:        "C:\Program Files\Java\jdk1.7.0_17"
      Using CLASSPATH:       "D:\apache-tomcat-7.0.40\bin\bootstrap.jar;D:\apache-tomcat-7.0.40\bin\tomcat-juli.jar"
      D:\apache-tomcat-7.0.40\bin>
      

Com o Servidor iniciado, basta chamar a aplicação no browser, usando o seguinte endereço (URL):

      http://localhost:8080/MeuTesteWeb/
      

Esta ação, deve apresentar a seguinte tela:

Que pode ser preenchida e o botão "Submit" acionado:

Apresentando o seguinte resultado:

Depois de efetuados os testes, para parar o Servidor de forma "normal", devemos acionar o comando "shutdown".

      D:\apache-tomcat-7.0.40\bin>shutdown
      Using CATALINA_BASE:   "D:\apache-tomcat-7.0.40"
      Using CATALINA_HOME:   "D:\apache-tomcat-7.0.40"
      Using CATALINA_TMPDIR: "D:\apache-tomcat-7.0.40\temp"
      Using JRE_HOME:        "C:\Program Files\Java\jdk1.7.0_17"
      Using CLASSPATH:       "D:\apache-tomcat-7.0.40\bin\bootstrap.jar;D:\apache-tomcat-7.0.40\bin\tomcat-juli.jar"
      D:\apache-tomcat-7.0.40\bin>
      

Espero que esse exemplo simples e objetivo, esclareça bem o que é e como se cria uma aplicação web em Java.

Se ainda assim restar qualquer dúvida, use o nosso grupo de discussão!

Grande Abraço.

Por: Ícone de MarcRic em: 09/06/2013