Criando um WebServer

Boa tarde, tudo bem?

Hoje o post vai ser um pouco diferente. Vou postar como levantar um Servlet “Hello World” utilizando forward. O propósito do post é para que mais para frente, eu possa postar aqui WebService com integração de Hibernate, Struts, Ajax, Log4J, RB e mais outras coisas. Já é uma base para quem não sabe como levantar um WebService, para depois poder acompanhar os exemplos mais complexos e até mesmo aprender como se faz o simples. E ao final, assuntos vistos sobre SCWCD (certificação Java para Web). É necessário ter o Java JDK instalado.

Vou fazer utilizando uma IDE, pois fica mais fácil, mas caso queira fazer todo o processo sem IDE, basta utilizar todos os arquivos criados aqui (XML, Java, JSP, HTML). Ao final do artigo vou mostrar como se faz sem IDE.

Dois downloads são necessários:

Primeiro, vamos instalar o Tomcat.
01) Utilizei a configuração Full e “padrão Microsoft: Next, Next, Finish”.
Instal Tomcat 01

02) O ícone do Tomcat vai aparecer na barra do sistema, caso não esteja verde, bastar clicar com o botão direito e selecionar “Start Service”.
Instal Tomcat 02

03) Depois abra seu browser e digite http://localhost:8080, será exibido que o servidor está instalado e pronto para usar.
Instal Tomcat 03

04) Vamos parar o serviço do Tomcat. Nós iremos executá-lo através do eclipse, então não existe a necessidade de deixarmos ele ativo.
Instal Tomcat 04

Após descompactar o Eclipse, vamos abri-lo e começar a configurar o Tomcat. O Eclipse irá solicitar que você escolha um “workspace”, um espaço de trabalho onde o eclipse irá guardar os projetos assim como as configurações que fizermos. A escolha desse diretório, não afetará o resultado final desse artigo, então fique a vontade para escolher o diretório que mais lhe agradar.
Config Eclipse 01

Vai aparecer a tela de “Seja Bem Vindo”. Vamos então mudar para a perspectiva Java.
Config Eclipse 02

Vamos agora escolher a View de servidores.
Config Eclipse 03

Digite Servers e selecione a View.
Config Eclipse 04

Agora, vamos adicionar o Tomcat. Botão direito em Servers -> New -> Server.
Config Eclipse 05

Vamos selecionar o Tomcat 7
Config Eclipse 06

E temos agora que apontar o diretório onde foi instalado o Tomcat. E depois clicar em Finish.
Config Eclipse 07

Estamos acabando. Falta agora uma última configuração. Vamos dar duplo clique sobre o servidor Tomcat que acabou de aparecer na View Servers. Uma tela de configuração irá aparecer.
Vamos alterar a configuração o “Server Locations” para “Use Tomcat installation (takes control of Tomcat installation)”. Essa configuração faz com que o Eclipse tenha o controle sobre o Tomcat, com isso, toda vez que precisarmos alterar alguma coisa no servidor, iremos fazer daqui mesmo. Depois de alterar, basta fechar e salvar.
Config Eclipse 08

E finalmente, vamos aos códigos!!! Uhull! o
Criemos um novo projeto no Eclipse. Vamos chamar esse projeto de Servlet. File > New > Other (Ctrl+N).
Projeto 01

Digite “Dynamic Web Project” para selecionar um projeto Web. (Lembro que ainda vou mostrar como fazer tudo isso sem precisar do Eclipse).
Projeto 02

Digite Servlet como nome do projeto e clique em Finish.
Projeto 03

O Eclipse vai perguntar se deseja mudar de perspectiva. Marque em não. Vamos nos acostumar com uma perspectiva, depois, podem tentar as outras à vontade.
Projeto 04

Vamos criar a página inicial. Um HTML mesmo de boas vindas. Botão direito sobre “WebContent > New > File”.
Projeto 05

Coloque o nome do arquivo de index.html e clique em “Finish”.
Projeto 06

Vamos editar o arquivo index.html, para isso, dê um duplo clique nele. Vou colocar apenas o código aqui.

<html>
    <body>
        <h1>Olá</h1>
    </body>
</html>

Criaremos agora um arquivo “web.xml” para acessarmos nossa página inicial. Para isso, com o botão direito, vamos clicar na pasta “WEB-INF > New > File” e vamos criar o arquivo. Se lembrem, esse arquivo fica na pasta “WEB-INF”!
Projeto 07

O arquivo web.xml tem como suas linhas iniciais várias configurações que são padronizadas. Você pode encontrar facilmente na internet, por isso vou apenas colocar aqui sem explicar o que significam.

<web-app id="WebApp_ID" version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <servlet-name>hello</servlet-name>
    <jsp-file>/index.html</jsp-file>
  </servlet>

  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>

Depois em um futuro artigo explicarei melhor sobre as tags do arquivo web.xml, por hora:

  • Para cada servlet (< servlet >) precisamos de um Mapeamento (< servlet-mapping >). O mapeamento é quem define o destino das urls digitadas no browser. O Servlet não precisa ser necessariamente uma classe Java. Note que estamos mapeando a url digitada e destinando para uma página HTML. Ou seja, mapping é para capturar o que é digitado na url e passar para o servlet.

Para executarmos nossa pequena aplicação basta clicar com botão direito no nosso projeto Servlet > Run As > Run on Server.
Projeto 08

Basta clicar em “Finish”.
Projeto 09

O Eclipse irá abrir um browser e irá mostrar a tela inicial. Caso seu Eclipse não abra esse browser, após o Tomcat estar ativo, basta digitar o seguinte endereço no seu browser predileto: http://localhost:8080/Servlet/hello . Após a tela inicial, clique no botão vermelho para parar o servidor, pois temos mais trabalho pela frente.
Projeto 10

Vamos alterar o index.html para que ele possa enviar valores, nosso servlet irá tratar esses valores, e enviar para uma próxima página. Os campos serão nome, valor1 e valor2. A pessoa irá digitar seu nome e dois valores a serem somados. Note que existem três tags: “form”, “action” e “method”. Form coloca todos os valores dentro do seu corpo, é como uma sacola ou uma mochila. Tudo que estiver dentro dele irá dentro da requisição. Method define qual o tipo de requisição vamos fazer, existem vários e por hora vamos usar o “post”. A Action define o destino, para onde iremos enviar a requisição.

<html>
    <body>
        <form action="/Servlet/calculemos" method="post">
            <h1>Olá</h1>
            Digite seu nome: <input type="text" name="nome"/> <br/><br/>
            Vamos as somas?<br/>
            Digite o primeiro valor a ser somado: <input type="text" name="valor1"/> <br/>
            Digite o segundo valor a ser somado: <input type="text" name="valor2"/> <br/><br/>
            <input type="submit" value="Calcule"/>
        </form>
    </body>
</html>

Vamos agora criar um Servlet (classe Java que irá tratar a requisição). No eclipse dentro da pasta src vamos criar um package e uma classe Java que “extenda” a classe HttpServlet. Essa classe irá receber os valores da nossa index.html, irá somar os números e encaminhar para uma jsp.
Projeto 11a

Projeto 11b

Projeto 12

Projeto 13

package com;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Servlet extends HttpServlet {
    public void doPost(HttpServletRequest req, HttpServletResponse res)    throws ServletException, IOException {
        int valor1;
        int valor2;
        int total = 0;
        String nome = (String) req.getParameter("nome");
        String aviso = "";
        try {
            // Eu sei que está feio, em um futuro poderemos refatorar e aplicar princípios de OO e Design 
            valor1 = Integer.parseInt((String) req.getParameter("valor1"));
        } catch (NumberFormatException e) {
            // Tratando para caso seja digitado um valor inválido 
            valor1 = 0;
            aviso = "Algum valor foi digitado incorretamente (em branco ou caractercs não numérimos), atribuímos 0";
        }
        
        try {
            // Eu sei que está feio, em um futuro poderemos refatorar e aplicar princípios de OO e Design 
            valor2 = Integer.parseInt((String) req.getParameter("valor2"));
        } catch (NumberFormatException e) {
            // Tratando para caso seja digitado um valor inválido
            valor2 = 0;
            aviso = "Algum valor foi digitado incorretamente (em branco ou caracters não numérimos), atribuímos 0";
        }
        // Colocando o nome digitado no request que será enviado ao cliente
        req.setAttribute("nome", nome);
        
        // Enviado o aviso ao cliente
        req.setAttribute("aviso", aviso);

        total = valor1 + valor2;
        
        // Atribuindo o valor da soma ao rquest que será enviado ao cliente
        req.setAttribute("total", total);
        
        // O Request Dispatcher determina o próximo caminho a seguir.
        // Vamos direcioná-lo para a JSP que iremos criar.
        RequestDispatcher requestDispatcher = req.getRequestDispatcher("/WEB-INF/show.jsp");
        
        // Enviamos o processo para frente passando request e o response
        requestDispatcher.forward(req, res);
    }
}

Em nossa jsp iremos exibir o valor da soma e o nome enviado da página inicial. Nossa jsp irá ficar dentro da pasta WEB-INF. Atenção, dentro da pasta WEB-INF!
Projeto 14

Projeto 15

<%@page isELIgnored="false" %>
<html>
    <body>
        Obrigado pela visita ${nome}. <br/>
        O valor da some é: ${total}. <br/>
        
        <br/>${aviso}
    </body>
</html>

Quase acabando. Vamos alterar o arquivo web.xml para que ele possa receber a nova requisição. Lembra da tag “action=calculemos.do” no index.html? É agora que vamos mapeá-lo para que o Tomcat saiba direcioná-lo.

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>  
    </welcome-file-list>
  
    <servlet>
        <servlet-name>hello</servlet-name>
        <jsp-file>/index.html</jsp-file>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    
    <servlet>
        <servlet-name>final</servlet-name>
        <servlet-class>com.Servlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>final</servlet-name>
        <url-pattern>/calculemos</url-pattern>
    </servlet-mapping> 
</web-app>

Agora basta iniciarmos o Tomcat e pronto (como fizemos da primeira vez para ver nossa primeira página), nosso servlet vai funcionar.

OBS.: Caso seu Tomcat mostre uma telinha com erro e acabe por não funcionar, vá em: Servers > Tomcat (pasta) > Server.xml. Após abrir o arquivo aperte F5. Execute o Tomcat novamente.
Projeto 16

Agora, para executar sem o Eclipse, é mais simples ainda. Vamos utilizar todos os arquivos criados aqui (que podem ser criados inclusive com um notepad). Primeiro, dentro da instalação do seu Tomcat, basta criar dentro da pasta wtpwebapps, a árvore de arquivos e pastas a serguir (dentro da pasta WEB-INF deve ficar igual na foto):
Projeto 17

Projeto 18

Dentro da pasta Servlet coloque o arquivo index.html. E dentro da pasta “/classes/com” ficará nossa classe Servlet.class. Nosso arquivo .class você poderá encontrar dentro do workspace que você configurou.

Agora, basta executar o Tomcat (como feito no início após instalarmos o Tomcat) e digitar no browser http://localhost:8080/Servlet/hello e boa navegação.

Sobre o SCWCD:

  • Todos os arquivos dentro da pasta WEB-INF estão protegidos. Tentem acessar nossa jsp: http://localhost:8080/Servlet/show.jsp Já no caso do index.html conseguimos este acesso pois o arquivo não encontra dentro da pasta WEB-INF http://localhost:8080/Servlet/index.html . Todos os arquivos que se encontram dentro da pasta WEB-INF estão protegidos de acesso direto. Grave isso! ;)
  • Vale a pena, sempre decorar um web.xml de exemplo (com todas as outras tags existentes), pois esse mapeamento cai na prova.

Espero que esse post possa lhe ser muito útil
Até a próxima.

14 thoughts on “Criando um WebServer

  1. Olá,

    muito bom o material , parabéns !!!!!!!!!!!!!

    Uma soliciatção se pudesse publicar um material com Jboss 6,Spring,Ajax,Hibernet,Eclipse Helio,Crud,EJB

    abs

    • Olá Paulo, bom dia.

      Uma aplicação com tudo isso não seria muito viável. Ainda mais utilizar Spring, EJB e Hibernate ao mesmo tempo.

      Assim que possível irei colocar posts sobre Spring, talvez na metade do ano pra frente.

      Obrigado pela visita.

  2. Muito bom Hebert, me ajudou muito a começar a entender java web para futuramente conseguir trabalhar com jsf !Vou seguir seus posts. Grato!

  3. Hebert,

    Muito bom o tutorial !!!

    Segui todos os passos para instalacao do TomCat (link quebrado, mas fui ao site e baixei o arquivo).

    TomCat “startou” e “stoppei” para instalar a versao recomendada do Eclipse. Segui todos os passos até o Projeto 9 que nao “startou” o TomCat.

    Repeti umas 3 vezes mas nao houve jeito, Conferi os arquivos index.html e web.xml.

    Devo ressaltar o valor do seu trabalho pela grande contribuicao para a aprendizagem.

    • Francisco, boa noite.

      Realmente não consegui imaginar qual o problema.

      Poste sua dúvida no http://www.guj.com.br que, caso não eu, alguém irá te ajudar.

      Uma dica é após o start da aplicação, veja se aparece alguma mensagem de erro na aplicação.

      Quanto ao link quebrado, agradeço a dica. Eu fui até o link deles e vi que o problema é lá! O.o
      http://tomcat.apache.org/download-70.cgi tem o mesmo link e está quebrado. =/

      [=

  4. Hebert exelente material para iniciantes, só tenho a agradecer pela iniciativa.
    Mentes só funcionam como paraquedas, só quando estão abertas.

  5. Estou com uma dificuldade. Tentei de diversas formas e nada.

    Fiz esse procedimento com o JRE 7 e Tomcat 7. E fiquei preso na parte descrita como “projeto 10″.

    No meu trabalho tem o JR6, Resolvi fazer um teste, coloquei o Tomcat 6, fiz exatamente da mesma forma e funcionou de primeira.

    Não consigo entender o motivo de não funcionar. A unica diferença que notei é que no computador do trabalho criou o web.xml automaticamente.

    • hokifuso, boa noite.

      Analisando somente pela informação que você me forneceu não tenho como te ajudar.

      Você poderia postar o erro que aparece no http://www.guj.com.br .

      O pessoal (ou até eu mesmo) irá analisar seu caso e ajudar. [=

      Obrigado pela visita.

      • Cara cheguei em casa e tentei rodar com o Tomcat 6 no JRE 7 e não era possivel escolher o Tomcat 6. Quando eu marcava no eclipse não dava a opção de indicar o caminho da instalação e não me deixava clicar em finish.

        Achei estranho, fechei o eclipse e abri novamente criando um workspace novo. Quando fiz isso foi possivel escolher o Tomcat 6. Criei o webserver e rodei minha página, funcionou. Tentei novamente, agora com o Tomcat 7 e funcionou tambem. Acredito que tenha ocorrido algum bug com o workspace ou com o windows.

        Mesmo assim mt obrigado por responder.

  6. Uaaaaaaau! Exatamente o que eu procurava sobre JSF a dias, na web tem muito material porém poucos do boa qualidade. Seus posts estão de parabéns, muito bem elaborados. Obrigado por compartilhar conhecimento de forma tão bem elaborada!”

Leave a Comment