Você está na página 1de 34

Java Servlets

Java Servlets

Servlet uma tecnologia para a construo de componentes que executam em conteineres Web na plataforma J2EE. Por executarem em conteineres Web, servlets se interpem entre uma requisio gerada por um navegador Web (ex: submisso de formulrio HTML) e outros componentes da aplicao executando neste tier intermedirio ou no tier da lgica da aplicao. Servlets podem implementar controladores MVC ou objetos de controle identificados em diagramas de robustez.

Java Servlets
EJB
Navegador Web

HTTP

Servlet
Continer Web

CORBA

JDBC
Descritor de Instalao (web.xml)

Vantagens de Servlets

Programao 100% Java no lado do servidor; Portvel e disponvel (parte do J2EE); Eficiente (servlets executam como threads); Perfeita integrao com outras tecnologias Java (RMI, JDBC, etc.); Base para outras tecnologias (ex: JSP, Struts); Maior controle no processamento de requisies HTTP (ex: autenticao, sesso, cookies); Permite gerar respostas on-the-fly para o cliente.

O que um Servlet ?
Servlet uma classe Java derivada da classe HTTPServlet, implementada pelo desenvolvedor e carregada por um servidor Web que suporta esta tecnologia (ex. Apache Tomcat, JBoss). Servlets so mapeadas em uma URL, sendo ativadas pelo servidor quando uma requisio HTTP dirigida para esta URL. Servlets implementam um mtodo para cada requisio HTTP (doGet, doPost, doTrace, etc.).

O Ciclo de Vida de um Servlet


1. L dados enviados pelo cliente (ex: campos de um formulrio HTML); 2. Examina outras informaes sobre a requisio (ex: cookies, tipo de navegador, endereo IP de origem, etc.); 3. Gera os resultados (ex: atravs do acesso em base de dados, interao com servidor CORBA, etc.); 4. Fornece os parmetros HTTP da resposta (cookies, tipo do contedo, etc.); 5. Envia a resposta para o cliente ou encaminha para outro componente Web (tipicamente JSP).

Como Dados So Transportados Entre um Cliente e um Servlet ?


Dados so transportados entre o cliente e o servlet atravs de uma cadeia de caracteres na forma (estilo CGI): atributo1=valor1&atributo2=valor2&... (espaos em branco no valor so identificados pelo smbolo +). Esta cadeia transportada no final da URL (separada por ?) no caso da requisio GET ou no corpo da mensagem HTTP no caso da requisio POST. A cadeia de pares parmetros-valor gerada automaticamente pela submisso de um formulrio ou pode ser acrescentada por um programa (applet, JavaScript) na URL: http://acme.com?nome=Eleri+Cardozo&CPF=765.897.346-51

Como os Dados Passados So Obtidos Pelo Servlet ?


import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String nomeCliente = request.getParameter("nome"); ... } }

O que Usualmente Obtido do Parmetro request ?


Qualquer parmetro presente no cabealho HTTP (importante para identificar o cliente, por exemplo, endereo IP de origem, o tipo do navegador, etc.); Login do cliente (caso o servlet seja protegido por um esquema de autenticao); A sesso mantida com o cliente; Os cookies enviados pelo cliente.

O que Usualmente Acrescentado no Parmetro response ?


Um OutputStream (ou PrintWriter) para envio de dados ao cliente; Parmetros do cabealho HTTP de resposta (acrescente sempre o parmetro ContentType !); Um redirecionamento de resposta para outra URL (por exemplo, um servidor WML); Cookies para o cliente.

Exemplo de Servlet
import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><body>Al Mundo !</body></html>"); } }

Inicializao de Servlets
Servlets so iniciadas quando carregadas ou quando invocadas pela primeira vez (no em cada requisio). O mtodo init implementado pelo servlet invocado pelo continer Web nestas ocasies. public void init() throws ServletException public void init(ServletConfig config) throws ServletException ServletConfig contem parmetros passados pelo continer conforme definidos no descritor de instalao.

Exemplo de Inicializao de Servlets


Descritor de Instalao (trecho) <init-param> <param-name> mensagem </param-name> <param-value> Oi gente </param-value> </init-param>
public class MyServlet extends HttpServlet { private String mensg = ""; public void init(ServletConfig conf) throws ServletException { super.init(config); // importante mensg = conf.getInitParameter("mensagem"); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><body>" + mensg + "</body></html>"); } }

O Conceito de Sesso
HTTP um protocolo stateless, ou seja, no armazena um estado entre interaes consecutivas. Exemplo: em uma aplicao de compras on-line como associar um carrinho de compras ao cliente remoto ? (ou de outra forma: como manter uma sesso entre o cliente e o servidor que perdure por mltiplas interaes HTTP ?) Existem algumas solues: cookies; adio de parmetros URL; campos de formulrios escondidos.

Cookies
Cookies so informaes que um servidor envia ao navegador que as armazena em disco local. Estas informaes so retornadas ao servidor em todas as interaes subsequentes. Navegadores usualmente limitam o tamanho do cookie em 4 Kbytes, permitindo no mximo 20 cookies por site. Cookies no apresentam risco segurana (nunca so executados) mas podem comprometer a privacidade: registram aes efetuadas pelo usurio em determinado site (ex: compras, consultas, etc.); sites irresponsveis podem adicionar informaes sensveis ao cookie (ex: nmero do carto de crdito). Por estas razes, os navegadores permitem desabilitar a instalao total ou parcial de cookies.

Cookies e Servlets
Para enviar um cookie ao cliente: Cookie cookie = new Cookie("usuario", "Eleri Cardozo"); cookie.setMaxAge(60 * 60 * 24 * 365); // 1 ano response.addCookie(cookie); Para processar os cookies recebidos do cliente: Cookie[] cookies = request.getCookies(); Cookie c; for(int i = 0; i < cookies.length; i++) { ck = cookies[i]; String nome = ck.getName(); String valor = ck.getValor(); }

Adio de Parmetros URL e Parmetros Escondidos


PrintWriter out = response.getWriter(); String acao = "procServlet?usuario=" + user; out.println("<form action=\"" + acao + "\" method=\"GET\">"); ... String par = "<input type=\"hidden\" name=\"usuario\" value=\"" + user + "\">"; out.println("<form action=\"procServlet\" method=\"GET\">"); out.println(par); ... Em ambos os casos o servlet receber o parmetro "usurio". OBS: Estas solues funcionam apenas em documentos gerados dinamicamente.

Gerenciamento da Sesso
A classes HttpSession permite ao servlet gerenciar sesses mantidas com os clientes sem a necessidade do programador gerenciar cookies e parmetros. Esta classe permite: criar um objeto de sesso: HttpSession sessao = request.getSession(true); obter o identificador nico da sesso: String sessid = session.getId(); acrescentar e recuperar informao ao objeto de sesso: sessao.setAttribute("nome", nomeCliente); sessao.removeAttribute("nome"); Object valor = sessao.getAttribute("nome"); Enumeration enum = sessao.getAttributeNames();

Gerenciamento da Sesso cont.


contadores de tempo: long dc = sessao.getCreationTime(); long ua = sessao.getLastAccessedTime(); sessao.setMaxInactiveInterval(60 * 60); // 1 hora int mi = sessao.getMaxInativeInterval(); invalidao da sessao: sessao.invalidate(); Como HttpSession mantm uma sesso ? Utilizando cookies ou, caso o navegador no suporte (ou foi desabilitado), HttpSession utiliza adio de parmetros URL.

Apache Tomcat
Tomcat a implementao de referncia para Servlets e Java Server Pages (JSP). Pode ser obtido gratuitamente para vrias plataformas (Linux, Windows) em http://jakarta.apache.org/tomcat/ Tomcat totalmente escrito em Java e requer J2EE ou J2SE instalado. Tomcat pode atuar como servidor HTTP padro ou em conjunto com servidor Apache (recebendo as requisies para servlets e pginas JSP). Tomcat suporta HTTPS, autenticao de usurios (senha/papel), gerenciamento atravs de navegador e configurao individual de aplicaes.

10

Estrutura de Diretrios
Tomcat possui a seguinte estrutura de diretrios (a partir da raiz onde foi instalado): bin: scripts .sh e .bat (startup.sh e shutdown.sh) logs: arquivos de log de execuo (catalina.out) conf : arquivos de configurao (server.xml, tomcatusers.xml) webapps: aplicaes

Estrutura de Aplicaes
Estrutura simplificada de uma aplicao:
/ webapps / MinhaAplic *.html *.jsp / WEB-INF *.gif ... web.xml / classes descritor de instalao *.class servlets, beans

pginas, figuras, ...

11

Estrutura de Aplicaes
Estrutura recomendada de uma aplicao:
/ webapps raiz da aplicao / MinhaAplic / src web.xml / WEB-INF / web (pginas, figuras, ...) / docs (javadocs) / package-n / MinhaAplic

/ package-1

/ classes (fontes compilados)

/ lib (jars)

(fontes de servlets, beans, etc., organizados em pacotes)

ant

Construo e Controle de Verso


Recomenda-se fortemente a utilizao das ferramentas ANT e Subversion para contruo e controle de verso de aplicaes: http://jakarta.apache.org/ant/ http://subversion.tigris.org/ ANT uma ferramenta tipo Make, escrita em Java, com a caracterstica de controlar o processo de execuo com regras expressas de forma clara em XML (arquivo build.xml). Subversion um sistema de controle de verses composto de um servidor (repositrio de cdigo) e clientes standalones ou integrados com ambientes de desenvolvimento como o Eclipse.

12

Descritores de Instalao
Estrutura do Descritor de Instalao (web.xml)
<web-app> <servlet> <servlet-name>ManagementServlet</servlet-name> <display-name>SNMP Servlet</display-name> <description>Servlet that gets MIB information</description> <servlet-class>demo.web.mgmtServlet</servlet-class> <init-param> <param-name>Comunity</param-name> <param-value>public</param-value> </init-param> </servlet>

Descritores de Instalao - cont.


Estrutura do Descritor de Instalao (web.xml) cont.
<servlet-mapping> <servlet-name>ManagementServlet</servlet-name> <url-pattern>/mgmtDispatcher</url-pattern> </servlet-mapping> <session-config> <session-timeout>30</session-timeout> <!-- 30 minutos --> </session-config> </web-app>

13

Autenticao de Usurios
O esquema de autenticao no Tomcat identifica usurios atravs de trs parmetros: nome (username), senha (password) e papeis (roles). Estes parmetros so estabelecidos pelo administrador do Tomcat. Estas informaes so armazenadas em "bases de dados" denominadas Realm. Tomcat fornece alguns realms (o desenvolvedor pode implementar seu prprio realm): Memory Realm: base de dados armazenada em memria (lida a partir do arquivo tomcat-users.xml) JDBC Realm: base de dados mantidas em um gerenciador de base de dados acessvel via JDBC. JNDI Realm: base de dados mantidas em servidor de diretrio LDAP acessvel via JNDI (Java Naming and Directory Interface).

Memory Realm
o esquema mais simples de autenticao e emprega o arquivo tomcat-users.xml (diretrio conf) para identificar usurios e papis:

<?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="admin"/> <role rolename="manager"/> <role rolename="usuario"/> <user username="admin" password="$258" roles="manager,admin"/> <user username="maria" password="segredo" roles="usuario"/> <user username="joo" password="1234" roles="usuario"/> </tomcat-users>

14

Memory Realm - cont.


No descritor de instalao (web.xml) so definidos os diretrios a serem protegidos e os papis autorizados: <web-app> ... <security-constraint> <!-- diretrios protegidos e papis autorizados --> <display-name>Proteo da Aplicao Pet Shop</display-name> <web-resource-collection> <web-resource-name>Area Protegida</web-resource-name> <url-pattern>/PetShop/*</url-pattern> </web-resource-collection> <auth-constraint> <!-- que papeis podem utilizar a aplicao --> <role-name>usuario</role-name> <role-name>admin</role-name> </auth-constraint> </security-constraint>

Memory Realm - cont.

<login-config> <!-- pode ser FORM ou BASIC --> <auth-method>BASIC</auth-method> <realm-name>Autenticao Bsica</realm-name> </login-config> <security-role> <!-- Papis referenciados por esta aplicao --> <role-name>usuario</role-name> </security-role> <security-role> <role-name>admin</role-name> </security-role> ... </web-app>

15

JDBC Realm

JDBC Realm utiliza tabelas de usurios e papis armazenados em bases de dados. mais convenveniente que o Memory Realm quando: existem muitos usurios e/ou usurios so adicionados e removidos com frequncia (via aplicativo de administrao); a aplicao permite alguma funcionalidade ao usurio tal como troca de senha e envio da senha esquecida por e-mail; a aplicao j utiliza bases de dados acessadas com JDBC.

JDBC Realm - cont.


Para utilizer o JDBC Realm deve-se especificar no arquivo server.xml (diretrio conf) as seguintes informaes: <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99" driverName="org.mysql.Driver" connectionURL="jdbc:mysql://localhost/management" connectionName="test" connectionPassword="test" userTable="users" userNameCol="user_name" userCredCol="user_pass" userRoleTable="user_roles" roleNameCol="role_name" />

tabela "users" user_name admin maria joo user_pass $258 segredo 1234

tabela "user_roles" user_name role_name admin admin manager admin maria usuario

16

Concluses Sobre Servlets


Provem uma ponte entre o Mundo Internet (HTTP, HTML, cookies, etc.) e o Mundo Corporativo (EJB, JDBC, CORBA, etc.). Especificao estvel. 100% programao em Java. Disponvel em vrios application servers tanto comerciais quanto software livre. Boa combinao com JSP para a gerao de contedo dinmico.

Referncias Sobre Servlets


Marty Hall, Core Servlets and Java Server Pages, Prentice Hall PRT, 2000. Jason Hunter, Java Servlet Programming, 2nd Edition, OReilly, 2002. Site da SUN: tutoriais, artigos e documentao sobre servlets. http://java.sun.com/products/jsp/docs.html Tutorial do J2EE http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html TheServerSide.com: artigos, exemplos e discusses sobre o uso da tecnologia Java no lado do servidor. http://www.theserverside.com Servlet API Javadocs Disponvel com a documentao do Tomcat ou no site da SUN.

17

Java Server Pages (JSP)

Java Server Pages

Java Server Pages (JSP) a segunda tecnologia para a construo de componentes (pginas JSP) que executam em containers Web na plataforma J2EE. JSP permite compor contedo esttico (HTML, XML) com contedo dinmico (cdigo Java, taglibs) formando as chamadas pginas dinmicas. Quando a pgina acessada, o cdigo executado e seu resultado incorporado ao contedo esttico. A pgina esttica (sem cdigo) resultante ento enviada ao cliente.

18

Java Server Pages

contedo esttico

contedo dinmico (computado toda vez que a pgina for acessada)

Exemplo de JSP
<%-- Exemplo de pgina JSP --%> <html> <head> <title>Hora Certa</title> </head> <%@ page import="java.util.*" %> <% Date dt = new Date(); %> <h1>Servio JSP de Hora Certa</h1> Benvindo, a hora certa neste servidor <%= dt.toString() %> </body> </html>

19

Vantagens de JSP

Mais poderoso que qualquer tecnologia baseada puramente em script (ASP, PHP); Portvel e disponvel (parte do J2EE); Eficiente (pgina compilada apenas no primeiro acesso); Perfeita integrao com outras tecnologias Java (RMI, JDBC, etc.); Maior controle no processamento de requisies HTTP (ex: autenticao, sesso, cookies).

JSP x Servlet

JSP e servlets so 100% equivalentes (o que um faz o outro tambm capaz de fazer). Isto se deve ao fato de que uma pgina JSP ao ser compilada gera um servlet correspondente. este servlet que ir atender as requisies HTTP de acesso pgina. O uso de JSP recomendado quando a parte esttica bem mais extensa que a parte dinmica. JSP evita a programao de servlets com centenas de out.println com parmetros constantes.

20

Elementos Bsicos do JSP


Expresses - so avaliadas e o resultado inserido na pgina: <%= expresso %> Scriptlets - trechos de cdigo Java: <% scriptlet %> Declaraes - permitem definir mtodos e variveis: <%! declarao %> Diretivas - controles fornecidos ao compilador JSP: <%@ diretiva atributo="valor" %> Comentrios: <%-- comentrio --%>

Variveis Pr-definidas no JSP


JSP permite utilizar (sem definir) as seguintes variveis: HttpServletRequest request HttpServletResponse response HttpSession session PrintWriter out Exemplo: <body> Sua mquina: <%= request.getRemoteHost() %> </body>

21

Diretiva page
Atributo import - importao de pacotes <%@ page import="java.util.*" %> Atributo contentType - define o tipo MIME do contedo sendo enviado <%@ page contentType="text/html" %> Atributo isThreadSafe - define se requisies concorrentes sero ou no tratadas por mltiplas threads: <%@ page isThreadSafe="false" %> Atributo errorPage - permite definir uma pgina padro em caso de exceo no tratada (excees devem ser tratadas !): <%@ page errorPage="erro.jsp" %> Atributo isErrorPage - define uma pgina como pgina de tratamento de erro (neste caso a varivel exception pr-definida para a pgina): <%@ page isErrorPage="true" %>

Diretiva include
Atributo file - permite incluir um arquivo dado pela sua URL relativa em tempo de compilao: <%@ include file="./menu.jsp" %> Atributo page - permite incluir um arquivo dado pela sua URL relativa em tempo de execuo: <%@ include page="./menu.html" %> Elemento jsp:include - construo XML equivalente ao atributo page acima: <jsp:include page="./menu.html" flush="true"/> NOTA: arquivos includos em tempo de execuo (atributo page ou elemento jsp:include) no podem conter elementos JSP.

22

Integrao JSP-Servlets

Navegador

Servlet
Processamento inicial da requisio: deciso sobre contedo; adio de novos atributos requisio; criao de Java Beans (escopo da aplicao).

JSP JSP JSP

Processamento final da requiso

Scriptlets
Programadores JSP experientes evitam o uso extensivo de scriptlets: cdigo no reusvel (encoraja copy-and-paste); misturam lgica e apresentao; inseguro (expem passwords, por exemplo); dificultam manuteno e teste de pginas JSP; erros gerados por scriptlets so difceis de depurar. Solues: 1. Uso de Java Beans. 2. Uso de Tags customizadas. 3. Uso de bibliotecas de tags (taglibs).

23

Uso de Java Beans em Pginas JSP


Muitos desenvolvedores preferem "isolar" scriptlets JSP em Java Beans por razes de modularidade e segurana. Exemplo: <% <%-- scriptlet --%> try { // conecta com a base de dados url = "jdbc:mysql://localhost/clientes"; Class.forName("org.mysql.jdbc.Driver"); connect = DriverManager.getConnection(url, "clientes", "#dfr.675" ); } catch ( Exception ex ) { ... return; } %> O cdigo acima expe o acesso base de dados.

Java Beans
Um Java Bean uma classes Java com um formato especial: 1. a classes possui um construtor sem argumentos; 2. a classe no possui atributos pblicos; 3. atributos so manipulados por mtodos de acesso tipo get (ou is para atributos tipo boolean) e set.

public class currentUser { private String name; // property Name currentUser () { name = "unknown"; } // ctor String getNane() { return name; } // accessors void setName(String n) { name = n; } }

24

Java Beans e JSP


Java Beans podem atuar como interfaces para pacotes Java necessrios composio da pgina.

Pgina JSP

Java Bean

Pacotes Java

Interao Java Beans-JSP

A interao Java Beans-JSP consiste de: instanciar um Java Bean em pgina JSP; manipular propriedades (atributos) do Java Bean a partir da pgina JSP; associar Java Beans a parmetros de entrada da pgina JSP; compartilhar Java Beans entre mltiplas pginas JSP e servlets.

25

Instanciao de Java Beans


Java Beans so instanciado via ao jsp:useBean <jsp:useBean id="name" class="package.Class"/> Exemplo: <jsp.useBean id="car" class="ComprasOnLine.Carrinho"/> equivalente ao scriptlet: <% ComprasOnLine.Carrinho car = new ComprasOnLine.Carrinho(); %>

Manipulao de Propriedades do Java Bean


Propriedades definidas por Java Beans so manipuladas via aes jsp:getProperty e jsp:setProperty. Exemplo: <jsp:getProperty name="car" property=cliente"/> equivalente expresso: <%= car.getCliente() %> <jsp:setProperty name="car" property=cliente" value="Eleri Cardozo"/> equivalente expresso: <%= car.setCliente("Eleri Cardozo") %>

26

Associao de Java Beans a Parmetros


JSP permite associar diretamente propriedades de Java Beans a parmetros de entrada da pgina via atributo param: <jsp:setProperty name="car" property=cliente" param=cliente"/> equivalente ao scriptlet: <% String _cliente = request.getParameter(cliente"); if(_cliente != null) car.setCliente(_cliente); %> Pode-se assoaciar todos os parmetros s respectivas propriedades (nomes devem ser idnticos): <jsp:setProperty name="car" property="*"/> OBS: Tipos comuns so convertidos automaticamente de string para o tipo da propriedade do bean.

Compartilhamento de Java Beans


Java Beans podem ser compartilhados no nvel de (escopo): 1. pgina (default); 2. aplicao (a referncia do bean armazenado na varivel prdefinida application e obtida via mtodo getAttribute); 3. sesso (a referncia do bean armazenado na varivel prdefinida session e obtida via mtodo getValue); 4. requisio (a referncia do bean armazenado na varivel prdefinida request e obtida via mtodo getAttribute). <jsp:useBean id="car" class="ComprasOnLine.Carrinho" scope="page"/> <%-- application, session, request --%>

27

Instanciao Condicional de Java Beans

No caso de compartilhamento de Java Beans, a instanciao deve ser condicional pois o bean j pode ter sido instanciado: <jsp:useBean id="car" class="ComprasOnLine.Carrinho" scope="session"> <jsp:setProperty name="car" property=cliente" param="Cliente"/> </jsp:useBean>

Integrao JSP-Servlets cont.


// --- servlet // acrescenta nova informacao a requisicao request.setAttribute("novoAttr", novoValor); NovoBean b1 = new NovoBean(); b1.setP(valor); getServletContext().setAttribute("bean1", 1); // redireciona RequestDispatcher disp = getServletConfig(). getServletContext().getRequestDispatcher("./abc.jsp"); disp.forward(request, response); <%-- JSP --%> valor = request.getAttribute("novoAttr"); <jsp:useBean id="bean1", class="NovoBean scope="application"/>

28

Linguagem de Expresses (JSP 2.0)


Linguagens de expresses (EL) permitem manipular objetos fora de scriptlets. Expresses so avaliadas em tempo de execuo. Exemplo: <%= ((database.BookDetails) request.getAttribute("book").getPrice() %> pode ser substituida por ${book.price} O objeto book procurado nos contextos de pgina, requisio, sesso ou aplicao. Usando introspeco, o avaliador de expresses procura a propriedade requerida e obtem seu valor utilizando o mtodo getXXX.

Tags JSP Customizadas

possvel definir novas tags para o JSP. O processo segue o seguintes passos: 1. criar um arquivo com a definio no novo tag (XML com extenso .tld) no diretrio WEB-INF/jsp da aplicao (Tomcat); 2. implementar a classe de manipulao desta tag. Esta classe deve herdar de javax.servlet.jsp.tagext.TagSupport e implementa mtodos chamados no incio (doStartTag) e final (doEndTag) do processamento da tag. Classes de manipulao de tags devem ser definidas em pacotes e instalados abaixo do diretrio WEB-INF da aplicao.

29

Exemplo de Tags JSP Customizadas


<ext:data/>: imprime a data no local da tag
<!-- Arquivo data.tld --> <taglib> <tag> <name>ext:data</name> <tagclass> myTags.DataTag </tagclass> <bodycontent> EMPTY </bodycontent> </tag> </taglib> // arquivo DataTag.java package myTags; import java.util.*; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; public class DataTag extends TagSupport { public int doStartTag () { JspWriter out = pageContext.getOut(); Date dt = new Date(); out.print(dt.toString()); } }

JSP Standard Tag Library (JSTL)


Apesar de ser um fator que contribui para o reuso de cdigo, customizao de tags no JSP possui a desvantagem de necessitar programao. A soluo ento fornecer bibliotecas de tags (Taglibs) para o JSP. O projeto Jakarta oferece um conjunto de Taglibs para o JSP. Exemplo de Taglibs: JNDI, JMS, Strings, Date/Time. http://jakarta.apache.org/taglibs/ Jakarta Taglibs deu origem ao padro JSTL elaborado pela comunidade Java. atualmente a implementao mais completa deste padro.

30

Bibliotecas JSTL
JSTL composta de 4 bibliotecas: 1. Ncleo (tags <c: >): controle de fluxo, controle de variveis, gerncia de URL, tratamento de erros e impresso. 2. Internacionalizao (tags <fmt: >): formatao de datas, moedas e mensagens. 3. XML (tags <x: >): transformaes, parsing, e impresso de documentos XML. 4. SQL (tags <sql: >): manipulao de banco de dados.

Exemplos de JSTL (Bibl. Ncleo)


<c:set var="preco" value="1000"/> <c:out value="${preco}"/> <c:if test="${preco < 1000}" var="acesso"> ... </c:if> <c:choose> <c:when "${preco < 1000}"> ... </c:when> <c:when "${preco > 1000}"> ... </c:when> <c:otherwise> ... </c:otherwise> </c:choose> <c:catch var="excecao"> ... </c:catch> <c:forEach items="${carrinho.itens}" begin="0" step="1" var="contador" varStus="status"> <c:out value="${carrinho.itens[contador]}" /> </c:forEach> <c:import url= http://www... />

31

Exemplos de JSTL (Bibl. Internacionalizao)


<fmt:setLocale value="pt_BR" scope="application"/> <fmt:parseDate value="${data}" dateStyle="short" parseLocale="pt_BR" var="dataBR"/> <fmt:setBundle baseName="EnBndl" scope="session"/> arquivo EnBndl em WEB-INF/classes: #mensagens em ingles saudacao=Welcome to the Pet Shop agradecimento=Thank you <fmt:message key="saudacao"/> imprime na pgina: Welcome to the Pet Shop

Exemplos de JSTL (Bibl. XML)

<c:import url="/books.xml" var="xml"/> <c:import url="/WEB-INF/xslt/bookDisplay.xsl" var="xslt"/> <x:transform source="${xml}" xslt="${xslt}> <x:param name="locale" value="${locale}"/> </x:transform>

Transformaes XSLT so importantes a apresentao de documentos XML em outros formatos (HTML, WML, etc.).

32

Exemplos de JSTL (Bibl. XML)


<%-- get xml file and parse it --%> <xtags:parse url="<%= url %>"/> <%-- scan xml file --%> <xtags:forEach select="//equity-quote"> <tr> <td align="center"> <xtags:valueOf select="issue-name"/></td> <td align="center"> <xtags:valueOf select="last-sale-price"/></td> <td align="center"> <xtags:valueOf select="net-change-price"/></td> </tr> </xtags:forEach>

Exemplos de JSTL (Bibl. SQL)

<sql:query dataSource="jdbc:mysql://localhost/clientes, org.mysql.jdbc.Driver, clientes, #dfr.675" var="consulta"> select * from clientes where faturamento > ? <sql:param value="100000"/> </sql:query> <c:forEach var="linha" items="${consulta.rows}"> <tr><td> <c:out value="${linha.nome}"/> </td> <td><fmt:formatNumber type="currency" value="${linha.faturamento}"/> maxFractionDigits="0"/></td></tr> </c:forEach>

33

Concluses Sobre JSP


Proposta original interessante para gerao de contedo dinmico utilizando programao Java (scriptlets, expresses Java, tags customizadas) ou taglibs. Especificao relativamente estvel. Boa integrao com Servlets. Disponvel em vrios application servers tanto comerciais quanto software livre. Recursos como JSTL e linguagem de expresses tornam JSP uma nova linguagem de script (bem parecida com XPath !).

Referncias Sobre JSP


Marty Hall, Core Servlets and Java Server Pages, Prentice Hall PRT, 2000. Hans Bergsten, Java Servlet Programming, 2nd Edition, OReilly, 2001. Site da SUN: tutoriais, artigos e documentao sobre servlets. http://java.sun.com/products/jsp/docs.html Tutorial do J2EE http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html TheServerSide.com: artigos, exemplos e discusses sobre o uso da tecnologia Java no lado do servidor. http://www.theserverside.com JSP API Javadocs Disponvel com a documentao do Tomcat ou no site da SUN.

34