! " # $ % & ) *' + ( ( , ) . ' $ + ( ( + *' % / 0 12 - 12 ) ) 12 ' ) ) ) ( +3 % ) + (4 % *' ( 2 ( 5) ' % / % ' )1 % + % % 8) : 4 ; 6% 7 () * "( % 12 1% % 9 1 4 % % + 8) *' 3 " ( ) % + *' % 0 ' ( ' 4 5 % + 5 + % 4 % % ' ) % 4 + , )1 + <% ' ( 5 doPost() ) doGet() % ) + <% ' % % + response4request4out4session ) *% % 4 " + % <% ' 8) ( ) ) =) 8) <% ' > 5 + 5 4 ) 4 % + ) % 4 ) * ) % ( ' )1 % 5 ) % % % " ?% 12 ) 5 ! " " # $ %% ( # + ! 2 ,. 3 % $ $ & & ' )* *$ & /0 1+ " 3 " $/45 6, 7 " 2 $ 8% 9 & ) ' ! " 16, 7 " 1$/45 " " *' %) % 0 ) % " 1 5% ( @ & 1 5 ) 8B % % % ( % + ) + 4 % = % ') % 5 % % % A > 4 + 8) 1 8) ' 5 % *' 7 1. O cliente requisita 2. O servidor web uma página repassa-a ao contêiner Navegador do Servidor Web cliente 7. A resposta é retornada ao cliente Contêiner JSP em formato HTML 6. O servlet gera a resposta Servlet 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 ( ) ) % 1 ' :&D E + @JavaBeansA % +% " 1 ' ) ( @ % # % ) *' ) % 6 % @@& & ' + % (4 + < " A , %% ) A % % ' % % % + +% ' %+ ' $ % % 4 ) 4 5 ) ) % %) ' 1 % % 1 10 ! " C ) 1 " @ ) 1 A % ' % ) % % ) G % , +% % 5 4 0, % 4% ) " (E&4 ) F (E& 2 4 1 ) ) % E ') ' @0EA ) ) " 0E ) % ' ' % 1 $+ + % 8) 1 ) ( % 4 % (E& 11 " % D )% , % % ) % ) ) ( 45 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, * <%-- comentário --%> 2 <%= Math.sqrt(9) %> <% código java %> ( <%! int contador= 0 %> 12 <%@ atributo = valor %> + "12 <jsp:ação /> & ' <prefixo:elemento /> # @ & % +1 ' % 7 +% A 13 % $ FONTE: http://www.argonavis.com.br/cursos/java/j550/j550_9.pdf (slide 7) # $ # * ) *' ( % %) * ( + % 6% % * > :&D E <!-– comentário --> ) % *' ( <%-- comentário --%> *' + % 15 & ( <% ' + % *' :&D E % ') <%= Expressão %> H) % *' ) ( 5 % 5 % % ' )1 *' 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> Observe que não é desta mesma página. <hr> utilizado ; para </body> finalizar a expressão </html> 17 " # ) *' ) $ % , % ) ( # $ " + ) 8) 1 *' C 8) 1 ( 18 ( " # ? $ 1 Escopo de aplicação application H) 8) + ) ( % ) application % 9 % 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 javax.servlet.ServletConfig representa as opções de configuração JSP que podem ser especificadas em web.xml response Representa a resposta para o cliente. Normalmente é uma instância de javax.servlet.HttpServletResponse page Esse objeto java.lang.Object representa a referência this à instância JSP atual Esse objeto javax.servlet.jsp.JspWriter escreve out 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") %> As páginas JSP não fazem distinção em relação ao método de envio (GET ou POST </body> </html> ! " % # (% #$ & ' % ) 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 ' ) * escolheCor.jsp <%@ page language="java" %> <html> <head> <title>Escolha de cores</title> <% String cor = request.getParameter("cor"); if(cor == null) { %> </head> Scriptlets tem acesso as mesmas <body bgcolor="#FFFFFF"> variáveis de pré-definidas que as <% expressões } else { %> <body bgcolor="<%= cor %>"> <% } /* fim do else */ %> OBS: Colocar aqui um comentário de JSP </body> </html> (<%-- e --%>) ou (<!-- e -->) é um erro de sintaxe 25 ( & " % 12 % ) * @% % ) 4 8) % <%! %> A 5 % 5 % ( %) % " % 12 4 % ) 1 ) % , + ) % + +$') 4 , <%! int contador = 0; %> 26 ( & ) * <%@ page language="java" %> <html><head><title>Contador</title></head> Como são atributos podem ter <body bgcolor="#FFFFFF"> modificadores de acesso <%! int contador = 0; %> <b> Numero de acessos: <%= ++contador %> </b> </body> Cada vez que for acessado o seu </html> 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 & * % % % ) + 5 4? ? L $ % + ( ') ' ( 8) *' ') ') <%@ diretiva (atributo =“valor”)* %> Indica zero ou mais atributo 28 ( ) % page include taglib % % * + ) % ) ) ; *' 8) + % *' ' ) % ) 29 page ( 9 % % ) %+ 48) ) ) % & ) +* 5 % % ) % IJ + MN + MN ' MN ) + % 48) % ) *' +* % % ) ' # page + + page O4 + ON N N JK % 4 %8) ) 30 ( page )+ * info="Página Exemplo" default: texto vazio language="java" default: java contentType="text/html; charset=ISO-8859-1" (default) extends=“MyHttpJspBase" default: nenhum import="java.io.*, java.net.*" default: java.lang, ... session="true" (default) buffer="8kb" default autoFlush="true" (default) isThreadSafe="true" (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, ; + Envia usando caracter chines simplificado <%@ page contentType =“text/html;charset=GB2312“ %> 32 page ( " ) extends 0 % 8) %) % > , + ) " + 1 % + % * ) ( % > & ( % % % ) 1 *' 8) % ) 5 ) extends )% % %% 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; public class Usuario { private String login; private String senha; private static int codigoGeral; private int codigo; + ; :3-6< = : : 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 importa todas as classe do pacote empresa <%@ 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") %> Usando EL <% Login:{usuario.login} Senha:{usuario.senha} Usuario usuario = new Usuario( request.getParameter("login"), request.getParameter("senha")); out.println("<br> Código do usuário" + usuario.getCodigo()); %> </body></html> 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) *' % *' $ ) #+ 1 % ) session 8) * 4 $+ *' % 8) % % ) ) ) 5 PtrueQ ) % <%@ page session = “false” %> 37 page ( " ) buffer 0 % +% H) 0, ) % *' % ' 8) #+ ) % 45 % ) 4 4 + % % RS3 A saída é imediatamente enviada ao cliente <%@ page buffer = “none“ %> Altera o tamanho do buffer para 16Kb <%@ page buffer = “16Kb“ %> 38 page ( " ) autoFlush 0 ) * ') % ) % $% % 8) % ) true4 + % *' % + + ) 4 % % false4 % ( ) *) , 1 ) % *' ) * % <%@ page autoFlush = “false“ %> 39 page ( " ) isThreadSafe 0 *' 8) 12 #+ +* ) % ) % % 1 % * 8) 12 1 % false4 % % % ') % ') ) % + 4 5 % 5 true <%@ page isThreadSafe = “false“ %> O servlet gerado irá implementar a interface javax.servlet.SingleThreadModel 40 page ( " " ) errorPage 0 ) )* *' ) ) *' ') *' *' 3 $ % 5) ) % % % % 8) , 12 4 exception % % % *' L * 1% ) 5 ' T * isErrorPage 0 + + 8) , 1 ' + '*+ 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> +! 0 <title>Página de Erro</title> true </head> <body bgcolor="#FFFFFF"> 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 D $ % %)1 ' ) % )$% * ) ( 6 + ?% % 8) D 6% ) 4E ' ) -CE % % "+ ) *' ) )% % 8BL = ' F file F 8) )$% <%@ 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 ( % 1 % <jsp:ação> % 5 > % 8) ) % % 1 4 + 1 </jsp:ação>4 % % ) , % % 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> Encaminha o processamento da solicitação para outra Servlet/JSP ou página estática. Termina a execução da JSP atual <jsp:param> 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, & % 1 7 % ' + % % <jsp:forward page = "forward2.jsp"> <jsp:param name = "date" value = “<%= new java.util.Date() %>"/> </jsp:forward> % (% 8 8 % 0 % 0 ' % '( ( % ( % ( % ' ' ' ' forward2.jsp forward2.jsp * 1 * 1 4 4 5 5 % (% % % 3 3 ( % (% ' ' ! 6 # 7 8 ' ! 6 # 7 8% %9 9 ' <jsp:forward> <jsp:forward>: : % ( % ' % ( % ' % % 3 4 3 4 5 5 49 -& <jsp:useBean> & 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 <jsp:setProperty> 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 <jsp:getProperty> Obtém uma propriedade na instância JavaBean especificada e converte o resultado em um string para sair na resposta 50 + %+ ? %) % % % % % + ) 1 8) +5 % % ) % 1 5 Apresentação ) 1 % <% ' Implementação Código de Elementos de Javabeans formatação HTML geração de conteúdo dinâmico 51 0 ' ( 1 8) ) 1 ( <% ' % <' % % *' (4 1 ' 1 % % % 8) 1 4% , % + ) 1 % % % 0 1 <' *' ( ) )* % % +3 52 0 % ) ) % % % % % 4 % % % % % G+ +* ) % 4 5 % 1 % ) ) % ) % ) 1 % % 53 + ') ') 1 % % ( 4 3 % % % " % % % 3 4 % % ) % L + 12 *+ ) % % 48) % )* ) 8) 5 % ) 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; $ % $ ( ( %% % % % % % ; # # $ 8 ;8 8 # # $ 8 ' $ : ' # # $ : 9 9 public class Usuario { private String login; 36 << = 36 =1 1 private String senha; & ' & ' private static int codigoGeral; private int codigo; public Usuario () {codigo = codigoGeral++; } public public public public public + +! ! String getLogin() { return login; } void setLogin(String login){this.login = login;} String getSenha() { return senha; } void setSenha(String senha){this.senha = senha;} 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 A % %% % % 57 % ! !# # '( ! * ) 10 > V( )1 % ') ' Usuario % + $ ' % ) 5 % 6% + ' + % )1 + +3 + % ) , 58 '( ! *2# ) 10 " $ )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 '( ! *2# ) 10 " $ )1 <%= usuario.getLogin() %> % A ação getProperty produz, de fato, um resultado na página de resposta ao usuário <jsp:getProperty name=“usuario” property = “login”/> " )1 <%= usuario.setLogin(request.getParameter("login"))%> % <jsp:setProperty name =“usuario” property = “login” 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 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 % 3 / ) 8) + % % 63 </jsp:useBean> id ="nomeDoObjeto“ class ="pacote.NomeDaClasse“ scope ="page|session|request|application"> </jsp:useBean> # ) P % +% % Q5 + 3 % 0 Page 9 + % # ) ) *' % ) ?% 8) % % 8) 8) % *' % PageContext % +% 5 5 8) % # *' ) % 5 , + % 64 0 % 8) "5 % % $+ % % *' 8) % 5 % ServletRequest 9 +* % 8) , ServletRequest4 % % ) % 5 % request.getAttribute(“nome”); 0 % "5 % % ' % % $+ % *' % ) % $+ % % *' 5 HttpSession4 % % % ) )* % ) % %)1 % * *' 65 0 % # 1 5 % % % 8) 8) # $+ % % *' ) # ServletContext4 % . % + % +% 5 % 1 ) % % 1 . +5 % ') 5 % application.getServletContext().getAttribute(“nome”); 66