JSP e Servlets e Servlets e Servlets - Dei-Isep

Propaganda
JSP e Servlets
Instituto Superior de Engenharia do Porto
2003/2004
Linguagens de Programação II
Filipe Costa – 1020525
Índex
Introdução ao JSP, descrição e comparação
JSP
Funcionamento
Servlets
Sintax
Exemplo de Scriptlet
Comandos
JavaBeans
Comandos
Sessões
Conclusão
JSP e Servlets
3
4
4
5
5
6
7
9
11
2
Introdução
JSP (JavaServer Pages) é uma tecnologia que possibilita o desenvolvimento de páginas
web dinâmicas utilizando todas as potencialidades do Java como linguagem orientada a
objectos. Tal como em ASP e PHP, os ficheiros JSP são ficheiros html que contêm
algumas secções de código Java que possibilita conteúdos dinâmicos e automaticamente
actualizáveis, quer por acesso a bases de dados, ficheiros ou outras fontes na rede,
possibilitando também o conceito de utilizadores e sessões nas páginas de Internet, já
que sem estas tecnologias era impossível implementar este tipo de funções apenas em
html.
A comparação entre PHP e JSP pode ser feita como analogia entre o C e Java em termos
de uma linguagem ser orientada por objectos e a outra apenas em programação corrida o
que traz vantagens em ser bastante mais simples, e como desvantagens ser menos
poderosa e permitindo menos reutilização de código.
O Java ainda como tecnologia feita para máquinas virtuais (VM) é também muito mais
versátil em termos de se poder deslocar o código para todas as máquinas desde que
tenham um VM que faz a emulação de uma máquina Java. Esta vantagem aplica-se
também ao JSP sendo uma linguagem multi-plantaforma possibilitando que o servidor
possa ter qualquer arquitectura (Windows, Linux, Mac, …).
JSP e Servlets
3
JSP
Funcionamento
Convém fazer a distinção entre código JSP e applets Java para páginas (normalmente
aplicações em que o código Java é processados pelo cliente), pois a primeira é dinâmica
com o servidor e a segunda é interactiva na própria máquina sendo compilada ai mesmo
mas podendo também ser dinâmica com o servidor ou com qualquer outro recurso.
Como nota essencial fica que o JSP não é compilado na máquina do cliente e como tal é
impossível existirem aplicações a correrem na máquina se não estiver uma ligação
estabelecida com o servidor ou de JSP
JSP funciona então do seguinte modo:
(1) O computador cliente envia um pedido ao servidor de transferência do
ficheiro.jsp;
(2) O servidor analisa o ficheiro.jsp e verifica se tem código Java, se não tiver
código Java poderá ser devolvido ao cliente;
(3) Gera um servlet.java do ficheiro;
(4) Compila o servlet.java para um ficheiro.class;
(5) Executa o ficheiro no servidor;
(6) Por fim devolve o resultado da execução do Java englobando também o código
html que se encontrava no ficheiro base.
Servlets
A grande diferença entre fazer um código servlet ou JSP está no conteúdo em Java que
se pretende introduzir. Se o objectivo é realizar uma página toda em Java com pouco ou
nenhum conteúdo estático então poderá ser feito um servlet que consiste em fazer uma
classe. Se o pretendido é realizar uma página com pouco conteúdo dinâmico e com
muitos elementos estáticos então o JSP é mais apropriado. Normalmente um servidor
que suporte servlets suporta também JSP o que torna a decisão exclusivamente do
programador.
JSP e Servlets
4
Como a figura anterior dá para observar, qualquer código JSP é convertido em servlets,
e esses são depois tratados pelo servidor e devolvidos ao cliente em forma de string no
meio do código html original.
Classes e interfaces especificas do JSP:
Package javax.servlet.jsp
Package javax.servlet.jsp.tagext
Sintaxe
Comentários: <! -- … -->
Comentário ao nível de html e visível inclusivamente quando o cliente visualiza
o html da página;
Comentários: <% -- … --%>
Comentário ao nível do JSP, apenas visível na compilação e na programação;
Scripting: <% … %>
Permite a escrita de código Java nas JSP.
<% código %>;
<%! declaração %>;
<%= expressão %>.
Directivas: <%@ directiva Lista-atributos %>
Mensagens enviadas ao programa que compila/executa JSPs (container)
Directivas:
page, include, taglib;
Acções <jsp:comando> … <\jsp: comando>
Marcas JSP pré-definidas que encapsulam funcionalidades.
Comandos: jsp:useBean;
jsp:setProperty;
jsp:getProperty;
jsp:param;
jsp:include;
jsp:forward;
jsp:plugin;
jsp:params;
jsp:fallback …
Exemplo de Scriptlet
No seguinte exemplo é pedido ao utilizador o seu nome e é impresso no ecrã logo
depois uma mensagem personalizada para esse utilizador.
...
<body>
<% // begin scriptlet
String name = request.getParameter( "firstName" );
//Objecto HttpServletRequest
if ( name != null ) {
%> <%-- end scriptlet to insert fixed template data --%>
<h1>
JSP e Servlets
5
Hello <%= name %>, <br />
Welcome to JavaServer Pages!
</h1>
<% // continue scriptlet
} // end if
else {
%> <%-- end scriptlet to insert fixed template data --%>
<form action = "welcome.jsp" method = "get">
<p>Type your first name and press Submit</p>
<p><input type = "text" name = "firstName" />
<input type = "submit" value = "Submit" />
</p>
</form>
<% // continue scriptlet
} // end else
%> <%-- end scriptlet --%>
</body>
...
Comandos JSP
Acções
Acção
<jsp:include>
Descrição
Inclui dinamicamente outro recurso num JSP. Quando a JSP é
executado, o recurso referenciado é incluído e processado. Se o
recurso é alterado entre pedidos as alterações são incluídas na
próxima chamada da página
<jsp:forward> Redirecciona o processamento para outro JSP, servlet ou página
estática. Esta acção termina com a execução da página JSP corrente.
<jsp:plugin>
Permite gerar uma página HTML que contenha as construções
apropriadas (dependentes do browser) para que se faça o download do
plug-in Java e a subsequente execução da applet especificada. A tag
<jsp:plugin> é substituída pela tag <object> ou pela tag <embed>,
dependendo do browser do cliente
<jsp:param>
Usado em conjunto com as acções include, forward and plugin.
Permite definir duplos do tipo (nome; valor) que podem ser lidos
quando a acção é executada
Directivas
language
Qual a linguagem usada
extends
Superclasse pelo servidor para a
compilação dos servlets
Importa classes que sejam
necessárias para a compilação do
código
Permite o uso de sessões nas
páginas para que se possa guardar
import
session
JSP e Servlets
<%@ page language = "java"
%>
<%@ page extends =
"com.taglib... %>
<%@ page import = "java.util.*"
%>
Por defeito está definido para
existirem sessões
6
buffer
autoFlush
isThreadSafe
info
errorPage
IsErrorPage
contentType
informações necessárias do
utilizador para futuras consultas
Controla o buffer de saida para
uma página JSP. Por defeito é 8kb
Limpa o buffer quando cheio
Possibilita que quando existam
múltiplos pedidos de execução de
servlets sejam tratados ao mesmo
tempo
Informações várias que podem ser
incluídas na página, usualmente o
autor, data e versão
Identificação de outra página para
tratar erros que possam acontecer
Esta flag está em true o que
possibilita que as excepções sejam
enviadas para a página de
tratamento de erros
Identifica o tipo de mime e
character usado pelo JSP
<%@ page session = "false" %>
<%@ page buffer = "none" %>
<%@ page autoFlush = "true"
%>
<%@ page info =
"visualbuilder.com test page,
copyright 2001. " %>
<%@ page errorPage =
"/error/error.jsp" %>
JavaBeans
Para a reutilização de código eficaz foram criados os JavaBeans que mais não são do
que classes de Java com determinadas regras:
Deve existir um construtor público e sem parâmetros;
• Nenhum atributo pode ser público;
• Os atributos são acedidos através de métodos públicos setXxx, getXxx e isXxx.
Estas regras determinam um padrão que possibilita o uso de Beans como componentes
em ferramentas de desenvolvimento, sendo depois facilitada a reutilização de código
noutras aplicações.
Existem três tipos de Java Beans:
•
•
•
Visuais, utilizados no desenvolvimento de interfaces;
Dados, que fornecem um padrão para acesso a valores;
Serviços, usados para cálculos, acesso a tabelas e algoritmos específicos.
Em JSP (sendo uma linguagem que não usa interfaces gráficos) apenas os dois últimos
tipos são usados.
Comandos JavaBeans
Estes JavaBeans como classes normais com determinadas características são assim
muito conhecidas para todos os alunos que estudam Java, não apresentando quaisquer
diferenças para as classes de Java normais, como mostra o exemplo:
JSP e Servlets
7
class Hora
{
private int hora, minuto, segundos;
public Hora()
{
hora = minuto = 0;
}
public int getSegundos()
{
return hora*3600+60*minuto;
}
public void setSegundos(int s)
{
segundo=s;
}
}
useBean - Criar/seleccionar
Para a utilização dos JavaBeans no código JSP deverá primeiro ser criado um
objecto da classe para depois serem utilizados os métodos da respectiva classe
(como qualquer classe em Java que não seja abstracta). Essa criação efectua-se
da seguinte maneira:
Permite ao JSP gerir, criar ou seleccionar um objecto Java. Exemplo de uso de
JavaBean em JSP e analogia com código Java:
JavaBean
<jsp:useBean id = “obj” class = “Hora”/>
Java
Hora obj = new Hora();
Cria um novo objecto “obj” do tipo de classe Hora
getProperty - Recuperar Propriedade
JavaBean
<jsp:getProperty name = “obj” property =
“Segundos” />
Java
obj.getSegundos()
Esta Marca retorna no local em que estiver o valor da propriedade recuperada
setProperty - Alterar Propriedade
JavaBean
<jsp:setProperty name = “obj” property =
“Segundos” value = “60”/>
Java
obj.setSegundos(60)
Define a propriedade segundos como 60
JSP e Servlets
8
scope - Utilização de Beans em outras páginas
A criação padrão disponibiliza o Bean apenas para a página actual, para alterar o
nível de acesso usa-se o atributo scope.
scope pode ter quatro valores:
page - mantém o Bean até que a página seja mostrada;
request - mantém o Bean até que a resposta seja toda enviada;
session - o Bean existe durante a sessão;
application - o Bean dura enquanto a aplicação Web actual estiver activa.
<jsp:useBean id = “obj” class = “Hora” scope=“page”>
Para se aceder a propriedades indexadas previamente na mesma página ou então por
uma página que tenha englobado a actual no campo scope quando o objecto foi criado,
apenas se terá de usar normalmente não sendo necessária qualquer declaração adicional:
<%for(int i=0; i<10; i++) { %>
<%=obj.getPropriedade(i)%> <br>
<%}%>
getParameter – Inserção directa nas propriedades de Java Beans
<jsp:setProperty name=“obj” property=“nome” param =“nome”/>
Nome do parâmetro no atributo para inserir directamente: Quando a
propriedade e o parâmetro têm o mesmo nome poderá utilizar-se property=“*” – para uma associação total
Sessões
Como foi dito acima, o JSP define automaticamente o uso de sessões a true, o que
possibilita o uso de objectos em futuras sessões noutras páginas ou até na mesma
página. Este tipo de informações são normalmente guardados em cookies e cada vez
mais fundamentais para navegar em sites cada vez mais dinâmicos e com usernames e
passwords. Se os cookies não estiverem activos no browser, ou se forem recusados por
qualquer outro motivo torna quase impossível o uso de cookies, existindo outra maneira
de o fazer, não é a melhor e alguns browsers não a suportam. Os objectos que são
guardados na sessão são associados a um sessionID que permitirá assim o uso apenas
onde se destina. Os cookies são encriptados o que possibilita alguma privacidade e
segurança no manuseamento de informação pessoal e por vezes confidencial.
Para se armazenar um objecto terá de se realizar o seguinte código:
<%
Foo foo = new Foo();
session.putValue("foo",foo);
%>
Para mais tarde se aceder ao objecto guardado na sessão:
JSP e Servlets
9
<%
Foo myFoo = (Foo) session.getValue("foo");
%>
Não sendo obrigatório o isso de sessões nas páginas JSP, poderá desactivar-se as
sessões com o seguinte código: <%@ page session = "false" %> .
Não existe também limite para o número de objectos que se pode guardar numa sessão
mas não é recomendável que se guarde inúmeros objectos pois torna a navegação
bastante pesada, e por vezes o elevado número de objectos é desnecessário. Os
servidores normalmente colocam o tempo máximo de um objecto de sessão em 30
minutos mas poderá ser alterado usando este comando: setMaxInvalidationInterval(int
secs) .
JSP e Servlets
10
Conclusão
O JSP tem como principais atractivos o encapsulamento de funções e classes que traz
como consequência uma grande reutilização de código. Para se tirar total proveito da
linguagem será necessário ter conhecimento de muitas classes já construídas o que
possibilita uma programação que não quer inventar a roda mas sim fabricar automóveis
com os conhecimentos existentes até agora. No entanto para se fazerem aplicações mais
simples a utilização de PHP por exemplo será muito mais simples, versátil e intuitiva
por não ser tão poderosa é de mais fácil implementação. O grande beneficio do PHP é
que normalmente o uso de aplicações dinâmicas na web é para fins pouco complexos
como acesso a bases de dados, autenticações de utilizadores, sistemas de compras de
produtos ou para funções de cálculos lógicos, o que torna o PHP um alvo ideal pela sua
facilidade de utilização. O Java neste tipo de implementações não traz grandes
benefícios, e estando o PHP e ASP mais divulgados e mais facilitados no seu uso
normalmente é sobre estas duas linguagens que as escolhas dos programadores recaiem.
JSP e Servlets
11
Download