Você está na página 1de 40

Introduc

ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Programacao para Web


Java Server Pages (JSP)
Ivo Calado
Instituto Federal de Educac
ao, Ci
encia e Tecnologia de Alagoas

22 de Fevereiro de 2016

1 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Roteiro

Introducao

Sintaxe JSP

EL e Taglibs

Model View Controller

2 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Observacao sobre o conteudo

Parte deste material e baseada na apostila FJ-21 - Java para


Desenvolvimento Web desenvolvido pela Caelum
(www.caelum.com.br)

3 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Definic
oes

Colocando o HTML no seu devido lugar


Ate agora, vimos que podemos escrever conte
udo dinamico
atraves de Servlets
Porem, se toda hora criarmos Servlets para fazermos esse
trabalho, teremos muitos problemas na manutencao das
nossas paginas e tambem na legibilidade do nosso codigo
Porque?
porque sempre aparece c
odigo Java misturado com codigo HTML.
Imagine todo um sistema criado com Servlets fazendo a geracao
do HTML
4 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Definic
oes

Colocando o HTML no seu devido lugar

Em situacoes onde a presenca do c


odigo HTML e superior a
do codigo Java precisamos de uma solucao que possibilite
inverter os papeis!
Ao inves de inserir c
odigo HTML dentro do codigo Java,
inserimos codigo Java dentro do HTML!
Algo similar ao ASP e PHP
Essa tecnologia e o JavaServer Pages (JSP).

5 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Definic
oes

Nosso primeiro exemplo


Vejamos o nosso primeiro exemplo em JSP
bem-vindo.jsp
<html>
<body>
Bem v i n d o
</ body>
</ html>

6 / 39

Novidade?
Fica claro que uma pagina JSP nada mais e que um arquivo
baseado em HTML, com a extensao .jsp
Podemos escrever tambem c
odigo Java, para que possamos
adicionar comportamento dinamico em nossas paginas, como
declaracao de variaveis, condicionais (if), loops (for, while)
Ivo Calado
entre outros

Programac
ao para Web

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Definic
oes

Nosso primeiro exemplo II


<body>
<% Exemplo de c o m e n t
a r i o%>
<% S t r i n g mensagem = " Meu primeiro exemplo
din^
a mico com JSP " ; %>
<% o u t . p r i n t l n ( mensagem ) ; %><br />
<% S t r i n g d e s e n v o l v i d o = " Desenvolvido por
todos !" ; %>
<s t r o n g><%=d e s e n v o l v i d o%></ s t r o n g><br />
<% System . o u t . p r i n t l n ( " Tudo foi executado !" ) ;
%>
</ body>

7 / 39

Porque a mensagem Tudo foi executado! nao foi exibida na


Ivo Calado
resposta?

Programac
ao para Web

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Definic
oes

Sobre o codigo JSP

O codigo Java e adicionado entre os elementos <% e %>


Existe um objeto out.println que ja envia a sada direta para o
usuario. Lembra algum outro objeto?
Chamada a System.out.println ira enviar a sada para a sada
padrao do servidor!

8 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Definic
oes

Objetos Implcitos

Em JSP alguns objetos sao implcitos


request
response
out
session
application
config
pageContext
page

9 / 39
Programac
ao para Web

HttpServletRequest
HttpServletResponse
JSPWriter
HttpSession
ServletContext
ServletConfig
PageContext
HttpJspPage

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Definic
oes

Codigo HTML entre o codigo JSP


A logica do codigo JSP pode ser intercalada com codigo
HTML
No exemplo abaixo, tudo que estiver entre a definicao do loop
e o smbolo de fechamento (}) sera repetido!
<body>
<% f o r ( i n t i = 0 ; i < 1 0 ; i ++) { %>
<! F o r a do C o
d i g o J a v a >
Passou a q u i =
<%= i %>
<br />
<%} %>
</ body>
10 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Diretivas

Diretivas
Sao mensagens ao container JSP, contendo informacoes de
como o container JSP deve traduzir as paginas
A sintaxe basica e utiliza uma estrutura chave valor
<%@ d i r e t i v a ( a t r i b u t o=" valor " ) %>

Existem tres tipos de diretivas:


Diretiva de pagina: page
Diretiva de inclusao: include
Diretiva de taglib: taglib

11 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Diretivas

A diretiva page
A diretiva page possibilita a configuracao de diversas
propriedades da pagina como contentType, buffer, import etc
<%@ page a t r i b u t o=" valor "%>

Sao definidos 11 tipos de atributos


language: Nome da linguagem do script (padrao Java)
info: String a ser recuperada via getServletInfo
contentType: Tipo MIME identificando o tipo do conte
udo e a
codificacao
import: analogo ao import numa classe Java
session: indica se a pagina participara do controle de sessao
errorPage: pagina de erro a ser utilizada caso alguma excecao
seja lancada
12 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Diretivas

A diretiva include
Permite a inclusao de conte
udos de outros arquivos na pagina
JSP
u
E
til para inclusao de cabecalhos e rodapes de pagina, por
exemplo
<%@ i n c l u d e

f i l e =" arquivo . jsp "%>

A localizacao do arquivo e em relacao a JSP. Caso seja


colocado um / no comeco leva-se em consideracao o contexto
do servidor. Mais a frente veremos uma maneira mais robusta
de trabalhar com localizac
oes de recursos!
13 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Diretivas

A diretiva taglib

Possibilita extender a funcionalidade do JSP


Iremos abordar ele com mais detalhes a frente... :)

14 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Sintaxe

Definicao de codigo

Existem tres formas de definir c


odigo em uma pagina JSP
Declaracoes: Permitem a definicao de variaveis e metodos
Expressoes: Converte o resultado do c
odigo em uma string a
ser anexada no codigo JSP
Scriptlets: Permitem a escrita de c
odigo fora de qualquer
metodo a ser executado (analogo a um c
odigo JavaScript)

15 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Sintaxe

Exemplo
Scriptlets
<%
w h i l e ( i != 0 ) {
o u t . p r i n t l n ( " Texto " ) ;
}%>

Expressoes
Hoje s
a o <%= getSystemTime ( ) %><br />

Declaracoes
<%!

16 / 39
Programa
c
ao para Web
%>

i n t i = 10;
S t r i n g getSystemTime ( ) {
r e t u r n C a l e n d a r . g e t I n s t a n c e ( ) . getTime ( )
. toString () ;
Ivo Calado
}

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Sintaxe

Exercicio I: Criando uma lista de contatos


Crie uma classe chamada Contato, dentro de algum pacote
especficos
Adicione 3 atributos: Nome, Endereco e Idade
Crie uma classe ContatosDao com um metodolo que retorne
uma lista de Contatos (pelo menos 5 elementos)
Com base no exemplo anterior, crie uma pagina JSP que
contenha uma tabela e cada coluna da tabela represente um
contato
Faca uso do Ctrl + espaco no Eclipse para importar o que
for necessario e veja como e feito o import
17 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

EL: Expression Language

Ate agora conseguimos desacoplar o Java do HTML?

O objetivo inicial do JSP era redudir o acoplamento entre o


codigo Java e o HTML
Pelo que vimos ate agora isso foi obtido? Porque?
Nao! O codigo Java continua sendo misturado com HTML e
um designer Web precisa entender l
ogica de programacao
E existe hoje em dia no mercado muitas aplicacoes feitas
inteiramente utilizando scriptlets e escrevendo codigo Java,
PHP e outras no meio dos HTMLs

18 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

EL: Expression Language

EL: Expression Language

Para remover um pouco do c


odigo Java que fica na pagina
JSP, a Sun desenvolveu uma linguagem chamada Expression
Language que e interpretada pelo servlet container
O acesso a express
oes e realizada a partir da estrutura ${expr}
Vejamos como criar uma pagina que receba um parametro e
exiba-o na tela

19 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

EL: Expression Language

Exemplo EL

<body>
Testando s e u s parametros :
<b r /> A i d a d e e $ { param . i d a d e } .
</ body>

param e um objeto nativo, assim como out que contem um


mapa com parametros recebidos na requisicao

20 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

EL: Expression Language

Exemplo: avaliacao de expressoes

<body>
<h2>O p e r a d o r e s de Comparac
a o</h2>
4 > 3 => $ {4 > 3 }<br />
4 > 3 => $ { 4 > 3}<br />
4 > 3=> $ { 4 > 3 } <br />
4 >= 3 => $ {4 >= 3}<br />
4 <= 3 =>
$ {4 < 3}< br />
4 == 4 => $ {4 == 4}<br />
</ body>

21 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Taglibs

Motivacao
Comecamos a melhorar nossos problemas com relacao `a
mistura de codigo Java com HTML atraves da Expression
Language
No entanto, ela sozinha nao pode nos ajudar muito, pois ela
nao nos permite, por exemplo, instanciar objetos, fazer
verificacoes condicionais (if else), iterac
oes como em um for e
assim por diante
Sendo assim, precisamos de um mecanismo baseado em tags
para representar nosso l
ogica de neg
ocio!
Para isso, fazemos uso das Taglibs
22 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Taglibs

JavaBeans: acesso aos atributos


Antes de entrarmos diretamente em Taglibs precisamos
aprender sobre Javabeans. Um Bean e um tipo de objeto
Java, com construtor default e os respectivos getters e setters
Instancia-los na nossa pagina JSP nao e complicado. Basta
utilizarmos a tag correspondente para essa funcao, que no
nosso caso e a < jsp : useBean >
<jsp:useBean
id=contatoclass=br.edu.ifal.pweb.classes.Contato/>
Agora podemos fazer uso das express
oes EL para acessar o valor de
contato. Exemplo: ${contato.nome}
23 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Taglibs

JavaBeans

No nosso exemplo, os atributos de Contato foram definidos


como privados mas estamos conseguindo acessa-los. Por que
isso?
Na verdade nao estamos acessando o atributo privado.
Quando fazemos contato.nome o container implicitamente
chama o metodo getNome

24 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Taglibs

JavaBeans: Modificando propriedades


Para modificar uma propriedade em um bean, fazemos uso da
propriedade jsp:setProperty
<body>
<%c o n t a t o . setNome ( " teste " ) ; %>
< j s p : s e t P r o p e r t y p r o p e r t y=" endereco " v a l u e=" Rua das
casas " name=" contato " />
Nome = $ { c o n t a t o . nome} <br />
E n d e r e c o = $ { c o n t a t o . e n d e r e c o }
</ body>

25 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

JSTL

JavaServer Pages Standard Tag Library


JSTL e a API que encapsulou em tags simples toda a
funcionalidade que diversas paginas Web precisam
Exemplos de funcionalidades incluem: controle de lacos (fors),
controle de fluxo do tipo if else, manipulacao de dados XML e
a internacionalizacao de sua aplicacao
Existem ainda outras partes da JSTL, por exemplo aquela que
acessa banco de dados e permite escrever c
odigos SQL na
nossa pagina. Mas se o designer nao compreende Java o que
diremos de SQL? O uso de tal parte da JSTL e desencorajado.

26 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

JSTL

Instalacao do JSTL
Para instalar a implementacao mais famosa da JSTL basta
baixar a mesma no site https://jstl.dev.java.net/
Adicionar as libs no diret
orios libs do projeto
Para removermosas as notificac
oes de erros no Eclipse,
teremos de adicionar as libs no build path
Adicione a referencia ao conjunto de taglibs do JSTL
(equivalente a um import) atraves da seguinte linha
<%@ t a g l i b u r i=" http :// java . sun . com / jsp / jstl / core "
p r e f i x="c" %>

27 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Estruturas de controle

forEach
A JSTL core disponibiliza uma tag chamada c:forEach capaz
de iterar por uma colecao
No c:forEach, precisamos indicar a colecao na qual vamos
iterar, atraves do atributo items e tambem como chamara o
objeto que sera atribudo para cada iteracao no atributo var.

28 / 39
Programac
ao para Web

<c : f o r E a c h v a r=" ct " i t e m s="${ contato .


lista }" v a r S t a t u s=" id ">
<t r b g c o l o r="#${ id . count % 2 ==
0 ? aaee88 : ffffff }"
>
<td>$ { i d . c o u n t }</ td>
<td>$ { c t . nome}</ td>
<td>$ { c t . i d a d e }</ td>
</ t r>
</ c : f o r E a cIvo
h>Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Estruturas de controle

Atributos

var: variavel a ser utilizada na iteracao


items: fonte dos dados
varStatus: posicao corrente

29 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Estruturas de controle

Exerccio

Altere o exemplo para que seja a coluna e nao a linha da tabela


apresentada

30 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Estruturas de controle

Criando Ifs
E se quisermos alterar a tabela para que seja exibida uma
obsercacao caso o contato tenha menos que 18 anos
Fazermos uso da Tag If

31 / 39
Programac
ao para Web

<c : f o r E a c h v a r=" ct " i t e m s="${ contato .


lista }" v a r S t a t u s=" id ">
<t r b g c o l o r="#${ id . count % 2 ==
0 ? aaee88 : ffffff }"
>
<td>$ { i d . c o u n t }</ td>
<td>$ { c t . nome}</ td>
<td>$ { c t . i d a d e }</ td>
<td><c : i f t e s t="${ ct .
idade < 18 }">
Menor de I d a d e</ c : i f >
</ td>
Calado
</Ivot r>

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Estruturas de controle

Semantica dos parametros

test: Recebe como parametro uma expressao a ser avaliada


como true ou false
Alem de testes diretos, operadores de EL podem ser utilizados
<c : i f t e s t="${ not empty variavel }">
</ c : i f >

32 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Estruturas de controle

Simulando o else

O JSTL nao possui uma tag else para complementar o if


Porem podemos utilizar a estrutura choose para este proposito
<c : c h o o s e>
<c : when t e s t="${ ct . idade < 18} ">
Menor de i d a d e
</ c : when>
<c : o t h e r w i s e>Maior de I d a d e</ c : o t h e r w i s e>
</ c : c h o o s e>

33 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Estruturas de controle

Exercicio para casa

Pesquisar sobre os demais operadores do EL

34 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Estruturas de controle

Exercicio

Adicione um atributo homepage `a classe Contato.


No metododo getLista de ContatoDao adicione para alguns
usuarios uma pagina de usuario
Altere o exemplo de listagem usando JSTL, adicionando uma
nova coluna
Caso o usuario possua a homepage definida exiba na coluna
correspondente como um link, caso contrario exiba a
mensagem Nao disponvel

35 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Estruturas de controle

Importando paginas
Um requisito comum que temos nas aplicac
oesWeb hoje em
dia e colocar cabecalhos e rodape nas paginas do nosso
sistema
Esses cabecalhos e rodapes podem ter informacoes da
empresa, do sistema e assim por diante
O problema e que, na grande maioria das vezes, todas as
paginas da nossa aplicacao precisam ter esse mesmo
cabecalho e rodapes
Para isso, podemos fazer uso de inclus
oes de arquivos para
possibilitar a inclusao de outras paginas ja existentes
<c : i m p o r t u r l=" cabecalho . jsp " />
36 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Estruturas de controle

Outras tags JSTL existentes

formatDate: possibilita formatar objetos do tipo Data sob os


mais diversos aspectos
curl: permite a localizacao simplificada de recursos dentro do
projeto
catch: bloco do tipo try/catch
c:forTokens: for em tokens (ex: a,b,c separados por vrgula)
c:out: sada
etc

37 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Introduc
ao

Servlet ou JSP?
Ao se trabalhar com Servlets e JSPs temos um tradeoff
Se utilizarmos apenas Servlets, o que acontece quando
precisamos mudar o design da pagina? O designer nao vai
saber Java para editar a Servlet, recompilar e coloca-la no
servidor
Imagine usar apenas JSP. Ficaramos com muito scriptlet, que
e muito difcil de dar manutencao. O JSP foi feito apenas
para apresentar o resultado, e ele nao deveria fazer acessos a
banco de dados e nem fazer a instanciacao de objetos. Isso
deveria estar em c
odigo Java, na Servlet

38 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Introduc
ao

Servlet ou JSP?
Ao se trabalhar com Servlets e JSPs temos um tradeoff
Se utilizarmos apenas Servlets, o que acontece quando
precisamos mudar o design da pagina? O designer nao vai
saber Java para editar a Servlet, recompilar e coloca-la no
servidor
Imagine usar apenas JSP. Ficaramos com muito scriptlet, que
e muito difcil de dar manutencao. O JSP foi feito apenas
para apresentar o resultado, e ele nao deveria fazer acessos a
banco de dados e nem fazer a instanciacao de objetos. Isso
deveria estar em c
odigo Java, na Servlet
Uma ideia mais interessante e usar o que e bom de cada um dos
dois!!
38 / 39
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Sintaxe JSP

EL e Taglibs

Model View Controller

Introduc
ao

Objetivo

O ideal entao e que a Servlet faca o trabalho arduo, a tal da


l
ogica de neg
ocio
E o JSP apenas apresente visualmente os resultados gerados
pela Servlet.

39 / 39
Programac
ao para Web

Ivo Calado

IFAL

Você também pode gostar