Java Server Pages

40
Introdu¸c˜ ao Sintaxe JSP EL e Taglibs Model View Controller Programa¸c˜ ao para Web Java Server Pages (JSP) Ivo Calado Instituto Federal de Educa¸c˜ ao, Ciˆ encia e Tecnologia de Alagoas 29 de Janeiro de 2013 1 / 39 Ivo Calado IFAL Programa¸c˜ ao para Web

Transcript of Java Server Pages

Page 1: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Programacao para WebJava Server Pages (JSP)

Ivo Calado

Instituto Federal de Educacao, Ciencia e Tecnologia de Alagoas

29 de Janeiro de 2013

1 / 39 Ivo Calado IFAL

Programacao para Web

Page 2: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Roteiro

1 Introducao

2 Sintaxe JSP

3 EL e Taglibs

4 Model View Controller

2 / 39 Ivo Calado IFAL

Programacao para Web

Page 3: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Observacao sobre o conteudo

Parte deste material e baseada na apostila FJ-21 - Java paraDesenvolvimento Web desenvolvido pela Caelum(www.caelum.com.br)

3 / 39 Ivo Calado IFAL

Programacao para Web

Page 4: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Definicoes

Colocando o HTML no seu devido lugar

Ate agora, vimos que podemos escrever conteudo dinamicoatraves de Servlets

Porem, se toda hora criarmos Servlets para fazermos essetrabalho, teremos muitos problemas na manutencao dasnossas paginas e tambem na legibilidade do nosso codigo

Porque?

porque sempre aparece codigo Java misturado com codigo HTML.Imagine todo um sistema criado com Servlets fazendo a geracaodo HTML

4 / 39 Ivo Calado IFAL

Programacao para Web

Page 5: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Definicoes

Colocando o HTML no seu devido lugar

Em situacoes onde a presenca do codigo HTML e superior ado codigo Java precisamos de uma solucao que possibiliteinverter os papeis!

Ao inves de inserir codigo 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 Ivo Calado IFAL

Programacao para Web

Page 6: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Definicoes

Nosso primeiro exemplo

Vejamos o nosso primeiro exemplo em JSPbem-vindo.jsp

<html><body>

Bem v i n d o</body>

</ html>

Novidade?

Fica claro que uma pagina JSP nada mais e que um arquivobaseado em HTML, com a extensao .jspPodemos escrever tambem codigo Java, para que possamosadicionar comportamento dinamico em nossas paginas, comodeclaracao de variaveis, condicionais (if), loops (for, while)entre outros6 / 39 Ivo Calado IFAL

Programacao para Web

Page 7: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Definicoes

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

JSP" ; %>

<% out . 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!" ; %>

<st rong><%=d e s e n v o l v i d o%></ st rong><br /><% System . out . p r i n t l n ("Tudo foi executado!" ) ; %></body>

Porque a mensagem “Tudo foi executado!” nao foi exibida naresposta?

7 / 39 Ivo Calado IFAL

Programacao para Web

Page 8: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Definicoes

Sobre o codigo JSP

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

Existe um objeto out.println que ja envia a saıda direta para ousuario. Lembra algum outro objeto?

Chamada a System.out.println ira enviar a saıda para a saıdapadrao do servidor!

8 / 39 Ivo Calado IFAL

Programacao para Web

Page 9: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Definicoes

Objetos Implıcitos

Em JSP alguns objetos sao implıcitos

r e q u e s t H t t p S e r v l e t R e q u e s tr e s p o n s e H t t p S e r v l e t R e s p o n s eout JSPWriters e s s i o n H t t p S e s s i o na p p l i c a t i o n S e r v l e t C o n t e x tc o n f i g S e r v l e t C o n f i gpageContext PageContextpage HttpJspPage

9 / 39 Ivo Calado IFAL

Programacao para Web

Page 10: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Definicoes

Codigo HTML entre o codigo JSP

A logica do codigo JSP pode ser intercalada com codigoHTMLNo exemplo abaixo, tudo que estiver entre a definicao do loope o sımbolo de fechamento (}) sera repetido!

<body><% f o r ( i n t i = 0 ; i < 1 0 ; i ++) { %>

<!−− Fora do Codigo Java −−>Passou a q u i =

<%= i %><br />

<%} %></body>

10 / 39 Ivo Calado IFAL

Programacao para Web

Page 11: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Diretivas

Diretivas

Sao mensagens ao container JSP, contendo informacoes decomo 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: pageDiretiva de inclusao: includeDiretiva de taglib: taglib

11 / 39 Ivo Calado IFAL

Programacao para Web

Page 12: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Diretivas

A diretiva page

A diretiva page possibilita a configuracao de diversaspropriedades da pagina como contentType, buffer, import etc

<%@ page a t r i b u t o="valor"%>

Sao definidos 11 tipos de atributoslanguage: Nome da linguagem do script (padrao “Java”)info: String a ser recuperada via getServletInfocontentType: Tipo MIME identificando o tipo do conteudo e acodificacaoimport: analogo ao import numa classe Javasession: indica se a pagina participara do controle de sessaoerrorPage: pagina de erro a ser utilizada caso alguma excecaoseja lancada

12 / 39 Ivo Calado IFAL

Programacao para Web

Page 13: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Diretivas

A diretiva include

Permite a inclusao de conteudos de outros arquivos na paginaJSP

E util para inclusao de cabecalhos e rodapes de pagina, porexemplo

<%@ i n c l u d e f i l e ="arquivo.jsp"%>

A localizacao do arquivo e em relacao a JSP. Caso sejacolocado um / no comeco leva-se em consideracao o contextodo servidor. Mais a frente veremos uma maneira mais robustade trabalhar com localizacoes de recursos!

13 / 39 Ivo Calado IFAL

Programacao para Web

Page 14: Java Server Pages

Introducao 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 Ivo Calado IFAL

Programacao para Web

Page 15: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Sintaxe

Definicao de codigo

Existem tres formas de definir codigo em uma pagina JSP

Declaracoes: Permitem a definicao de variaveis e metodos

Expressoes: Converte o resultado do codigo em uma string aser anexada no codigo JSP

Scriptlets: Permitem a escrita de codigo fora de qualquermetodo a ser executado (analogo a um codigo JavaScript)

15 / 39 Ivo Calado IFAL

Programacao para Web

Page 16: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Sintaxe

Exemplo

Scriptlets

<%w h i l e ( i−− != 0) {

out . p r i n t l n ("Texto" ) ;}%>

Expressoes

Hoje s ao <%= getSystemTime ( ) %><br />

Declaracoes

<%!i n t i = 1 0 ;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 ( ) . t o S t r i n g ( ) ;}%>16 / 39 Ivo Calado IFAL

Programacao para Web

Page 17: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Sintaxe

Exercicio I: Criando uma lista de contatos

Crie uma classe chamada Contato, dentro de algum pacoteespecıficos

Adicione 3 atributos: Nome, Endereco e Idade

Crie uma classe ContatosDao com um metodolo que retorneuma lista de Contatos (pelo menos 5 elementos)

Com base no exemplo anterior, crie uma pagina JSP quecontenha uma tabela e cada coluna da tabela represente umcontato

Faca uso do Ctrl + espaco no Eclipse para importar o quefor necessario e veja como e feito o import

17 / 39 Ivo Calado IFAL

Programacao para Web

Page 18: Java Server Pages

Introducao 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 ocodigo Java e o HTML

Pelo que vimos ate agora isso foi obtido? Porque?

Nao! O codigo Java continua sendo misturado com HTML eum designer Web precisa entender logica de programacao

E existe hoje em dia no mercado muitas aplicacoes feitasinteiramente utilizando scriptlets e escrevendo codigo Java,PHP e outras no meio dos HTMLs

18 / 39 Ivo Calado IFAL

Programacao para Web

Page 19: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

EL: Expression Language

EL: Expression Language

Para remover um pouco do codigo Java que fica na paginaJSP, a Sun desenvolveu uma linguagem chamada ExpressionLanguage que e interpretada pelo servlet container

O acesso a expressoes e realizada a partir da estrutura ${expr}Vejamos como criar uma pagina que receba um parametro eexiba-o na tela

19 / 39 Ivo Calado IFAL

Programacao para Web

Page 20: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

EL: Expression Language

Exemplo EL

<body>Testando s e u s p a r a m e t r o s :<br /> A i d a d e e ${param . i d a d e } .</body>

param e um objeto nativo, assim como out que contem ummapa com parametros recebidos na requisicao

20 / 39 Ivo Calado IFAL

Programacao para Web

Page 21: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

EL: Expression Language

Exemplo: avaliacao de expressoes

<body><h2>Operadores de Comparacao</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 Ivo Calado IFAL

Programacao para Web

Page 22: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Taglibs

Motivacao

Comecamos a melhorar nossos problemas com relacao amistura de codigo Java com HTML atraves da ExpressionLanguage

No entanto, ela sozinha nao pode nos ajudar muito, pois elanao nos permite, por exemplo, instanciar objetos, fazerverificacoes condicionais (if else), iteracoes como em um for eassim por diante

Sendo assim, precisamos de um mecanismo baseado em tagspara representar nosso logica de negocio!

Para isso, fazemos uso das Taglibs

22 / 39 Ivo Calado IFAL

Programacao para Web

Page 23: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Taglibs

JavaBeans: acesso aos atributos

Antes de entrarmos diretamente em Taglibs precisamosaprender sobre Javabeans. Um Bean e um tipo de objetoJava, com construtor default e os respectivos getters e setters

Instancia-los na nossa pagina JSP nao e complicado. Bastautilizarmos a tag correspondente para essa funcao, que nonosso caso e a < jsp : useBean >

<jsp:useBeanid=”contato”class=”br.edu.ifal.pweb.classes.Contato”/>

Agora podemos fazer uso das expressoes EL para acessar o valor decontato. Exemplo: ${contato.nome}

23 / 39 Ivo Calado IFAL

Programacao para Web

Page 24: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Taglibs

JavaBeans

No nosso exemplo, os atributos de Contato foram definidoscomo privados mas estamos conseguindo acessa-los. Por queisso?

Na verdade nao estamos acessando o atributo privado.Quando fazemos contato.nome o container implicitamentechama o metodo getNome

24 / 39 Ivo Calado IFAL

Programacao para Web

Page 25: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Taglibs

JavaBeans: Modificando propriedades

Para modificar uma propriedade em um bean, fazemos uso dapropriedade 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" va lue="Rua das

casas" name="contato" />

Nome = ${ c o n t a t o . nome} <br />Endere co = ${ c o n t a t o . e n d e r e c o }</body>

25 / 39 Ivo Calado IFAL

Programacao para Web

Page 26: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

JSTL

JavaServer Pages Standard Tag Library

JSTL e a API que encapsulou em tags simples toda afuncionalidade que diversas paginas Web precisam

Exemplos de funcionalidades incluem: controle de lacos (fors),controle de fluxo do tipo if else, manipulacao de dados XML ea internacionalizacao de sua aplicacao

Existem ainda outras partes da JSTL, por exemplo aquela queacessa banco de dados e permite escrever codigos SQL nanossa pagina. Mas se o designer nao compreende Java o quediremos de SQL? O uso de tal parte da JSTL e desencorajado.

26 / 39 Ivo Calado IFAL

Programacao para Web

Page 27: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

JSTL

Instalacao do JSTL

Para instalar a implementacao mais famosa da JSTL bastabaixar a mesma no site https://jstl.dev.java.net/

Adicionar as libs no diretorios libs do projeto

Para removermosas as notificacoes 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 Ivo Calado IFAL

Programacao para Web

Page 28: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Estruturas de controle

forEach

A JSTL core disponibiliza uma tag chamada c:forEach capazde iterar por uma colecaoNo c:forEach, precisamos indicar a colecao na qual vamositerar, atraves do atributo items e tambem como chamara oobjeto que sera atribuıdo para cada iteracao no atributo var.

<c : f o r E a c h var="ct" i t e m s="${contato.lista}" v a r S t a t u s="id">

<t r bgco lor="#${id.count % 2 == 0 ? ’aaee88 ’ : ’ffffff ’

}"><td>${ i d . count }</ td><td>${ c t . nome}</ td><td>${ c t . i d a d e }</ td></ t r></ c : f o r E a c h>

28 / 39 Ivo Calado IFAL

Programacao para Web

Page 29: Java Server Pages

Introducao 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 Ivo Calado IFAL

Programacao para Web

Page 30: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Estruturas de controle

Exercıcio

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

30 / 39 Ivo Calado IFAL

Programacao para Web

Page 31: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Estruturas de controle

Criando Ifs

E se quisermos alterar a tabela para que seja exibida umaobsercacao caso o contato tenha menos que 18 anosFazermos uso da Tag If

<c : f o r E a c h var="ct" i t e m s="${contato.lista}" v a r S t a t u s="id">

<t r bgco lor="#${id.count % 2 == 0 ? ’aaee88 ’ : ’ffffff ’

}"><td>${ i d . count }</ 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></ t r></ c : f o r E a c h>

31 / 39 Ivo Calado IFAL

Programacao para Web

Page 32: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Estruturas de controle

Semantica dos parametros

test: Recebe como parametro uma expressao a ser avaliadacomo 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 Ivo Calado IFAL

Programacao para Web

Page 33: Java Server Pages

Introducao 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 : choose><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 : choose>

33 / 39 Ivo Calado IFAL

Programacao para Web

Page 34: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Estruturas de controle

Exercicio para casa

Pesquisar sobre os demais operadores do EL

34 / 39 Ivo Calado IFAL

Programacao para Web

Page 35: Java Server Pages

Introducao 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 algunsusuarios uma pagina de usuario

Altere o exemplo de listagem usando JSTL, adicionando umanova coluna

Caso o usuario possua a homepage definida exiba na colunacorrespondente como um link, caso contrario exiba amensagem “Nao disponıvel”

35 / 39 Ivo Calado IFAL

Programacao para Web

Page 36: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Estruturas de controle

Importando paginas

Um requisito comum que temos nas aplicacoesWeb hoje emdia e colocar cabecalhos e rodape nas paginas do nossosistema

Esses cabecalhos e rodapes podem ter informacoes daempresa, do sistema e assim por diante

O problema e que, na grande maioria das vezes, todas aspaginas da nossa aplicacao precisam ter esse mesmocabecalho e rodapes

Para isso, podemos fazer uso de inclusoes de arquivos parapossibilitar a inclusao de outras paginas ja existentes

<c : i m p o r t u r l="cabecalho.jsp" />

36 / 39 Ivo Calado IFAL

Programacao para Web

Page 37: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Estruturas de controle

Outras tags JSTL existentes

formatDate: possibilita formatar objetos do tipo Data sob osmais diversos aspectos

curl: permite a localizacao simplificada de recursos dentro doprojeto

catch: bloco do tipo try/catch

c:forTokens: for em tokens (ex: “a,b,c” separados por vırgula)

c:out: saıda

etc

37 / 39 Ivo Calado IFAL

Programacao para Web

Page 38: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Introducao

Servlet ou JSP?

Ao se trabalhar com Servlets e JSPs temos um tradeoff

Se utilizarmos apenas Servlets, o que acontece quandoprecisamos mudar o design da pagina? O designer nao vaisaber Java para editar a Servlet, recompilar e coloca-la noservidor

Imagine usar apenas JSP. Ficarıamos com muito scriptlet, quee muito difıcil de dar manutencao. O JSP foi feito apenaspara apresentar o resultado, e ele nao deveria fazer acessos abanco de dados e nem fazer a instanciacao de objetos. Issodeveria estar em codigo Java, na Servlet

Uma ideia mais interessante e usar o que e bom de cada um dosdois!!

38 / 39 Ivo Calado IFAL

Programacao para Web

Page 39: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Introducao

Servlet ou JSP?

Ao se trabalhar com Servlets e JSPs temos um tradeoff

Se utilizarmos apenas Servlets, o que acontece quandoprecisamos mudar o design da pagina? O designer nao vaisaber Java para editar a Servlet, recompilar e coloca-la noservidor

Imagine usar apenas JSP. Ficarıamos com muito scriptlet, quee muito difıcil de dar manutencao. O JSP foi feito apenaspara apresentar o resultado, e ele nao deveria fazer acessos abanco de dados e nem fazer a instanciacao de objetos. Issodeveria estar em codigo Java, na Servlet

Uma ideia mais interessante e usar o que e bom de cada um dosdois!!

38 / 39 Ivo Calado IFAL

Programacao para Web

Page 40: Java Server Pages

Introducao Sintaxe JSP EL e Taglibs Model View Controller

Introducao

Objetivo

O ideal entao e que a Servlet faca o trabalho arduo, a tal dalogica de negocio

E o JSP apenas apresente visualmente os resultados geradospela Servlet.

39 / 39 Ivo Calado IFAL

Programacao para Web