Introdução a Containers Web: A Primeira Aplicação Web com Servlets

Tipos  de Clientes

O Protocolo HTTP

Containers Web e Aplicações Web

webcontainer.gif (12544 bytes)

Servlets

servlet1.gif (8422 bytes)

Java Server Pages

jsp1.gif (10870 bytes)

Servlets ou Java Server Pages?

Deployment Descriptors

Nossa Primeira Aplicação Web

Criação do arquivo HTML

<html>

<head>
<title>Cadastro de Mail</title>
</head>

<body>
<h1>Bem-vindo!</h1>
<form method="POST" action="/cadastromail/cadastra">
  <p>Seu nome <input type="text" name="nome" size="40"></p>
  <p>Seu email <input type="text" name="email" size="40"></p>
  <p><input type="submit" value="Submit"> <input type="reset" value="Reset"></p>
</form>
</body>

</html>

Criação do servlet

package cadastromail;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

public class CadastroServlet extends HttpServlet {
  protected void doPost(HttpServletRequest request,
                        HttpServletResponse response)
                        throws ServletException, IOException {

    // pega parâmetros do request
    String nome = request.getParameter("nome");
    String email = request.getParameter("email");
    
    GregorianCalendar calendário = new GregorianCalendar();
    String mensagem = calendário.get(Calendar.AM_PM) == Calendar.AM ?
                      "Bom dia" : "Boa Tarde";

    // acerta tipo MIME para a resposta
    response.setContentType("text/html");

    PrintWriter out = response.getWriter();
    out.println("<HTML>");
    out.println("<BODY>");
    out.println("<P>" + mensagem + ", " + nome + "</P>");
    out.println("<P>Obrigado por cadastrar seu email (" + email + ") conosco.</P>");
    out.println("<P>- A Galera Java</P>");
    out.println("</BODY>");
    out.println("</HTML>");
    out.close();
  }
}
<project name="disciplina-j2ee-exemplos" default="all" basedir=".">
  <target name="init">
    <tstamp/>
    <property name="build" value="../build" />
    <property name="cadastromail" value="cadastromail" />
    <property environment="myenv" />
    <property name="j2eepath"  value="${myenv.J2EE_HOME}/lib/j2ee.jar" />
  </target>

  <target name="prepare" depends="init">
    <mkdir dir="${build}" />
  </target>

  <target name="clean" depends="init">
    <delete dir="${build}" />
  </target>
      
  <target name="all" depends="init,cadastromail">
  </target>

  <target name="cadastromail" depends="init">
    <mkdir dir="${build}/${cadastromail}" />
    <copy todir="${build}/${cadastromail}" >
      <fileset dir="${cadastromail}"  >
        <include name="**/*.html" />
      </fileset>
    </copy>
    <javac srcdir="${cadastromail}"
      destdir="${build}/${cadastromail}"
      classpath="${j2eepath}" >
      <include name="**/*.java" />
    </javac>
  </target>
</project>
C:\...\src>ant cadastromail
Buildfile: build.xml

init:

cadastromail:
    [mkdir] Created dir: C:\...\build\cadastromail
     [copy] Copying 1 file to C:\...\build\cadastromail
    [javac] Compiling 1 source file to C:\...\build\cadastromail

BUILD SUCCESSFUL

Total time: 4 seconds

Construção da aplicação

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN' 'http://java.sun.com/dtd/web-app_2_3.dtd'>

<web-app>
  <display-name>CadastromailWAR</display-name>
  <servlet>
    <servlet-name>CadastroServlet</servlet-name>
    <display-name>CadastroServlet</display-name>
    <servlet-class>CadastroServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>CadastroServlet</servlet-name>
    <url-pattern>/cadastra</url-pattern>
  </servlet-mapping>
  <session-config>
    <session-timeout>30</session-timeout>
  </session-config>
</web-app>

wpeA9.jpg (27320 bytes)

wpeAA.jpg (25198 bytes)

Como a Aplicação Funciona

servlet2.gif (6269 bytes)

Mais sobre Servlet

Sobre o ciclo de vida de um servlet

servlet3.gif (13571 bytes)

Informação sobre o ServletContext

      contexto.log(String mensagem);
  // num Servlet qualquer
  contexto = getServletContext();

  // num ContextListener que recebeu um evento
  contexto = event.getServletContext();
  // num filtro
  contexto = filterConfig.getServletContext();

 

Escopo Classe Quem pode acessar?
Contexto Web
(a aplicação toda)
javax.servlet.ServletContext Qualquer componente Web da aplicação
Sessão javax.servlet.http.HttpSession Qualquer componente Web tratando de um pedido da sessão
Pedido subtipo de javax.servlet.ServletRequest Qualquer componente Web tratando do pedido
Página javax.servlet.jsp.PageContext A página JSP que cria o objeto
(Veja outro capítulo sobre JSP)

 

Incluindo o conteúdo de outro recurso na resposta

  // Obtém o dispatcher; ele vai mandar o banner para o usuário
  RequestDispatcher dispatcher =
      getServletContext().getRequestDispatcher("/ErroServlet");
  if (dispatcher != null) {
    dispatcher.forward(request, response);
  }

intro programa