!
" # $ %&'( ) *' ( +,)+ ( - $ (+*'.%/ 0 12 ' ( %+ -12 )+3 ) (4 )) ) % 12 ) *' ( 2
(5) '%'1%6% %/ )1%12 74 % +1%() %% % *8) + 9 "(:4 8) % ; *' 3
"( % '% + 4% % ) +' 455 %' 4 *' ( +% ) + %,)1 0 +<%' (5 +<%'%% dopost() )doget()%) + response4request4out4session) *%% 4
" %<%'=) )% 4 + 8)( 8) ) ) <%' ) >5 *)%"?% + ' ( 5 4 )1%12 ) 4% %) % + 5)% 5
! " " # $%$&' # %%($&)**$&) +!,- &- ' "./01+" 2 3 3 " $/456,7" 2$8% 9! 16,71$/45" "
" *' (%+ %)% ) +4 ')% % =% 0 15% %%% ) %(@& 5A " 15 > ) 8B 48) 15 %% +8)'% %*' 7
Navegador do cliente 1. O cliente requisita uma página 7. A resposta é retornada ao cliente em formato HTML 6. O servlet gera a resposta Servidor Web Servlet 2. O servidor web repassa-a ao contêiner Contêiner JSP 5. O contêiner executa o servlet 3. A página JSP é transformada em um Servlet, se o servlet não existir ou for mais antigo Tradutor de página JSP em Servlet (Jasper) 4. O servlet gerado e compilado é repassado ao conteiner Fica totalmente transparente para o desenvolvedor de aplicações e para o usuário que requisitou a página. Resulta em velocidade de execução (para acessos repetidos) superior a outras tecnologias similares (ASP, PHP) 8
!"" #(4 +45) 1 ) %) % 004(%+) +)% ) 1 ), ( +%%, "?%+4 %8) +% )1%*' 9
!"" C)1 ( ) )%' :&D E 1 +@JavaBeansA % +% " 1(@ A,%% ) ' ) % @&' &'A #% +% % % ' %% ) *'(4+ %% ++% ) < ' " % %+ $ 4 )) ) '% 6 %' %% 45 %%)1% 1 10
!"" C)1@)1A %') %1 %%) %' %F (E& G' 4% 2 4 1 %,) +%% ) "(E&4 5 4) ) % 0, E')'@0EA + ) ) "0E ) % 1( 4 % % $+ 8) )%(E& 11
" %%) (45 D)%, %) 8)+:&D E %) ) +%8) ) ( G% 4*' * % ) + 0, <html><head><title>primeiro Exemplo</title></head> <body> <strong>seu número da sorte é:</strong> <%= (int)(java.lang.math.random()*1000) %> </body> </html> 12
#$ * 0, 2 ( 12 + "12 &' <%-- comentário --%> <%= Math.sqrt(9) %> <% código java %> <%! int contador= 0 %> <%@ atributo = valor %> <jsp:ação /> <prefixo:elemento /> # +1&% % +% @ ' 7 A 13
% $ FONTE: http://www.argonavis.com.br/cursos/java/j550/j550_9.pdf (slide 7)
#$ # * ) *'(% %) * :&D E<!- comentário --> (+% ) % 6%%*' * (<%-- comentário --%> >*'+% 15
& (<%'+ % *':&D E% ') <%= Expressão %> H)%*'5 % )15,)% )%5 %*' ) (' %) 0, <%= (int)(mah.random()*1000) %> %, 2 % ) 5 %% 16
&' <%@ page import="java.util.date,java.text.dateformat" %> <html> <body> <h1>exemplo Scriptlet<hr></h1> <P>Hoje é dia <%= DateFormat.getDateInstance().format(new Date ()) %> <P> Também temos uma versão <a href="servlet/hello">servelt</a> desta mesma página. <hr> </body> </html> Observe que não é utilizado ; para finalizar a expressão 17
" # $ ) ) % +,%) *'( # $ ) 8) "1 *' C8) 1 ( 18
(" #? $ 1 Escopo de aplicação application H)8) +)(% ) 9 %application% javax.servlet.servletcontext Escopo de solicitação (requisição) request Representa a solicitação do cliente. O objeto é uma instância de uma classe que implementa HttpServletRequest (pacote javax.servlet.http) Existem até o fim da solicitação 19
(" #? $ 1 Escopo de página config response page out javax.servlet.servletconfig representa as opções de configuração JSP que podem ser especificadas em web.xml Representa a resposta para o cliente. Normalmente é uma instância de javax.servlet.httpservletresponse Esse objeto java.lang.object representa a referência this à instância JSP atual Esse objeto javax.servlet.jsp.jspwriter escreve texto como parte da resposta a uma solicitação. É utilizado implicitamente com expressões JSP e ações que inserem conteúdo de um string em uma resposta 20
(" #? $ 1 Escopo de página (continuação) pagecontext Cada página tem suas próprias instâncias dos objetos implícitos de escopo de página javax.servlet.jsp.pagecontext fornece acesso aos objetos implícitos discutidos nessa tabela exception java.lang.throwable representa a exceção que é passada à página de erro de JSP. Disponível somente em uma página de erro JSP Escopo de sessão session Existem para toda a sessão de navegação do usuário javax.servlet.http.httpsession representa as informações de sessão de cliente se tal sessão foi criada. Esse objeto está disponível somente nas páginas que participam de uma sessão
<%@ page language="java" %> <html> <head><title>recebe dados de formulário</title></head> <body> Informações enviadas de:<%= request.getremotehost() %> <br> Login: <%= request.getparameter("login") %> <br> Senha: <%= request.getparameter("senha") %> </body> </html> As páginas JSP não fazem distinção em relação ao método de envio (GET ou POST! "#$ % &' % #(% ) 22
# %<%'% % IJ JK &%<%' % ) 5 % 5% +@A%(+ 23
' escolhacor.html <html> <head> <title>selecione uma Cor</title> </head> <body> <form name="form1" method="post" action="escolhecor.jsp"> <p> <strong>escolha um cor:</strong> <select name="cor"> <option value="green"> verde </option> <option value="blue > azul </option> <option value="red > vermelho </option> </select> </p> </form> </body> </html> 24
') * <%@ page language="java" %> <html> <head> <title>escolha de cores</title> <% String cor = request.getparameter("cor"); if(cor == null) { %> </head> <body bgcolor="#ffffff"> <% } else { %> <body bgcolor="<%= cor %>"> <% } /* fim do else */ %> </body> </html> escolhecor.jsp Scriptlets tem acesso as mesmas variáveis de pré-definidas que as expressões OBS: Colocar aqui um comentário de JSP (<%-- e --%>) ou (<!-- e -->) é um erro de sintaxe 25
(&) * " %12 @% % <%! %> A %) 5% 4 5% % 8) ( %)% " %12 ),+ 4%1%) %+ ) +$')4, <%! int contador = 0; %> 26
(&) * <%@ page language="java" %> <html><head><title>contador</title></head> <body bgcolor="#ffffff"> <%! int contador = 0; %> <b> Numero de acessos: <%= ++contador %> </b> </body> </html> Como são atributos podem ter modificadores de acesso Cada vez que for acessado o seu valor será incrementado Se este fragmento de código for alterado por: <% int contador = 0 %>. Quando recarregamos a página o contador não será mais incrementado, mantendo sempre o seu valor em 1. Isto ocorre pois todo código inserido em um scriplet é colocado no método service() da Servlet. 27
() * " %+ % %% ' %*'( 8) % % )%)1 ) + &54? L( $ 8)*' %+ ') (') ') <%@ diretiva (atributo = valor )* %> Indica zero ou mais atributo 28
() * %+ page) % ;*' include)) 8)+ *' taglib%%' ) % %) 29
(page 9% ) %+ ) 48) % )) % +* %+ page ) *' & 5 % + +* ) %%) %+ page IJ ' MN MN+ +O4 O4+ + ON MN MN N ' MN N NJK # ) 48)% % 4%8) ) +% 30
(page )+* info="página Exemplo" language="java" contenttype="text/html; charset=iso-8859-1" extends= MyHttpJspBase" import="java.io.*, java.net.*" session="true" buffer="8kb" autoflush="true" isthreadsafe="true" default: texto vazio default: java (default) default: nenhum default: java.lang,... (default) default (default) (default) errorpage="/erros/404.jsp" default: nenhum 31
(page ")language 0 %')' )% @ )+ A*'( %45+ <%@ page language = Java %> ")contenttype?%%6%d?d 0% ; 1%8)*'#%5+ text/html; charset=iso-8859-1 0, <%@ page contenttype = text/html;charset=gb2312 %> Envia usando caracter chines simplificado 32
(page ")extends 0 %8)*'( %)% + *%% >, ) +% ) " 1(% 8))extends %+ )% ) )%% %1>& 5 %% HttpJspBase 33
(page ")import -%8) % *'( ) #+% )5 java.lang.*, javax.servlet.*, javax.servlet.jsp.*, javax.servlet.http.* % +4 %) ) %+4 * +$') <%@ page import = java.net.*, java.io.* %> 34
!(% *% + package empresa; :!#:;:3-6<=:: public class Usuario { private String login; private String senha; private static int codigogeral; private int codigo; } public Usuario(String login, String senha) { this.login = login; this.senha = senha; } public String getlogin() { return login; } public String getsenha() { return senha; } public int getcodigo() { return codigo; } public void setlogin(string login) { this.login =login; } public void setsenha(string senha) { this.senha = senha;} 35
<%@ page language="java" %> <%@ page import = "empresa.*" %> <html> <head> <title>recebe dados</title></head> <body> Informações enviadas de:<%= request.getremotehost()%> Login: <%= request.getparameter("login") %> Senha: <%= request.getparameter("senha") %> <% Usuario usuario = new Usuario( request.getparameter("login"), request.getparameter("senha")); out.println("<br> Código do usuário" + usuario.getcodigo()); %> </body></html> importa todas as classe do pacote empresa Usando EL Login:{usuario.login} Senha:{usuario.senha} O código do usuário será mostrado na página. Cada vez que a página for recarregada um novo código será 36 gerado
(page ")session?% *'%) H)%*'%) 4 $session * $+ )18)*' #+% )5PtrueQ 8) )) % % <%@ page session = false %> 37
(page ")buffer 0 %))% +%*' H)%' %)4 4 8) 45+% #+% +%%RS3 0, A saída é imediatamente enviada ao cliente <%@ page buffer = none %> Altera o tamanho do buffer para 16Kb <%@ page buffer = 16Kb %> 38
(page ")autoflush 0 ) *% ) )( ')% true4+% +%4 )% $%%*'%+ +% 8) ) % false4*),1 %)) ) %*' * % <%@ page autoflush = false %> 39
(page ")isthreadsafe 0 *'% +* 8) 12 ) %%false4 ) 1%* %%%+4 ) 8) 12 %')%5 % 1 ') #+%5true <%@ page isthreadsafe = false %> O servlet gerado irá implementar a interface javax.servlet.singlethreadmodel 40
(page ")errorpage 0 ) *'+ 8) * % ))* '),1 % *' ")iserrorpage 0 *'5) *'% 8) * +%) L%,12 4 % exception 1% *'%) 3$ % 5 ' '*+ ) )* T '+ 8)+ %' 41
', testapaginaerro.jsp <%@ page language="java" errorpage="exemplopaginadeerro.jsp" %> <html> <head> <title>dados de Formulário</title> </head> <body bgcolor="#ffffff"> <% String login = request.getparameter("login"); int idade = Integer.parseInt( request.getparameter("idade")); %> Login: <%= login %> <br> Idade: <%= idade %> </body> </html> # ** >?,%-' ' %. 42
' <%@ page language="java" iserrorpage="true" %> <html> <head> <title>página de Erro</title> </head> <body bgcolor="#ffffff"> /(% +!0 true exception Ocorreu um erro no preenchimento do formulário<br> O problema detectado foi o seguinte: <P> <%= exception %> </body> </html> 1% -2 &-' 43
(include )$* "%+include )6%%)) ) +4 %%)1%( D ' )$% 6 +?%%8)%6%)% 8BL D ) 4E' "+ %=' ) ) )F file F 8) -CE%*' )$% <%@ include file = "banner.html" %> 44
()$* 0 5% ) % <%' 8)% ) ) *' ( <tr> <td> <%@ include file = "toc.html" %></td> <td> <%@ include file ="clock2.jsp"%></td> </tr> Confira o exemplo: includedirective.jsp 45
-&& G % ++% +* % ) % ) *'( # L %( 12 % 1 (% % <jsp:ação> </jsp:ação>4 %1 5 %1% > 8)% % )14% ),% +%UD E<jsp:ação /> 46
-<jsp:include> ).* <jsp:include> Inclui dinamicamente outro recurso em uma JSP Exemplo: <td><%-- inclui toc.html nesta página --%> <jsp:include page = "toc.html" flush = "true" /> </td> <td><%-- inclui clock2.jsp nesta página --%> <jsp:include page = "clock2.jsp" flush = "true" /> </td> Confira o exemplo: include.jsp A diferença entre a diretiva include e a ação <jsp:include> só é notável se o conteúdo incluído se alterar 47
-&<jsp:forward> <jsp:forward> <jsp:param> Encaminha o processamento da solicitação para outra Servlet/JSP ou página estática. Termina a execução da JSP atual Utilizada com as ações include, forward e plugin para especificar pares de informações de nome/valor adicionais a serem utilizados por essas ações 48
-&& 0,%17% -' %% + <jsp:forward page = "forward2.jsp"> <jsp:param name = "date" value = <%= new java.util.date() %>"/> </jsp:forward> 8 8 %0 -' (% (% -' -' forward2.jsp - - % (% *1 % 3 3 45 (% -'!6#78!6#78 %9-' <jsp:forward>: % % (% (% -' -' % 3 45 45 49
-&& <jsp:usebean> <jsp:setproperty> <jsp:getproperty> Especifica se a JSP utiliza uma instância JavaBean. A Ação especifica o escopo do bean e lhe atribui um ID que os componentes de script podem utilizar para manipulá-lo Configura uma propriedade especificada. Um recurso especial dessa ação é a correspondência automática de parâmetros da solicitação para as propriedades bean do mesmo nome Obtém uma propriedade na instância JavaBean especificada e converte o resultado em um string para sair na resposta 50
+ %)%% )1 +5 % %% 8)% )% %+ %1? + 5 )1%<%' Apresentação Implementação Código de Elementos de Javabeans formatação HTML geração de conteúdo dinâmico 51
0 ( 8)<%' %<'% ' 1 % *'(4 ) 1' 1 1 ( %%%1% 8) <'% 14%,%*'( + )1% %% ) )* 0 +3 52
0 )%% % %%%) % 4 % ) )%% % % G+ )1 )1% +* % ) 45%)1 )1 %% % 53
+ ') ') +12 % 1 4 % %% )*+ ( % 4 )% %% L348) )* %%% " %% ) 8)5 % %3 ) 54
1- *'(@3 A %% %) )*@ %- )3 A ) %- ) <html><head><title>cadastro de Usuario</title></head> <body> <form name="form1" method="post" action="recebebean.jsp"> Nome: <input name="login" type="text" id="login"> Senha: <input name="senha" type="text" id="senha"> <input type="submit" name="submit" value="enviar"> </form> </body> </html> 55
'(! $(%% % % %-' #$: package empresa; 9 ;8##$8 public class Usuario { +! +! private String login; 3-6<=1 private String senha; & & -' private static int codigogeral; private int codigo; public Usuario () {codigo = codigogeral++; } } public String getlogin() { return login; } public void setlogin(string login){this.login = login;} public String getsenha() { return senha; } public void setsenha(string senha){this.senha = senha;} public int getcodigo() { return codigo; } 56
'(!$ )/0* <%@ page language="java" %> <%@ page import="empresa.usuario" %> <html> <head> <title>recebe dados</title></head> <body> # <% % % Usuario usuario = new Usuario(); # %% usuario.setlogin(request.getparameter("login")); @ usuario.setsenha(request.getparameter("senha")); %> <BR> Login : <%= usuario.getlogin() %> <BR> Senha : <%= usuario.getsenha() %> <BR> Código: <%= usuario.getcodigo()%> </body> </html> A %% %!# 57
'(!$ )10* >V()1% '% %')' + Usuario ) 5% 6% + )1+ +' % +3 + % ), 58
'(!$ )10*2# " )1 Usuario usuario = new Usuario(); % <jsp:usebean id= usuario class= Usuario /> (8) 5 8)% % %) ) )'% ') <jsp:usebean id = usuario class = Usuario type = Object /> 59
'(!$ )10*2# A instrução: <jsp:usebean id= usuario" class= Usuario" scope="request" /> Corresponde a (em mais detalhes): <% Object obj = request.getattribute("usuario"); Usuario usuario = null; if (obj == null) { usuario = new Usuario(); request.setattribute( usuario", usuario); } else { usuario = (Usuario)obj; } %> 60
'(!$ )10*2# " )1 <%= usuario.getlogin() %> % <jsp:getproperty name= usuario property = login /> " )1 <%= usuario.setlogin(request.getparameter("login"))%> % <jsp:setproperty name = usuario property = login A ação getproperty produz, de fato, um resultado na página de resposta ao usuário não gera qualquer conteúdo na página, apenas altera o valor da propriedade do objeto Java value= <%= request.getparameter("login") %> /> 61
'(!$ )10* <%@ page language="java" %> <html> <head> <title>recebe Dados - Vesão 2</title> </head> <body> <jsp:usebean id="usuario" class ="empresa.usuario" /> <jsp:setproperty name="usuario" property="login" param = "login" /> <jsp:setproperty name="usuario" property="senha" param = "senha"/> Login : <jsp:getproperty name="usuario" property = "login" /> Senha : <jsp:getproperty name="usuario" property = "senha" /> </body> </html>.## % %&?8.?+ % % + >?@ %# 62
'(!$ )30* % / %, ') %% % % %)#% )12 <jsp:setproperty name="usuario" property="login" param = "login" /> <jsp:setproperty name="usuario" property="senha" param = "senha"/> % ) )$% <jsp:setproperty name = "usuario" property ="*" /> 0 )1)+ % % / 8) % 3 63
</jsp:usebean> id ="nomedoobjeto class ="pacote.nomedaclasse scope ="page session request application"> </jsp:usebean> #)P Q5 % %+%%+3 0 Page9+%)?%8)% %%8)8)%*' 8)8)%*'# 5 %%PageContext # ) %+% 558)*',% ) %) + *' 64
0 %8) "5 % % $+%%*' 8) %5%ServletRequest9 +*%8), ServletRequest4 %% )% 5% request.getattribute( nome ); 0 % "5 % % $+%%*'5 %%HttpSession4% % $+%% %) )* *'%) * '%) %%)1%*' 65
0 %1 # 5%%ServletContext4 %% % $+%%1.% 8)8)*'+ # ) %+% 5 %1. # % )% +5 % ') 5% application.getservletcontext().getattribute( nome ); 66