Professional Documents
Culture Documents
http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/servlets/intro.htm#srcservlet
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
http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/servlets/intro.htm#srcservlet
2 de 13
23/05/2012 12:42
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
http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/servlets/intro.htm#srcservlet
4 de 13
23/05/2012 12:42
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
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
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.
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
6 de 13
23/05/2012 12:42
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
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
http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/servlets/intro.htm#srcservlet
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
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
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
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>
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
http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/servlets/intro.htm#srcservlet
12 de 13
23/05/2012 12:42
http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/servlets/intro.htm#srcservlet
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