Curso de JSP Básico Camilo Porto Nunes http://www.lsi.dsc.ufcg.edu.br/ SUMÁRIO • • • • • • • Introdução Estrutura de uma página JSP Diretivas Scripting elements Standard Actions Implicit Objects Tratamento de parâmetros e formulários • Estudo de caso INTRODUÇÃO • Explicação baseado em uma aplicação simples de cadastro de livros. • Aplicação permite inserir/pesquisar/remover livros em um banco de dados. • Esquema do banco de dados: • Livro ( isbn NUMBER(12) PRIMARY KEY, titulo VARCHAR2(70) NOT NULL, autor VARCHAR2(70) NOT NULL, categoria VARCHAR2(70) NOT NULL ); INTRODUÇÃO • O esquema de páginas da aplicação é o seguinte: INTRODUÇÃO • JSP = Java Server Pages • Tecnologia para criação de páginas web dinâmicas. • O que é uma página web dinâmica? • - “São páginas que geram o seu conteúdo HTML dinamicamente, de acordo com alguma entrada recebida”. • Exemplos? INTRODUÇÃO • Como isso é feito com JSP? • Semelhante à um programa comum, ESCRITO EM PURO JAVA (recebe uma entrada, e produz saídas, possivelmente diferentes, baseado nas entradas recebidas). • Exemplo: ... String helloMsg = in.readLine(); System.out.println(“Hello World! ”+helloMsg); ... INTRODUÇÃO • EXEMPLO JSP: ... <% String helloMsg = request.getParameter(“helloMsg”); %> <b>Hello World! <%=helloMsg%> </b> ESTRUTURA DA PÁGINA ESTRUTURA DA PÁGINA • Uma página JSP pode ser dividida, basicamente, nas seguintes partes: • Cabecalho: inclui diretivas que informam alguns atributos da página bem como algumas configurações (imports, contentType, página de erro...) • Declarações: inclui declarações de métodos, atributos, constantes, etc. • Corpo da página: inclui o código que irá gerar o html dinâmico ESTRUTURA DA PÁGINA • O corpo da página pode combinar: – HTML estático; – Código JAVA puro, ou scriptlets: <%...%> – Diretivas: <%@.....%> – Expressões: <%=.......%>) – Actions: <jsp:include../> dentre outras... – Qualquer outro tipo de conteúdo estático: (JavaScript, SVG, XML, etc...). • Iremos nos aprofundar nos elementos estruturais da página ao longo do curso. ESTRUTURA DA PÁGINA • DIRETIVAS: • Page • Define alguns atributos importantes para a página – Language: Linguagem de script a ser utilizada (default = JAVA) – Extends: pouco usado... – Import: Lista de classes importadas a serem utilizadas na página – Session: (true/false) especifica se a página faz parte da sessão do usuário (objeto session disponível ou não) ESTRUTURA DA PÁGINA • Diretiva Page (cont...) – Buffer: tamanho do buffer a ser utilizado (default 8Kb) – errorPage: especifica uma URL para uma página de tratamento de erros. – isErrorPage: informa se a página é de tratamento de erro ou não. – contentType: define o contentType da página (XML, text, HTML, etc..) • Dentre outros.... ESTRUTURA DA PÁGINA • Diretiva INCLUDE: • Inclui o conteúdo de um arquivo no local da definição da diretiva .... <%@ include file=“file.html” %> ... • Isso ocorre na primeira vez que a página for requisitada. ESTRUTURA DA PÁGINA • Diretiva TAGLIB • Insere uma tag customizada (definida pelo programador) para ser acessível na página. ESTRUTURA DA PÁGINA • Scripting Elements • DECLARAÇÕES: • Bloco de código JAVA que define variáveis, constantes e métodos referentes a página. É definido entre os símbolos <%! e %> • Exemplo: <%! int numTimes=0; public String sayHello(String name) { return “Hello “+name+”!”; } %> ESTRUTURA DA PÁGINA • Scriptlets • Bloco de código JAVA que será executado durante a requisição à página. • Exemplo: <% for (int i=0; i<10; i++) out.println(“<b> i= “+i+”</b><br>”); %> ESTRUTURA DA PÁGINA • Expressões • Notação simples para scriptlets que serão avaliados e retornarão seus valores ao cliente. • Exemplo: ... int numTimes; ... <b> Esta página foi acessada <%=numTimes++%> </b> STANDARD ACTIONS STANDARD ACTIONS • São tags XML que afetam o comportamento de tempo de execução da página, e oferecem outra alternativa de implementar tarefas freqüentemente executadas (Bean Access). • Mais importantes: • Include, forward, useBean, getProperty, setProperty STANDARD ACTIONS • É uma boa opção para separar código Java da apresentação. • Pode-se elaborar uma página JSP inteira apenas com tags XML, sem precisar escrever uma única linha de código em Java... STANDARD ACTIONS • <jsp:useBean> • Equivalente a new Object() • Syntax: • <jsp:useBean param1=“value1”...> STANDARD ACTIONS • useBean – Parâmetros • Id: identificador da instância do objeto. • Scope: visibilidade do objeto • Class: nome completo da classe da instância • beanName: define o nome para referenciar o bean através do método instatiate() da classe java.beans.Beans. STANDARD ACTIONS • Type: tipo a ser tratado o objeto (especifica um CAST para o tipo definido). Pode gerar ClassCastException STANDARD ACTIONS • <jsp:getProperty>, <jsp:setProperty> • Semelhante a métodos getXX() e setXX() de um objeto Java. • Recuperam/Alteram valores das propriedades de Beans. • Podem ser usada em conjunto com <jsp:useBean> para iniciar as propriedades do Bean STANDARD ACTIONS • GetProperty (Principais parâmetros) • Name: nome do bean (id do useBean, não confundir com <useBean.. name=””/>). • Property: nome da propriedade. STANDARD ACTIONS • SetProperty (Principais Parâmetros) • Name: nome do Bean (id do useBean) • Property: propriedade a ser alterada. • Value: novo valor da propriedade • Param: associa o valor do parâmetro da requisição especificado ao valor da propriedade STANDARD ACTIONS • Exemplos de useBean + get/setProperty. ... <jsp:useBean id=”myBean” class=”org.MyBean”> <jsp:setProperty name=”myBean” property=”nome” value=”Camilo Porto”> </jsp:useBean> STANDARD ACTIONS • Exemplos de useBean + get/setProperty. ... <jsp:useBean id=”myBean” class=”org.MyBean”> <jsp:setProperty name=”myBean” property=”nome”> </jsp:useBean> * Qual o valor atribuído na propriedade acima? STANDARD ACTIONS • Exemplos de useBean + get/setProperty. ... <jsp:useBean id=”myBean” class=”org.MyBean”> <jsp:setProperty name=”myBean” property=”*”> </jsp:useBean> * Qual valor atribuído às propriedades do bean acima? STANDARD ACTIONS • TAGs <jsp:include> e <jsp:forward> • <jsp:include> - Uso Básico: – <jsp:include page=”includedPage.jsp” /> Inclui o conteúdo da página “includedPage.jsp” em uma página JSP. <%@ include%> VS <jsp:include/> • <jsp:include/> adiciona o conteúdo da página em tempo de execução. • <%@ include%> em tempo de compilação STANDARD ACTIONS • TAGs <jsp:include> e <jsp:forward> • <jsp:forward> - Uso Básico: – <jsp:forward page=”forwardedPage.jsp” /> Redireciona a requisição atual para a página “forwardedPage.jsp” STANDARD ACTIONS • Exemplos <jsp:include> e <jsp:forward> <html>....<body> .... <jsp:include page=”navigBar.html” /> </body></html> STANDARD ACTIONS • Pagina navigBar.html: <p><b> <a href=”pagina1.html”> pagina1 </a> | <a href=”pagina2.html”> pagina2 </a> | ... <a href=”paginaN.html”> paginaN </a> </b></p> STANDARD ACTIONS • Exemplo <jsp:forward> ... String login, senha ... <% if(!login.equals(“loginCorreto”) || !senha.equals(“senhaCorreta”)) { %> <jsp:forward page=”login.jsp”/> <% else ..... OBJETOS IMPLÍCITOS OBJETOS IMPLÍCITOS • As páginas JSP oferecem, automaticamente, instâncias de objetos especiais que estão prontas para serem referenciadas. • Os nomes dessas variáveis são padronizados: • Request, response, out, session, application, page, pageContext, config. • Iremos abordar apenas os mais usados... OBJETOS IMPLÍCITOS • REQUEST: • Encapsula todos os dados/metadados contidos numa requisição http. • O que contém, basicamente, uma requisição http? OBJETOS IMPLÍCITOS • URL requisitada • Cookies • Content Type (texto, XML, html, imagem...) • Request Type (GET / Post) • Parâmetros enviados de campos de formulários ou explícitamente na URL (após o símbolo '?') OBJETOS IMPLÍCITOS • Exemplo de URL: • http://domain.com?login=camilo&name =”Camilo Porto” PARÂMETRO VALOR login camilo name Camilo Porto OBJETOS IMPLÍCITOS • REQUEST (Métodos básicos): • String getParameter(String paramName); • Object getAttribute(String attribName); • Void setAttribute(String attribName, Object attrib); OBJETOS IMPLÍCITOS • SESSION: • Representa a sessão iniciada pelo usuário. • Uma sessão é ativada no instante da primeira requisição de um usuário à aplicação. • É terminada explicitamente pela aplicação, ou por timeout. Pode-se colocar objetos na sessão para persistir durante toda a navegação do usuário no site. OBJETOS IMPLÍCITOS • SESSION (Cont..) • O objeto não estará acessível se a página JSP não fizer parte da sessão • (diretiva <%@ page session=false %>) • Por default, session=true OBJETOS IMPLÍCITOS • SESSION (Métodos Básicos): • Object getAttribute(String attribName); • Void setAttribute(String attribName, Object attrib); Esses objetos estarão disponíveis enquanto a sessão estiver ativa. OBJETOS IMPLÍCITOS • APPLICATION • Guarda configurações da sua aplicação WEB, tais como: • Context path, parâmetros de inicialização. • Também pode armazenar atributos, os quais estarão disponíveis enquanto a aplicação estiver no ar. OBJETOS IMPLÍCITOS • APPLICATION (Métodos Básicos): • ServletContext getServletContext(); • Object getAttribute(String attribName); • Void setAttribute(String attribName, Object attrib); OBJETOS IMPLÍCITOS • ESCOPO: • Page: Acessível em toda a página JSP • Request: acessível durante toda uma requisição • Session: acessível durante toda uma sessão • Application: acessível enquanto a aplicação estiver rodando. TRATAMENTO DE FORMS TRATAMENTO DE FORMS • Tratamento de formulários são as atividades mais comuns em páginas dinâmicas. • O tratamento é feito através da manipulação de parâmetros enviados na requisição (seja pelo método POST ou GET) • Parâmetros também ajudam nas decisões de processamento da página (controle de login, senha, sessão, fluxo de páginas etc..) TRATAMENTO DE FORMS • Os parâmetros de um formulário são enviados na requisição HTTP, sendo assim, estarão acessíveis através do objeto implícito REQUEST. • Parâmetros são acessados através dos métodos: • getParameter(String paramName); • getParameterValues(String paramName); TRATAMENTO DE FORMS • EXEMPLO BÁSICO: (página que contém o form) ... <form action=”trataForm.jsp” method=”post”> Nome: <input name=”nome” type=”text”> Sobrenome: <input type=”text” name=”sobreNome”> <input type=”submit” value=”Enviar”> </form> TRATAMENTO DE FORMS • trataForm.jsp ... <% String nome = request.getParameter(“nome”); String sobrenome = request.getParameter(“sobreNome”); %> Seu nome é: <%= nome %> <BR> Seu sobrenome é: <%=sobrenome %> ..... ESTUDO DE CASO ESTUDO DE CASO • Vamos analisar o código da aplicação simples de cadastro de livros. • Poderemos inserir/remover/pesquisar livros que serão armazenados em uma tabela simples no banco de dados oracle 10g. • O fluxo entre as páginas é mostrado adiante. BIBLIOGRAFÍA • HOLDEN, Mac. Professional Java Server Programming J2EE Edition, 2ed, Wrox. • DAMON, Hougland. Core JSP. 1 ed, Prentice Hall. OBRIGADO!