You are on page 1of 13

Introduo a Containers Web: A Primeira Aplicao Web com Servlets

http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/servlets/intro.htm#srcservlet

Introduo a Containers Web: A Primeira Aplicao Web com Servlets


Tipos de Clientes
H dois tipos bsicos de clientes: Clientes tipo "Aplicao" Arquitetura em 2 camadas "Fat client" So instalados em cada desktop Clientes Web Browser como cliente universal fornecendo a interface com o usurio (UI) Uso de HTML (talvez com Javascript ou DHTML), ou XHTML ou XML/XSL para definir as telas Uso de HTTP ou HTTPS como protocolo A lgica de negcio (Business Logic) roda no servidor J2EE permite criar aplicaes Web dinmicas (com contedo dinmico) J2EE prov Web Containers e duas API para escrever aplicaes API servlets API Java Server Pages (JSP) Nesta seo, veremos: A anatomia de um Web Container Uma aplicao Web simples Detalhes sobre o funcionamento dessa aplicao

O Protocolo HTTP
Supe-se que o aluno esteja familiarizado com o protocolo HTTP, em especial: O cliente inicia a conversa pedindo uma pgina No h callback do servidor para o cliente GET request Method Para pedir pginas estticas ou dinmicas http://www.dominio.com.br?nome=jacques POST Request Method Para pedir pginas dinmicas Formulrios em pginas HTML podem usar o mtodo GET ou POST Response HTTP com a pgina pedida Tipos MIME (Multi-Purpose Internet Mail Extensions) text/html image/gif Originalmente, a forma de obter informao dinmica com HTTP de usar CGI (Common Gateway Interface), uma forma de ativar um programa externo que gera uma pgina de resposta

1 de 13

23/05/2012 12:42

Introduo a Containers Web: A Primeira Aplicao Web com Servlets

http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/servlets/intro.htm#srcservlet

Containers Web e Aplicaes Web


Aplicaes Web rodam no servidor Para fazer aplicaes no servidor, previsamos de: Um modelo de programao e uma API Suporte de runtime no servidor Para executar aplicaes Suporte de deployment Para instalar aplicaes no servidor e customiz-las J2EE oferece: Web Components Java Servlets e Java Server Pages Web Applications Uma coleo de servlets, pginas JSP, outras classes, bibliotecas e recursos estticos tais como pginas HTML, XML, etc. Um Web Container Para hospedar aplicaes Web Essencialmente uma JVM com API especial de servlets e suporte para JSP O container responsvel pelo ciclo de vida dos componentes Web (inicializao, chamada, destruio, ..) Uma estrutura de packaging e um Deployment Descriptor Arquivos com formato especial para armazenar um Web Component (arquivo WAR) ou Web Application (arquivo EAR) O Deployment Descriptor um arquivo XML que permite customizar a aplicao em tempo de deployment (instalao) Veja a figura abaixo:

2 de 13

23/05/2012 12:42

Introduo a Containers Web: A Primeira Aplicao Web com Servlets

http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/servlets/intro.htm#srcservlet

Servlets
Servlets permitem que a lgica de aplicao seja embutida no processo request-response Um servlet um programa Java que roda do lado servidor e que estende a funcionalidade do servidor Web A API de servlets prov um framework simples para construir aplicaes em servidores Web que do suporte a servlets Um exemplo de um servlet est aqui Exemplos de servidor Web que do suporte a servlets Tomcat do projeto Apache WebLogic da BEA Inprise Application Server da Borland iPlanet Application Server da Sun WebSphere Application Server da IBM Servidores completos J2EE grtis tais como JBoss Internet Information Server (IIS) da Microsoft no tem suporte a Web Containers Use Tomcat, JRun ou ServletExec como plug-in no IIS Quando o Web server entende que uma URL deve ser atendida por um Web Container, ele passa o controle para o container Este container decide qual Web Application deve executar Quando um servlet, o container controla a execuo do servlet Atravs da API de servlets, o servlet pode acessar a informao do Request, fornecer uma Response, etc.

3 de 13

23/05/2012 12:42

Introduo a Containers Web: A Primeira Aplicao Web com Servlets

http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/servlets/intro.htm#srcservlet

Java Server Pages


A gerao de informao dinmica pode ser feita de duas formas: Programaticamente (servlets) Atravs de templates (Java Server Pages ou JSP) O uso de templates melhor pois deixa o Web Designer com possibilidade de criar as pginas JSP uma extenso da tecnologia de servlets Uma pgina JSP contm cdigo HTML (ou XML) Tags especiais ou "scriplets" especiais so embutidos no HTML para execuo para produzir o contedo final Um exemplo de pgina JSP est aqui A pgina JSP traduzida para um servlet automaticamente pelo servidor J2EE O servlet compilado (apenas uma vez) A partir da, o servlet executado para gerar o contedo dinmico Observe que, depois que a pgina JSP foi transformada em servlet, a situao idntica execuo de um servlet

4 de 13

23/05/2012 12:42

Introduo a Containers Web: A Primeira Aplicao Web com Servlets

http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/servlets/intro.htm#srcservlet

Active Server Pages (ASP) da Microsoft semelhante mas: interpretado, no compilado A linguagem VBScript

Servlets ou Java Server Pages?


Temos vrias alternativas para a gerao de pginas dinmicas Servlets contm a lgica de aplicao e geram o contedo das pginas JSP contm a lgica de aplicao e geram o contedo das pginas Servlets contm a lgica de aplicao e JSP geram o contedo das pginas

Deployment Descriptors
Deployment Descriptors ajudam a configurar a aplicao Web durante a instalao (deployment) O Deployment Descriptor um arquivo chamado web.xml que tem os seguintes propsitos: Prover valores iniciais para parmetros de Web Applications Exemplo: servidor de Banco de Dados, etc. Usado para inicializar qualquer valor que poder mudar entre duas instalaes Exemplo: no um bom lugar para colocar a taxa de cmbio do dlar Permite configurar as aplicaes sem alterar cdigo e recompilar os servlets Definir servlets e JSPs Cada servlet e JSP usado pela aplicao deve ser descrito para permitir que seu deployment seja feito Especificar mapeamentos de servlets e JSPs Define como URLs que chegam do cliente sero mapeadas para servlets e JSPs Especificar MIME types usados por cada aplicao

5 de 13

23/05/2012 12:42

Introduo a Containers Web: A Primeira Aplicao Web com Servlets

http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/servlets/intro.htm#srcservlet

Especificar dados de segurana Pode especificar quais pginas precisam de um login, qual a pgina de login, que papel o usurio deve ter para acessar a pgina, etc. Customizar pginas de boas vindas, pginas de erro, configurao de sesso, etc.

Nossa Primeira Aplicao Web


Vamos programar? O problema: Escreva uma aplicao que pea ao usurio seu nome e email Imprima uma pgina de boas vindas dependente do horrio do dia A soluo: usaremos Uma pgina HTML fixa com um formulrio para pedir a informao Um servlet para processar o request e gerar a pgina de boas vindas Um Deployment Descriptor

O arquivo EAR
No final das contas, nossa aplicao Web ser contida no arquivo "CadastromailApp.ear" Um arquivo "ear" um arquivo com formato JAR contendo uma aplicao J2EE (Enterprise Application Archive) Dado este arquivo, podemos rodar em qualquer servidor J2EE Basta, para tanto, passar por um processo de deployment Podemos criar este arquivo "na mo", mas mais simples usar uma ferramenta de deployment A ferramenta de deployment vai ser usada para 2 coisas: Criar o arquivo ear Fazer o deployment da aplicao junto ao servidor Tudo isso depende do servidor J2EE que estaremos usando Cada um tem um deployment tool diferente Usaremos o servidor grtis fornecido no "J2EE SDK" Em particular, usaremos o "j2sdkee1.3", o ltimo disponvel em outubro 2001 Siga os passos dados abaixo, depois que tiver instalado: O J2SE (antigo JDK): http://java.sun.com/j2se/1.3/ O J2EE SDK: http://java.sun.com/j2ee/download.html#sdk O utilitrio ant: http://jakarta.apache.org/builds/jakarta-ant/release/v1.3/bin Semelhante a make, mas independente de plataforma Para ver como instalar tudo isso, veja o tutorial J2EE em http://java.sun.com/j2ee/download.html#tutorial

Criao do arquivo HTML


Escolha um diretrio para colocar todo o cdigo fonte da aplicao Chamaremos este diretrio de "src/cadastromail" Crie o seguinte arquivo src/cadastromail/index.html

6 de 13

23/05/2012 12:42

Introduo a Containers Web: A Primeira Aplicao Web com Servlets

http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/servlets/intro.htm#srcservlet

<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>

Criao do servlet
Agora, crie o servlet no arquivo src/cadastromail/CadastroServlet.java
import import import import javax.servlet.*; javax.servlet.http.*; java.io.*; java.util.*;

public class CadastroServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // pega parmetros do request String nome = request.getParameter("nome"); String email = request.getParameter("email"); GregorianCalendar calendrio = new GregorianCalendar(); String mensagem = calendrio.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(); } }

7 de 13

23/05/2012 12:42

Introduo a Containers Web: A Primeira Aplicao Web com Servlets

http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/servlets/intro.htm#srcservlet

No se preocupe com a forma de funcionamento do servlet ainda Usaremos "ant" para compilar nossas aplicaes Por enquanto, o arquivo src/build.xml deve conter:
<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>

Compile a aplicao:
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

8 de 13

23/05/2012 12:42

Introduo a Containers Web: A Primeira Aplicao Web com Servlets

http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/servlets/intro.htm#srcservlet

Total time: 4 seconds

Isso automaticamente criar o diretrio "build", no mesmo nvel de "src"

Construo da aplicao
Inicie o servidor J2EE (na mquina local ou outra)
j2ee -verbose

O servidor poder ser terminado depois com "j2ee -stop" Inicie a ferramenta de deployment
deploytool

Voc deve ver a seguinte tela

Passos a executar: Escolha File/New/Application Clique em Browse e v at src/cadastromail No campo "File name", digite CadastromailApp e clique em "New Application" Clique em OK Agora, queremos criar um "Web Component" para adicionar aplicao Um Web Component armazenado num arquivo .WAR Clique em File/New/Web Component

9 de 13

23/05/2012 12:42

Introduo a Containers Web: A Primeira Aplicao Web com Servlets

http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/servlets/intro.htm#srcservlet

Leia a tela inicial de explicaes e clique em Next Escolha o radio button "Create New WAR File in Application" e selecione CadastromailApp no combo box Digite CadastromailWAR no campo "WAR Display Name" Clique em Edit para adicionar arquivos ao WAR Navegue at build/cadastromail e adicione os arquivos CadastroServlet.class e index.html Clique em OK e Next Escolha o radio button Servlet e clique em Next No combo box "Servlet Class", escolha CadastroServlet Clique em Next e novamente em Next Clique em Add, digite "/cadastra" no campo Aliases Clique em Finish Clique em CadastromailApp e clique na orelha "Web Context" Informe "/cadastromail" no "Context Root" Clique em File/Save A aplicao est pronta em CadastromailApp.ear O arquivo CadastromailApp.ear foi criado com a seguinte estrutura: META-INF application.xml MANIFEST.MF sun-j2ee-ri.xml war-ic.war META-INF MANIFEST.MF WEB-INF web.xml classes CadastroServlet.class index.html application.xml o Deployment Descriptor da aplicao como um todo
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE application PUBLIC '-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN' 'http://java.sun.com/dtd/application_1_3.dtd'> <application> <display-name>CadastromailApp</display-name> <description>Application description</description> <module> <web> <web-uri>war-ic.war</web-uri> <context-root>/cadastromail</context-root> </web> </module> </application>

sun-j2ee-ri.xml descreve informao no transportvel aplicvel apenas ao servidor sendo usado (J2EE SDK) uma extenso do Deployment Descriptor da aplicao

10 de 13

23/05/2012 12:42

Introduo a Containers Web: A Primeira Aplicao Web com Servlets

http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/servlets/intro.htm#srcservlet

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE j2ee-ri-specific-information PUBLIC '-//Sun Microsystems Inc.//DTD J2EE Reference Implementation 1.3//EN' 'http://localhost:8000/sun-j2ee-ri_1_3.dtd'> <j2ee-ri-specific-information> <server-name></server-name> <rolemapping /> <web> <module-name>war-ic.war</module-name> <context-root>/cadastromail</context-root> </web> </j2ee-ri-specific-information>

web.xml o Deployment Descriptor do Web component (o servlet)


<?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>

Podemos agora fazer o deployment da aplicao Clique em Tools/Deploy Escolha CadastromailApp e o servidor adequado Clique em Finish

11 de 13

23/05/2012 12:42

Introduo a Containers Web: A Primeira Aplicao Web com Servlets

http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/servlets/intro.htm#srcservlet

Podemos agora rodar a aplicao: http://<host>:8000/cadastromail/index.html

O resultado deve ser o seguinte (pelo menos, tarde):

12 de 13

23/05/2012 12:42

Introduo a Containers Web: A Primeira Aplicao Web com Servlets

http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/servlets/intro.htm#srcservlet

Como a Aplicao Funciona


Explicao rpida da sequncia de eventos (ver figura)

Explicao rpida do cdigo do servlet doPost Ponto de entrada no servlet, chamado pelo Web Container HttpServletRequest De onde se pode acessar o request String nome = request.getParameter("nome"); HttpServletResponse Para onde se encaminha a resposta response.setContentType("text/html"); Default "text/html", portanto essa linha opcional PrintWriter out = response.getWriter(); out.println("...");
intro programa

13 de 13

23/05/2012 12:42

You might also like