O atributo ação da tag page possibilita a realização de tarefas complexas. Embora se obtenha resultados equivalentes com o uso de código Java dentro de scriptlets, o uso das tags de ações promove reusabilidade de seus componentes e aumenta a capacidade de manutenção da página.
q
Uso do atributo ação da tag <@page /> permite: 1 Instanciação de objetos.
1 Comunicação com recursos do lado do servidor como páginas JSP e servlets. 1 Sem a necessidade de código Java.
Resultado equivalente com o uso de código Java dentro de scriptlets. Uso das tags de ações.
1 Promove reusabilidade de seus componentes. 1 Aumenta a capacidade de manutenção da página.
A tecnologia de componentes para JSP é baseada em componentes JavaBeans. Antes de acessar um bean dentro de uma página JSP, é necessário identificar o bean e obter uma referência dele.
Figura 9.3 Gerenciador de paletas do Netbeans.
Capí tu lo 9 - J av ab ean s
q
Tecnologia de componentes para JSP. 1 Baseada em componentes JavaBeans. 1 Identificar o bean.
2 Antes de acessá-lo dentro de uma página JSP. 2 Necessário identificar e obter sua referência. 1 tag <jsp:useBean />
2 Tenta obter uma referência de um bean que já esteja criado. 2 Depende do escopo em que ele foi definido.
3 scope=”page | request | session | application” Por exemplo:
<jsp:useBean id="user" class="Global" scope="session"/>
q
id 1 id=”beanInstanceName” class 1 class=”package.class” scope1 scope=”page | request | session | application” beanName
1 beanName=”{package.class | <%= expression %>}” Type
1 type=”package.class”
A tag acima instanciará um objeto que será identificado por user, a partir da classe Global. A definição do escopo depende muito do projeto em questão. No exemplo anterior, esse objeto criado será compartilhado por toda sessão que será mantida com o usuário. Caso encontre-se uma nova tag de criação de um objeto da classe Global, o objeto já instanciado será usado, não havendo a necessidade de criação de outro.
q
Passos para a criação do objeto: 1 Tentativa de localizar o objeto. 1 Baseado nas informações (id, scope). 1 Inspeção é feita sincronizada.
1 Definir a variável de script identificado por id. 1 Objeto encontrado.
2 A variável é inicializada com a referência à localizada e então é realizado um casting para o tipo específico.
1 Se o Cast falhar:
2 Uma exceção do tipo java.lang.ClassCastException vai ocorrer e o processamento da tag acaba.
aç
õe
s W
eb
q
1 Objeto não encontrado no escopo e a classe não pode ser localizada:
2 Uma exceção do tipo java.lang.InstantiationException vai ocorrer e o processa- mento da tag acaba.
1 Objeto não encontrado no escopo e a classe for encontrada com um construtor padrão (sem argumentos):
2 O objeto é instanciado e relacionado com a variável de scriplet identificada por id. 1 Se um construtor sem argumentos não for encontrado:
2 Então uma exceção do tipo java.lang.InstantiationException ocorrerá e o processamento da tag acabará.
Caso o processamento do corpo da tag venha a ser realizado, ele poderá realizar algumas inicializações desejadas, como no exemplo a seguir, onde o objeto clientes é instanciado com as propriedades nome e telefone.
<jsp:useBean id="clientes" class="Clientes" scope="page">
<jsp:setProperty name="clientes" property="nome" value="Rafael dos Santos"> <jsp:setProperty name="clientes" property="telefone" value="648-2343"/> </jsp:useBean>
Cabe entender melhor os escopos possíveis para a definição de um bean. São eles:
q
1 page: objetos são vistos apenas pela página onde ele foi criado. As referências para esses objetos são armazenados no objeto pageContext.
1 request: objetos são vistos nas páginas usadas para responder a requisição do usuário. Se uma página é redirecionada para outra, esses objetos são preservados, uma vez que fazem parte da mesma requisição. As referências para esses objetos são armazenadas no objeto implícito request.
1 session: objetos são acessíveis por páginas que fazem parte da mesma sessão. As referências para esses objetos são armazenadas no objeto session.
1 application: objetos são acessíveis por toda aplicação JSP em questão e são armaze- nados no objeto implícito application.
Vejamos um exemplo de uso de JSP com JavaBeans. No código JSP a seguir, é realizada a chamada a um JavaBean que é a classe Global. Através da tag <jsp:useBean> é criado um objeto chamado user, que será utilizado ao longo do código para realizar chamadas aos métodos implementados para essa classe. Podemos citar a linha do comando user.checkUser(); como exemplo de execução de um método da classe Global dentro do código JSP.
<html> <head>
<title>Página Principal</title> </head>
<%@ page import = “Global" %>
<jsp:useBean id="user" scope="page" class="Global" /> <jsp:setProperty name="user" property="login" />
Capí tu lo 9 - J av ab ean s <% user.checkUser(); if (!(user.getUser().equals(“adm"))) { %> <jsp:forward page="nopermition.jsp" /> <% } %> <h1>Seção de Administrador</h1><br><br> <center>
Bem Vindo!!! Administrador. </center>
<br><a href="javascript:history.back()">Voltar</a><br> </body>
</html>
Nesse outro exemplo, começamos mostrando o código HTML de um formulário de entrada de dados.
<!DOCTYPE html> <html>
<head>
<title>JSP e JavaBean</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> </head>
<body>
<form method="post" action="ex01UseBean.jsp"> Digite seu nome:
<input type="text" name="nome" size="50" /> <br /> Selecione o sexo: <select name="sexos"> <option value="Feminino">Feminino</option> <option value="Masculino">Masculino</option> </select> <br />
<input type="reset" name="b1" value="Limpar" />
<input type="submit" name="b2" value="Enivar" /> </form>
</body> </html>
O código do bean a ser utilizado é o seguinte.
<%@page contentType="text/html" pageEncoding="ISO-8859-1"%> <jsp:useBean id="pessoa" class="modelo.Pessoa" />
<jsp:setProperty name="pessoa" property="nome" /> <jsp:setProperty name="pessoa" property="sexo" /> <!DOCTYPE html>
<html> <head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>JSP e JavaBean</title>
aç õe s W eb </head> <body>
<h1>Informações do objeto instanciado do Bean</h1> <hr> Nome: ${pessoa.nome} <br> Sexo: ${pessoa.sexo} <hr> <a href="ex01UseBean.html">Voltar</a> </body> </html>
Uma alternativa é utilizar o bean com atribuição genérica, conforme podemos ver no trecho de código a seguir.
<%@page contentType="text/html" pageEncoding="ISO-8859-1"%> <jsp:useBean id="pessoa" class="modelo.Pessoa" />
<jsp:setProperty name="pessoa" property="*"/> <!DOCTYPE html>
<html> <head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>JSP e JavaBean</title>
</head> <body>
<h1>Informações do objeto instanciado do Bean</h1> <hr> Nome: ${pessoa.nome} <br> Sexo: ${pessoa.sexo} <hr> <a href="ex02UseBean.html">Voltar</a> </body> </html>
Exercício de fixação e
JavaBeans
Para você, qual é a principal característica e como JavaBeans pode auxiliar no processo de desenvolvimento de sofwares?
Ca pí tu lo 1 0 - D eploy me nt d e a pl ic aç ão Jav a W eb