- Introdução
- Scriptlet
- Comentários em arquivos JSP
- Diretiva page
- JavaBeans
- Expression Language (EL)
- JavaServer Pages Standard Tag Library (JSTL)
- Leitura Recomendada
Introdução
O objetivo principal de JSP é escrever facilmente HTML junto ao conteúdo dinâmico do lado servidor.
Em vez de usar trechos de código como
out.println("<p>" + variavel + "</p>");
escrevemos algo mais amigável
<p><%= variavel %></p>
Arquivo JSP
<%@ page language="java" contentType="text/html"
pageEncoding="UTF-8"
import="java.util.Date" %>
<html>
<head>
<title>Página Legal</title>
</head>
<body>
<p>Hoje é <%= new Date() %></p>
</body>
</html>
<html>
<head>
<title>Página Legal</title>
</head>
<body>
<p>Hoje é Mon Aug 28 10:58:56 BRT 2017</p>
</body>
</html>
Usando arquivos JSP
Arquivos JSP são criados na pasta de conteúdo web com a extensão .jsp.
Projeto de aplicação web no NetBeans
Compilação do arquivo JSP
O arquivo JSP, na verdade, é um servlet, mas a compilação é feita automaticamente pelo container.
Scriptlet
Os arquivos JSP permitem a introdução de código Java em um ambiente chamado scriptlet.
<h1>Exemplo de Scriptlet</h1>
<%
String[] lista = request.getParameterValues("lista");
boolean achou = false;
for (int i = 0; i < lista.length; i++) {
if ("nome".equals(lista[i])) {
achou = true;
break;
}
}
%>
<p>Resultado da busca: <%= achou %></p>
<h1>Exemplo de Scriptlet</h1>
<p>Resultado da busca: true</p>
Expressões scriptlets
Uma expressão scriptlet consiste em escrever na resposta o valor de uma variável ou expressão Java.
O exemplo abaixo escreve o conteúdo da variável achou.
<%= achou %>
Variáveis implícitas
Dentro do ambiente scriptlet, algumas variáveis vem previamente declaradas automaticamente:
<%
String nome = request.getParameter("nome");
if (nome != null) {
out.print("A requisição contém o parâmetro 'nome'");
}
%>
Lista das principais variáveis implícitas
Variável | Descrição |
---|---|
request |
Objeto com os dados da requisição do cliente. |
response |
Objeto para escrever informações da resposta do servidor. |
out |
Similar ao objeto obtido por response.getWriter() . |
session |
Informações da sessão do usuário. |
config |
Informações de configuração da aplicação web. |
application |
Informações da aplicação web. |
pageContext |
Informações da página atual. |
Comentários em arquivos JSP
<%-- Isto é um comentário JSP --%>
<!--
A diferença para os comentários HTML é que os
comentários JSP não aparecem no lado cliente
-->
Diretiva page
Esta diretiva permite definir informações da página ao gerar a resposta para ser enviada ao cliente.
Além disso, serve para fazer a importação de classes Java a serem usadas na página.
<%@ page language="java" contentType="text/html"
pageEncoding="UTF-8"
import="java.util.Date" %>
JavaBeans
JavaBeans são classes sem construtor ou possui ao menos um construtor sem argumentos.
Usamos um ou mais JavaBeans no JSP para reduzir a quantidade de código scriptlet e ter uma descrição dos dados usados na página.
package meupacote;
public class MeuPrimeiroBean {
private String mensagem = "Bem vindo";
public String getMensagem() {
return mensagem;
}
public void setMensagem(String mensagem) {
this.mensagem = mensagem;
}
}
<%@ page language="java" contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html>
<html>
<body>
<jsp:useBean id="primeirobean" class="meupacote.MeuPrimeiroBean"/>
<p>
A mensagem atual é
<strong><jsp:getProperty name="primeirobean" property="mensagem"/></strong></p>
<jsp:setProperty name="primeirobean" property="mensagem" value="JavaBean é legal"/>
<p>
A mensagem depois de adicionada é
<strong><jsp:getProperty name="primeirobean" property="mensagem"/></strong></p>
</body>
</html>
<!DOCTYPE html>
<html>
<body>
<p>
A mensagem atual é
<strong>Bem vindo</strong></p>
<p>
A mensagem depois de adicionada é
<strong>JavaBean é legal</strong></p>
</body>
</html>
Expression Language (EL)
Forma de trabalhar com beans de forma mais simplificada.
<jsp:useBean id="primeirobean" class="meupacote.MeuPrimeiroBean"/>
A mensagem atual é ${primeirobean.mensagem}
A mensagem atual é Bem vindo
Constantes
Booleanos: ${true} ou ${false}
Strings: ${"Seja bem vindo!"}
Inteiros: ${102}
Reais: ${34.17}
Nulo: ${null}
Booleanos: true ou false
Strings: Seja bem vindo!
Inteiros: 102
Reais: 34.17
Nulo:
Expressões
Booleanas: ${7 + 3 == 10}
Numéricas: ${102 * 2} e ${34.17 + 3}
Booleanas: true
Numéricas: 204 e 37.17
Expressões Facilitadoras
Alguns recursos estão disponíveis diretamente com o uso da Expression Language.
${param['nome']} <!-- valor de parâmetro -->
${paramValues['valor']} <!-- array de parâmetros -->
${cookie['acesso']} <!-- valor de cookie -->
${header['User-Agent']} <!-- valor de cabeçalho -->
JavaServer Pages Standard Tag Library (JSTL)
A programação JSP é muito mais suave utilizando a biblioteca JSTL.
Instalação da biblioteca
Antes de usar o JSTL, é preciso ter a biblioteca.
Com a IDE NetBeans, este é um simples passo.
Utilizando a biblioteca
JSTL, na verdade, é uma coleção de bibliotecas.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
Exemplos de uso
Criação de variáveis <c:set> e saída segura <c:out>
<c:set var="email" value="${param['email']}"/>
Seu e-mail é <b><c:out value="${email}"/></b>
Se o cliente requisitar com a query string email=joao@exemplo.com
, receberá:
Seu e-mail é <b>joao@exemplo.com</b>
Remoção de variáveis <c:remove>, condicional com <c:if> e <c:choose>
<c:if test="${param['nome'] != null}">
<c:set var="nome" value="${param['nome']}"/>
Seu nome é: <c:out value="${nome}"/>
</c:if>
<c:remove var="nome"/>
<c:choose>
<c:when test="${nome != null}">
A variável ${nome} contém o valor ${nome}
</c:when>
<c:otherwise>
A variável ${nome} foi removida
</c:otherwise>
</c:choose>
<form action="${pageContext.request.requestURI}" method="post">
Nome: <input type="text" name="nome"><br>
<input type="submit">
</form>
Requisição para /WebApplication1/exemplo.jsp?nome=Florentina+de+Jesus
:
Seu nome é: Florentina de Jesus
A variável ${nome} foi removida
<form action="/WebApplication1/exemplo.jsp" method="post">
Nome: <input type="text" name="nome"><br>
<input type="submit">
</form>
Loops <c:forEach>
<c:forEach var="pal" items="${paramValues['palavras']}">
<c:out value="${pal}"/><br>
</c:forEach>
Com a query string palavras=Sapato&palavras=Bolsa&palavras=Festa
:
Sapato<br>
Bolsa<br>
Festa<br>
URL relativa ao contexto
A tag <c:url> aponta para recursos dentro da aplicação, independente do contexto escolhido no container.
Por exemplo, se foi feito deploy da aplicação para /AppLoja, então o seguinte código
<c:url value="/imagem/banner.jpg"/>
se tornará
/AppLoja/imagem/banner.jpg
Referenciando recursos com <c:url>
<img src='<c:url value="/imagem/banner.jpg"/>'>
<img src='/AppLoja/imagem/banner.jpg'>
Leitura Recomendada
Capítulos 9, 10, 12, 13, 16 e 17