Arquitetura das JSP - Aula 2 Vitor Brandi Junior Baseado no tutorial “JavaServer Pages...
Transcript of Arquitetura das JSP - Aula 2 Vitor Brandi Junior Baseado no tutorial “JavaServer Pages...
Arquitetura das JSP - Aula 2
Vitor Brandi Junior
Baseado no tutorial “JavaServer Pages Fundamentals - Short Course” by jGuru
2
Sumário• Introdução• Como funciona processo de compilação das
JSP• Modelos de Acesso• Sintaxe básica da JSP• Introdução ao conceito de escopo de objetos• Introdução ao conceito de objetos implícitos
3
Introdução• O propósito das JSP é prover um
método declarativo e centrado em apresentação para o desenvolvimento de servlets
• Portanto, elas podem ser definidas como extensões à API dos servlets
• Portanto, é importante notar que servlets e JSP possuem muitas características em comum.
4
Como funcionam ?• Normalmente as páginas JSP passam por uma fase
de tradução e por uma fase de processamento de requisição
• A fase de tradução acontece uma única vez, a menos que a página JSP seja alterada, caso em que esta fase é repetida
• O resultado desta tradução é um servlet.
5
Modelos de Acesso• Existem pelo menos duas filosofias diferentes
(Modelo 1 e Modelo 2) para se utilizar a tecnologia JSP.
• Elas diferem, essencialmente, no local onde a maior parte do processamento das requisições é realizado.
• Arquitetura do modelo 1
6
Modelo 1• Neste modelo, a requisição que chega vinda
do web browser é enviada diretamente à página JSP, a qual é responsável pelo seu processamento e resposta ao cliente
• Existe separação entre a apresentação e o conteúdo, uma vez que todo acesso a dados é executado por beans
• Este modelo é adequado para aplicações mais simples
• Para aplicações mais complexas, ela não é adequada, pois pode embutir muitos scriplets ou código Java dentro da página JSP
7
Modelo 2
• A arquitetura deste modelo 2 constitui-se na implementação do design pattern Model/View/Controller
• Nesta arquitetura, o processamento é dividido entre componentes de apresentação e de controle
8
Modelo 2• Os componentes de apresentação são páginas
JSP que geram respostas em HTML/XML que constituem-se na interface do usuário
• Os componentes de controle não se preocupam com questões de apresentação, sendo responsáveis pelo processamento de todas as requisições HTTP
• Eles também são responsáveis pela criação de quaisquer beans ou objeto,s utilizados pelos componentes de apresentação
• Também decidem qual componente de apresentação recebe as requisições do usuário
9
Modelo 2• A principal vantagem deste modelo é que não
existe processamento lógico dentro dos componentes de apresentação
• Eles são responsáveis pela recuperação de quaisquer objetos ou beans que podem ter sido criados pelos controladores, extraindo deles o conteúdo dinâmico que será inserido dentro dos templates de apresentação
• Esta clara separação entre apresentação e conteúdo facilita a divisão de tarefas entre programadores e web designers durante o desenvolvimento
10
Sintaxe Básica das JSP• A sintaxe das JSP pode ser classificada em
elementos de scripting (diretivas, declarações, expressões, scriplets e comentários) Diretivas:– são mensagens para o container JSP que, ao invés
de produzir resultados visíveis, dizem ao container o que fazer com o resto da página JSP
– as diretivas são sempre definidas dentro da tag <%@ %>
– as duas principais diretivas são page e include (a partir da versão 1.1. da API, uma nova diretiva taglib também foi definida)
11
Diretivas - page• Page
– geralmente encontrada no topo da maioria das páginas
– podem existir tantas diretivas page quanto necessárias
– a diretiva <%@ page %> se aplica a todo o arquivo JSP e a qualquer arquivo nele incluído estaticamente
– exemplos:• <%@ page import =“java.util.*, com.foo.*” buffer=“16k” %>
• <%@ page autoFlush=“false”%>• <%@ page errorPage=“error.jsp” %>
12
Diretivas - include• include
– permite que se divida o conteúdo da página em elementos mais facilmente gerenciáveis, como por exemplo, cabeçalhos, rodapés etc.
– a página incluída pode ser um arquivo HTML ou uma outra página JSP ou mesmo um arquivo texto
– a inclusão se dá durante a tradução da página JSP, no momento em que ela é compilada
– diz-se, portanto, que a inclusão é estática– exemplo:
• <%@ include file = “copyright.html” %>
13
Outro exemplo de include• Suponha o seguinte arquivo JSP denominado
date.jsp:<%@ page import = “java.util.*” %>
<%= (new java.util.Date()).toLocaleString() %>
• Ele vai ser importado da seguinte maneira (suponho o seguinte arquivo x.jsp):
<html>
<head><title>Teste de Include</title></head>
<body>
A Hora atual é <%@ include file = “date.jsp” %>
</body>
</html>
14
Declarações• Permitem que sejam definidas variáveis, em
nível de página, para o armazenamento de informações
• permitem ainda a definição de métodos que possam vir a ser necessitados pela página
• a tag que define declarações é: <%! %>• é obrigatório que a declaração de variáveis
se encerre com ponto-e-vírgula• exemplo:
– <%! int i =0; %>– <%! public void seila() {
// seila o que vc coloca aqui
} %>
15
Expressões• Em JSP, os resultados da avaliação de uma
expressão são convertidos em uma string e diretamente incluídos dentro da página de saída
• tipicamente expressões são utilizadas para apresentar valores simples de variáveis ou valores retornados pela invocação de métodos get de beans
• a tag que define expressões é: <%= %>• não se pode incluir ponto-e-vírgula ao final de
uma expressão. Exemplos:– <%= variavelQualquer %>– <%= qualquerBean.getName() %>
16
Scriplets• Contém um fragmento de código válido na
linguagem de script definida para a página• o código contido no scriplet é executado
quando a requisição é atendida pela página JSP
• o scriplet pode conter qualquer quantidade de comandos, declarações de variáveis e métodos ou expressões válidas
• é importante lembrar que quaisquer tags HTML ou elementos JSP devem ser declarados fora do scriplet
17
Scriplets• A tag que define um scriplet é: <% %>• exemplo: <% for (int i = 1; i <= 4; i++) { %>
<h<%=i%>> Oi Mundo </h<%=i%>>
<% } %>
• outro exemplo: <% String nome = null;
if (request.getParameter(“nome”) == null) {
%> <%@ include file = “erro.html” %>
<% else {
// faz outras coisas
}
%>
18
Comentários• Existem dois tipos diferentes de comentários
possíveis de serem utilizados:– um que deixa visível o comentário ao usuário da
página quando este visualiza o conteúdo da mesma (comentário em nível de HTML)
– outro que esconde o comentário do usuário da página (comentário em nível de servidor ou comentário escondido)
• A tag que define a sintaxe do primeiro tipo é: <!-- comentário -->
• A tag que define a sintaxe do segundo tipo é: <%-- comentário --%>
19
Introdução a escopo de objetos
• Escopo ou visibilidade é um assunto importante para JSP
• os objetos podem ser criados:– implicitamente através de diretivas JSP– explicitamente através de ações– diretamente dentro do próprio código script
• estes objetos podem ser associados com um atributo de escopo que define onde este objeto pode ser referenciado (existe referência válida) e quando esta referência deixa de existir (fica inválida)
20
Introdução a escopo de objetos
• Resumidamente, a figura abaixo apresenta os escopos definidos:
21
Introdução a Objetos Implícitos• Automaticamente, o container JSP
disponibiliza objetos implícitos que estão disponíveis e podem ser utilizados dentro de scriplets e expressões
• estes objetos agem como wrappers de classes e interfaces normalmente definidas dentro da API de servlets.
• Existem 9 objetos implícitos:– request: muito utilizado, representa o serviço de
invocação disparado pela classe HttpServletRequest. Seu escopo é requisição (request)
22
Introdução a Objetos Implícitos– response: pouco utilizado, representa a classe HttpServletResponse (resposta à requisição). Seu escopo é página (page)
– pageContext:encapsula a classe PageContext (que define características dependentes da implementação). Seu escopo é página (page)
– application: representa a classe ServletContext obtida a partir do objeto de configuração do servlet. Seu escopo é aplicação (application)
– out: um objeto da classe JspWriter que permite escrever no stream de saída. Seu escopo é página (page)
– config: representa a classe ServletConfig. Seu escopo é página (page)
23
Introdução a Objetos Implícitos– page: pouco utilizado, é sinônimo para o operador this. Seu escopo é página (page)
– session: representa um objeto da classe HttpSession. Seu escopo é sessão (session)
– exception:representa um objeto da classe Throwable, resultando da invocação da página de erro. Seu escopo é página (page)