Home Java Server Pages
Post
Cancelar

Java Server Pages

O Que É

• Um documento HTML é estático

• Para criar respostas dinâmicas em Java, existem os servlets

– Dependendo da resposta, é bastante difícil codificá-la usando servlets

• Surgiram os JSPs

– Java Server Pages

– HTML + Código Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<%@ page language="java" contentType="text/html; harset=ISO-8859-1"
  pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
  "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<% 
  List<String> l = new ArrayList<String>();
  l.add("Arroz");
  l.add("Feijão");
  l.add("Batata");
%>
<html>
<body>
<H1>Lista de Compras</H1>
<ul>
<% for (String item : l) { %>
<li><%= item %></li>
<% } %>
</ul>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
<H1>Lista de Compras</H1>
<ul>
  <li>Arroz</li>
  <li>Feijão</li>
  <li>Batata</li>
</ul>
</body>
</html>

Na resposta que chega ao cliente, o documento é 100% HTML

Um JSP é na verdade um servlet

Um JSP é na verdade um servlet

Scriptlets

• São códigos Java inseridos no JSP

• Não estão presentes no HTML resultante

• Um scriptlet deve começar com <% e terminar com %>

1
2
3
4
5
6
<% 
  List<String> l = new ArrayList<String>();
  l.add("Arroz");
  l.add("Feijão");
  l.add("Batata");//O ponto-e-vírgula é necessário aqui
%>

Expressions

• Também são códigos Java inseridos no JSP

• São convertidas em texto no HTML resultante

• Uma expression deve começar com <%= e terminar com %>

1
2
3
4
5
<ul>
<% for (String item : l) { %>
<li><%= item %></li>
<% } %>
</ul>

Uma expression deve sempre resultar numa string

Expressions não recebem ponto-e-vírgula

Declarations

• Também são códigos Java inseridos no JSP

• Usadas para declarar atributos e métodos de instância

• Uma declaration deve começar com <%! e terminar com %>

1
2
3
4
5
6
7
8
<%! int id = 0; %>

<%!
  int getId() {
    return id;//Não esqueça de colocar ponto-e-vírgula

  }
%>

Scriptets são traduzidos da forma como são escritos

Expressions são traduzidas como parâmetros para o out.print()

Declarations são traduzidas como atributos e métodos

Comentários em JSP

• Dentro de scriptlets, os comentários seguem o padrão do Java

1
2
3
4
5
6
7
8
9
<%
  //este é um comentário
  int x = 0;
%>

<%
  /* este é um comentário */
  int x = 0;
%>

• Fora dos scriptlets, deve ser usada outra notação

1
<%-- este é um comentário %>

Diretivas do JSP

• JSP possui 3 tipos de diretivas (directives)

• Elas são identificadas por começarem por <%@ e terminarem por %>

DiretivaDescrição
includeInclui código de um arquivo externo no JSP
taglibDefine uma tag library
pageDefine propriedades da página

A Diretiva Include

• Permite incluir um arquivo externo na criação do JSP

• A inclusão é feita durante a fase de tradução

– O servlet gerado já contém o conteúdo incluído

1
<%@ include file="inc/header.jsp" %>

A Diretiva Taglib

• Permite referenciar tag libraries na página

– Tag libraries são bibliotecas de tags

– Utilizadas para simplificar algumas tarefas e esconder o código Java

1
2
3
4
<%@ taglib uri="http://www.jsp.org/tags" prefix="jsp" %>
<jsp:loop id="item" value="lista">
  ...
</jsp:loop>

A Diretiva Page

• Define propriedades específicas da página JSP

• É composta por diversos atributos

– language

– contentType

– pageEncoding

– import

– isErrorPage

– errorPage

• Os atributos language, contentType e pageEncoding definem a linguagem e codificação

1
2
3
<%@ page language="java" 
  contentType="text/html; charset=ISO-8859-1"
  pageEncoding="ISO-8859-1" %>

• O atributo import é utilizado para importar classes e/ou pacotes que serão usados no JSP

• Funciona de forma bastante semelhante ao import do Java

1
2
3
<%@ page import="java.util.List" %>
<%@ page import="java.util.List, java.util.ArrayList" %>
<%@ page import="java.util.*" %>

• Por padrão, alguns imports já são realizados

– java.lang.*

– javax.servlet.*

– javax.servlet.jsp.*

– javax.servlet.http.*

JSP Actions

• Funcionalidades para melhorar a produtividade no desenvolvimento

• São definidas pelas tags no formato <jsp:action>

ActionDescrição
Inclui outro JSP para renderização
Redireciona a requisição para outro local
Cria parâmetros no JSP
Recupera a propriedade de um Java Bean
Atribui um valor a uma propriedade de um Java Bean
Referencia um Java Bean no JSP

A action <jsp:include>

• Inclui o conteúdo de outro arquivo (HTML, JSP, servlet, etc.)

• A inclusão é feita durante a renderização

– A diretiva <%@ include %> faz a inclusão na fase de tradução

1
2
3
4
5
6
<html>
<body>
<jsp:include page="header.jsp" />//Inclui o arquivo header.jsp na geração do HTML de retorno
...
</body>
</html>

A action <jsp:forward>

• Permite redirecionar a requisição para outro local

– HTML, JSP, servlet, etc

1
<jsp:forward page="result.jsp" /> //Redireciona para o arquivo result.jsp

Objetos Implícitos

• Como um JSP é um servlet, ele possui acesso à objetos que um servlet acessaria

• Estes objetos existem de forma implícita no JSP

Objeto ImplícitoClasse do Objeto 
outJspWriterDados na saída
applicationServletContextConfiguração
configServletConfigConfiguração
exceptionJspExceptionApenas para páginas de erro
requestHttpServletRequestEscopo de dados
responseHttpServletResponseEscopo de dados
sessionHttpSessionEscopo de dados
pageContextPageContextEscopo de dados
pageObjectEscopo de dados

Páginas de Erro

• Os atributos isErrorPage e errorPage possibilitam o direcionamento para uma página de erro caso alguma exceção inesperada ocorra

• isErrorPage deve ser usado pela página que representa a página de erro

• errorPage deve indicar uma página de erro para que haja o redirecionamento no caso de erro

1
2
3
4
5
6
7
8
9
<%@ page errorPage="error.jsp" %>//atributo errorPage define qual JSP chamar em caso de exceção
<html>
<body>
<%
  Object o = null;
  o.toString();//Este código vai gerar uma NullPointerException
%>
</body>
</html>
1
2
3
4
5
6
7
<%@ page isErrorPage="true" %>
<html>
<body>
<H1>Erro no Sistema</H1>
<STRONG>Mensagem: </STRONG><%= exception.toString() %>//Uma página de erro possui um objeto implícito chamado exception, que representa a exceção ocorrida
</body>
</html>

Inicialização e Destruição de JSPs

• Em servlets, o container chama os métodos

– init(): ao inicializar o servlet

– destroy(): ao destruir o servlet

– service(): ao atender uma requisição

• Como um JSP é um servlet, o container também chama métodos semelhantes

– jspInit(): ao inicializar o JSP

– jspDestroy(): ao destruir o JSP

– _jspService(): ao atender uma requisição

• É possível sobrescrever os métodos jspInit() e jspDestroy()

• O método _jspService() não deve ser sobrescrito

1
2
3
4
5
6
7
8
<%!//Usar declaration
  public void jspInit() {
    //inicializar o que for necessário
  }
  public void jspDestroy() {
    //destruir o que for necessário
  }
%>

Passando Parâmetros para JSPs

• Assim como servlets, JSPs também podem receber parâmetros de inicialização

1
2
3
4
5
6
7
8
9
10
11
12
<servlet>
  <servlet-name>ListaCompras</servlet-name>
  <jsp-file>/lista_compras.jsp</jsp-file>
  <init-param>
    <param-name>moeda</param-name>
    <param-value>R$</param-value>
  </init-param>
</servlet>
<servlet-mapping>
  <servlet-name>ListaCompras</servlet-name>
  <url-pattern>/lista_compras.jsp</url-pattern>
</servlet-mapping>
1
2
3
4
5
<html>
<body>
  Moeda: <%= config.getInitParameter("moeda") %>//O objeto implítico config acessa o ServletConfig do servlet
</body>
</html>

Não use código Java em JSPs

• Apesar de JSPs terem sido criados para possibilitar a mistura de HTML e código Java, escrever código Java em JSPs não é uma boa prática

– Dificulta o trabalho de web designers, que não são programadores

– Para páginas complexas, o código fica confuso

– Dificuldade de manutenção

• Qual a alternativa?

– EL (Expression Language)

– JSTL (Java Server Pages Standard Tag Library)

– Tag libraries customizadas

Baseado nos cursos da Softblue

Esta postagem está licenciada sob CC BY 4.0 pelo autor.