Posted on 11:46, março 13th, 2008 by Prof. Luis Eduardo

Pois é senhores, esta é a última aula do curso de programação para Web em java.

Quem chegou agora, o curso pode ser feito, basta fazer as aulas a partir da primeira aqui. 

Foram 5 meses de curso e nada menos que 21 mil acessos. Espero realmente que todos tenham aprendido alguma coisa, e pelo menos encontrado o caminho das pedras para aprender mais a respeito.

Eu pretendia aprofundar mais alguns assuntos, porém não estou com disponibilidade para produzir um material com a qualidade que desejo. Portanto, as aulas que prometi, (por exemplo CRUD), estarão engavetadas no momento.

Para continuarmos mantendo o contato estou preparando uma nova categoria de artigos, com dicas rápidas para programadores em geral. Devido a minha experiência Java e Asp.Net, estes serão assuntos constantes. Estou aceitando sugestões de dicas, ou de assuntos a serem tratados.

A primeira dica que vou publicar é o uso de Ireport 2 para geração de relatórios em aplicações Web/Java. O foco é diferente do curso, uma vez que serão coisas para ajudar no dia-a-dia. Na fila teremos como tratar datas em formulários JSTL.

Estou preparando também um roteiro com material bibliográfico que utilizei para o desenvolvimento do curso.

Para aqueles que queiram deixar uma palavra final sobre curso, escrevam nos comentários deste artigo.

Quanto ao projeto de um curso nos moldes deste, mas sobre Asp.Net, estou estudando… ainda não é certeza. Existe interesse?

Posted on 18:54, março 7th, 2008 by Prof. Luis Eduardo

Sejam bem vindos, esta é a décima sétima aula de Programação Web em Java, para saber mais sobre o curso, começe em Curso de Programação Web em Java - CPWJ

Depois que vimos uma aplicação funcionando, vamos agora detalhar cada parte do processo. Nosso estudo de caso será o sistema de busca, porém iremos incrementá-lo significativamente.

Esta aula está sendo postada com atraso, devido a problemas que tive para publicar o código java no Wordpress. Depois de várias tentativas, decidi colocar os arquivos *.java e os *.xml em um diretório do servidor para que você possam baixar.

Voltemos à aula

Comecemos estudando a camada Model, ou modelo: O objetivo desta camada é definir as entidades envolvidas e as regras de negócio do programa. Em orientação a objeto, não nos preocupamos inicialmente com a interface do programa, mas sim de um modelo de representação das entidades que fazem parte do projeto. Uma abordagem pedagógica para atacar o problema é escrever de início um lista de requisitos do sistema, discutindo o que ele precisará ter:

  • Permitir o usuário digitar uma palavra chave e obter uma lista de sites que possuem relação com a palavra digitada usando o motor de busca;
  • Permitir um usuário cadastrar um ou mais sites definindo uma lista limitada de palavras chaves relacionadas com seu site;
  • Permitir um administrador do sistema corrigir, adicionar ou eliminar algum site cadastrado no sistema;

Esta será a lista de requisitos que usaremos no nosso exemplo. Para construir o modelo devemos olhar esta lista e identificar as entidades necessárias. Uma abordagem é olhar os substantivos. Estes serão entidades candidatas:

usuário, palavra chave, lista de sites, site, lista de palavras chaves, administrador, sistema de busca, cadastro Esta é uma lista preliminar, já eliminando repetições. O passo seguinte é separar o que é atributo, do que é classe, ficando somente as classes:

  • Usuário (administrador é um tipo de usuário especial)
  • Site (Lista de palavras chave é um atributo do site. Lista de Sites é uma coleção de sites)
  • Motor de busca
  • Cadastro de Sites

Depois disso iremos definir quais atributos são importantes para estas classes funcionarem de acordo com os requisitos.

  • Usuário: Id, Nome, Apelido, Senha, Email, Nível
  • Site: Id, Nome, Descrição, Url, KeyWords, Responsável (pelo cadastro)
  • Motor de Busca: Resultado da Busca, KeyWords (a serem encontrados)
  • Cadastro de Sites: Usuário responsável

Implementamos então as classes de modo que sejam manipuláveis pelo Hibernate. Este framework é responsável pela persistência, isso é, pelo armazenamento dos objetos criados na memória, para o banco de dados relacional. As regras para que as classes sejam manipuláveis pelo Hibernate são os seguintes:

  • A classe deverá ser um Java Bean definindo os atributos como dados privados e com funções públicas Getters e Setters. (veja em wikipedia as regras de uma classe Java Bean);
  • A classe deverá ter um construtor sem parâmetros para permitir o Hibernate criar objetos;
  • Deve possuir uma chave primária: isso é um campo id que armazenará um valor único que será gerado pelo Hibernate. A funcão setID() é privada, pois somente o Hibernate deverá modificar o campo chave.
  • A classe Motor de Busca e cadastro de Site não será persistido. Já que não é necessário a manutenção da busca realizada entre as chamadas.

No nosso exemplo teremos uma nova classe Usuario:

Usuario.class

Observe no código que criei uma propriedade “sites” com um HashSet. Esta propriedade irá auxiliar durante a manutenção dos sites que um usuário possui.

private Set sites = new HashSet();

E criamos o arquivo Usuario.hbm.xml na pasta sbusca. Este arquivo indica ao Hibernate o funcionamento da persistência da classe Usuário criada:

Usuario.hbm.xml

Além disso devemos incluir ao arquivo hibernate.cfg.xml:

<mapping resource=”sbusca/Usuario.hbm.xml”> </mapping>

Após todas estas codificações teremos duas entidades: Usuário e Sites. Além delas vamos definir uma classe chamada MotorBusca, que fará a lógica mais importante do sistema, isto é, a busca em si. Não é nada complicado e seria possível fazer o código diretamente nos Actions do Struts, mas vamos abusar um pouco de orientação a objeto. Olhando este exemplo simples quem sabe em um trabalho mais complexo você não se intimide. A classe deverá ter: MotorBusca:

  • Propriedade keyword: String e método executar() com e sem parâmetro;

E o código da classe ficará:

MotorBusca.java

Já definimos nesta aula um modelo quase completo para o nosso sistema. Deixei para depois somente o Cadastro de Sites, pois para implementá-lo será necessário falarmos de um CRUD, também conhecida como tela de Cadastro. Iremos ter uma aula somente sobre isso, quando voltaremos para tornar completo o modelo.

Para que você possa verificar se a busca está funcionando, criei uma classe simples de teste:

TesteBusca.java

Por hoje é só.

Dúvidas? vá para o fórum.

Posted on 15:27, fevereiro 25th, 2008 by Prof. Luis Eduardo

Sejam bem vindos, esta é a décima sexta aula de Programação Web em Java, para saber mais sobre o curso, começe em Curso de Programação Web em Java - CPWJ

Na última aula começamos a construir o sistema de busca. Configuramos o Hibernate para uso com o Netbeans. Esta primeira aplicação é para verem tudo funcionando junto. Depois irei destrinchar com detalhes cada parte do processo.

Camada Model

Hoje vamos terminar o sistema começando com a camada Model. A camada Model representa as entidades lógicas que precisamos para construir nossa aplicação. Para o funcionamento correto teremos a classe Sites, representando os sites armazenados no sistema, (isso já está pronto) e teremos também a classe MaquinaDeBusca.

A classe MaquinaDeBusca fará o trabalho pesado permitindo buscar uma lista de Sites de acordo com a palavra chave. Na verdade a classe de teste da última aula tem tudo que precisamos: A função “List buscaSites(String keyword)” realiza a busca dos itens com palavra chave igual ao parâmetro e devolve uma lista com os objetos que atendem a busca.

Camada View

A segunda camada que iremos trabalhar é a camada View. Vamos começar criando uma página JSP que apresenta um formulário para o preenchimento do usuário. Escolha “File/New File” no menu do Netbeans. Na janela “New File” selecione categoria “Web” tipo de arquivo “JSP” e clique em “Next”. Chame a página de “busca” e clique em “Finish”.

Para o formulário faremos algo bem simples:

<%@page contentType=”text/html” pageEncoding=”UTF-8″%>

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”

“http://www.w3.org/TR/html4/loose.dtd”>

<html>

<head>

<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>

<title>Sistema de Busca</title>

</head>

<body>

<form action=”buscar.do”>

<input name=”buscar”/>

<input type=”submit” value=”Buscar”/>

</form>

</body>

</html>

Veja que o formulário chama a ação “buscar.do”. O que será esta ação definiremos pelo framework Struts. Já vamos chegar lá. Vamos também criar um página chamada resultado.jsp que permitirá ver a lista de Sites encontrados. Para funcionar vamos supor que temos uma variável de requisição com o resultado da busca:

<%@page contentType=”text/html” pageEncoding=”UTF-8″%>

<%@taglib uri=”http://struts.apache.org/tags-html” prefix=”html”%>

<%@taglib uri=”http://struts.apache.org/tags-logic” prefix=”logic”%>

<%@taglib uri=”http://struts.apache.org/tags-bean” prefix=”bean” %>

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”

“http://www.w3.org/TR/html4/loose.dtd”>

<html>

<head>

<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>

<title>Sistema de Busca</title>

</head>

<body>

<form action=”buscar.do”>

<input name=”buscar”/>

<input type=”submit” value=”Buscar”/>

</form>

<logic:empty name=”sites” >

<h5>Nenhum Ítem Encontrado</h5>

</logic:empty>

<logic:notEmpty name=”sites”>

<table border=’1′>

<tr>

<th>Nome</th>

<th>Descrição</th>

<th>Url</th>

<th>Palavras Chave</th>

</tr>

<logic:iterate name=”sites” id=”site”>

<tr>

<td>${site.nome}</td>

<td>${site.descricao}</td>

<td>${site.url}</td>

<td>${site.keyword}</td>

</tr>

</logic:iterate>

</table>

</logic:notEmpty>

</body>

</html>

Os tags logic:empty e logic:iterate são bastante auto explicativos. São parte da biblioteca de componentes do Struts. Veja as linhas após o @page.

Camada Control

Agora só falta juntar todas as peças. Quem faz isso é a camada Control. E esta camada é implementada pelo framework Struts. Nós temos apenas que definir o que acontecerá em cada ação possível do usuário.

A única ação deste sistema que o usuário poderá executar é clicar em buscar no formulário de busca. Então vamos gerar um Ação Struts para tratar este evento.

Escolha novamente “File/New File” no menu do Netbeans e na janela “New File” escolha categoria “Struts”, tipo de arquivo “Struts Actions”. Clique em “Next” e digite o nome do Action como “buscarAction”, o package como “sbusca” e o action Path para “/buscar”. Clique em “Next” e desligue a opção “Use ActionForm Bean”. Clique em Finish.

Modifique a função “Execute” para determinar o que acontecerá ao clicar o botão Buscar:

public ActionForward execute(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

throws Exception {

MaquinaDeBusca mdb=new MaquinaDeBusca(); //Prepara um objeto do modelo

String busca= request.getParameter(”buscar”); //recupera o que o usuario digitou na caixa de texto

List sites=(ArrayList) mdb.buscaSites(busca); //Usa o modelo para obter os sites que batem com a palavra chave digitada pelo usuário

request.setAttribute(”sites”, sites); //armazena os sites encontrados para que a camada view (resposta.jsp) mostre a lista de sites encontrados

return mapping.findForward(SUCCESS); //passa a ação para o struts

}

(incluir “import java.util.*;” junto aos outros imports)

Falta muito pouco. Abra o arquivo struts-config.xml em WEB-INF na aba Project. Este arquivo está a configuração da amarração das ações com a views.

Modifique a linha <action path=”/buscar” type=”sbusca.buscarAction”/> para:

<action path=”/buscar” type=”sbusca.buscarAction”>

<forward name=”success” path=”/resultado.jsp”/>

</action>

Isso fará com que ao final da Action “BuscarAction” a página de resposta que irá para o usuário será a “resultado.jsp”.

Aproveite e defina a página padrão modificando a linha <action path=”/Welcome” forward=”/welcomeStruts.jsp”/> para: <action path=”/Welcome” forward=”/busca.jsp”/>

Pronto, basta executar a aplicação e terá o sistema funcionando! (tecla F6 ou menu Run/Run Main Project)

Sei que vão pintar milhares de dúvidas, porém estou aqui para esclarecer. (no fórum).

Na próxima aula vamos detalhar cada parte do processo, começando com um longo artigo sobre a camada Model.

Posted on 09:55, fevereiro 19th, 2008 by Prof. Luis Eduardo

Sejam bem vindos, esta é a décima quinta aula de Programação Web em Java, para saber mais sobre o curso, começe em Curso de Programação Web em Java - CPWJ

Vamos construir uma aplicação de verdade usando Java e Web e o modelo MVC. Já sabemos lidar com java, xhtml e css e um pouco de teoria sobre o MVC. Vamos colocar tudo pra funcionar?

Definindo o que será nosso primeiro programa: um sistema de busca. Vamos começar com um formulário simples com uma caixa de texto e um botão buscar, que quando clicado leva a outra página com a lista de sites com a palavra chave procurada.

Eu prometi que o conteúdo seria apresentado com o banco de dados mysql, porém tive uma seqüência de problemas com o hibernate mais mysql. Não quiz perder tempo com os detalhes. Eu não trabalho com o mysql, mas com o Oracle. Acredito que vocês possam encontrar material sobre o uso do mysql e hibernate, porém eu estou com pressa para publicar logo este material e como tenho experiência com Oracle é com ele mesmo que vou continuar. A forma de trabalho é a mesma, mudando apenas o xml de conexão com o banco.

Para uso do Oracle faça o download do Oracle 10g Express Edition em http://www.oracle.com/technology/software/products/database/index.html. É uma versão limitada mas de uso gratuíto. (Debian, Mandriva, Novell, Red Hat, Ubuntu e Windows compatíveis conforme o site Oracle).

Após o processo de instalação crie um usuário “sbusca” com senha “suasenha”.

É só o que você precisa na parte do banco de dados, o restante ficará por conta do Hibernate.

Para a configuração do ambiente do Netbeans 6.0, você precisa das seguintes arquivos de biblioteca:

  • para conectar no banco:
    • classes12.jar
  • para o Hibernate:
    • ant-antlr-1.6.5.jar
    • asm-attrs.jar
    • asm.jar
    • cglib-2.1.3.jar
    • commons-collections-2.1.1.jar
    • commons-logging-1.0.4.jar
    • dom4j-1.6.1.jar
    • ehcache-1.2.3.jar
    • hibernate3.jar
    • jta.jar

O classes12.jar você encontra aqui mesmo:jdbc Oracle. As bibliotecas do Hibernate você encontra no site do Hibernate em http://www.hibernate.org/6.html. A opção de download do Core é suficiente. (hibernate3.jar está na raiz do zip e os outros no diretório lib)

Reserve os arquivos indicados acima, somente eles, em um diretório qualquer de sua máquina.

Abra agora o Netbeans e vamos começar a fazer a mágica. Após o processo de carga escolha o opção File/New Project…

Escolha a Categoria Web e o tipo de projeto Web Application conforme a figura abaixo:
Novo Projeto

Clique em Next e digite o nome do projeto e se quiser escolha outra localização para a pasta do projeto. O restante pode deixar como indicado na tela:
Novo Projeto (2)

Clique em Next e ative a biblioteca do Struts conforme a figura:
Novo Projeto (3)

Clicando em Finish o projeto estará criado.

Vamos instalar as bibliotecas hibernate e do oracle para uso no nosso projeto. Na aba Projects use o botão direito sobre o nome do projeto (sbusca) e clique em properties. Na janela “Project Properties - sbusca” clique em libraries nas Categorias e no botão “Add JAR/Folder”. Selecione todos os arquivos do diretório que você colocou os arquivos jar e confirme clicando em “OK”.

Criado o projeto e definido as bibliotecas que vamos utilizar, o próximo passo é o Hibernate. Esta biblioteca auxilia no acesso ao Banco de Dados. Implementa a persistência aos objetos, fazendo a ponte objeto/relacional.

Vamos configurar o Hibernate para conexão com o Oracle. Para isso vamos escrever um arquivo de configuração XML. Clique com o botão direito do mouse sobre “Source Package” na aba do projeto e escolha a opção “New/ XML Document”. Digite o nome do arquivo como “hibernate.cfg.xml” (xml é automaticamente preenchido digite somente hibernate.cfg). Clique em “Next” e “Finish”.

Digite ou copie o código de configuração da conexão com o Oracle: (sempre cuidado com as aspas em códigos fonte, o WordPress detona lembra-se?)

<?xml version=’1.0′ encoding=’utf-8′?>
<!DOCTYPE hibernate-configuration
PUBLIC “-//Hibernate/Hibernate Configuration DTD 3.0//EN”
“http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd”>

<hibernate-configuration>

<session-factory>

<!– Database connection settings –>

<property name=”connection.driver_class”>oracle.jdbc.driver.OracleDriver</property>

<property name=”connection.url”>jdbc:oracle:thin:@10.89.9.6:1521:orabkl</property>

<property name=”connection.username”>SBUSCA</property>

<property name=”connection.password”>suasenha</property>

<!– JDBC connection pool (use the built-in) –>

<property name=”connection.pool_size”>1</property>

<!– SQL dialect –>

<!–property name=”dialect”>org.hibernate.dialect.HSQLDialect</property–>

<property name=”dialect”>org.hibernate.dialect.Oracle9Dialect</property>

<!– Enable Hibernate’s automatic session context management –>

<property name=”current_session_context_class”>thread</property>

<!– Disable the second-level cache –>

<property name=”cache.provider_class”>org.hibernate.cache.NoCacheProvider</property>

<!– Echo all executed SQL to stdout –>

<property name=”show_sql”>true</property>

<!– Drop and re-create the database schema on startup –>

<!– Depois que executar uma vez a classe de teste elimine a linha seguinte. Esta linha provoca a exclusão de todas as tabelas e recriação.–>

<property name=”hbm2ddl.auto”>create</property>

<mapping resource=”sbusca/Sites.hbm.xml”/>

</session-factory>

</hibernate-configuration>

Para facilitar a codificação com o Hibernate vamos criar uma classe para a conexão e desconexão do banco de dados. Clique com o botão direito do mouse sobre “Source Package” na aba do projeto e escolha a opção “New\java class”. Chame a classe de “HibernateUtil” e defina o package como “util”:
HibernateUtil

Clique em finish e copie o código da classe:

package util;

import org.hibernate.*;

import org.hibernate.cfg.*;

public class HibernateUtil {

private static final SessionFactory sessionFactory;

static {

try {

// Create the SessionFactory from hibernate.cfg.xml

sessionFactory = new Configuration().configure().buildSessionFactory();

} catch (Throwable ex) {

// Make sure you log the exception, as it might be swallowed

System.err.println(”Initial SessionFactory creation failed.” + ex);

throw new ExceptionInInitializerError(ex);

}

}

public static SessionFactory getSessionFactory() {

return sessionFactory;

}

}

Com a biblioteca carregada e as configurações do hibernate certas, vamos codificar uma classe Sites para representar um dado persistente. Clique em File/New File e escolha Categoria “java” e “File Types” igual a “Java Class”:

Nova Classe

Clique em “Next” e defina o nome da classe como Sites e o package como sbusca:

Nova Classe (2)

Clicando em “Finish” o Netbeans irá abrir a página com o código da Classe. Complete o código da classe criando os campos necessários:

package sbusca;

public class Sites {

private Long id;

private String nome;

private String url;

private String descricao;

private String keyword;

public Sites() {}

public Long getId() {

return id;

}

private void setId(Long id) {

this.id = id;

}

public String getNome() {

return nome;

}

public void setNome(String nome) {

this.nome = nome;

}

public String getUrl() {

return url;

}

public void setUrl(String url) {

this.url = url;

}

public String getDescricao() {

return descricao;

}

public void setDescricao(String descricao) {

this.descricao = descricao;

}

public String getKeyword() {

return keyword;

}

public void setKeyword(String keyword) {

this.keyword = keyword;

}

}

Para o funcionamento perfeito do Hibernate são necessários alguns detalhes:

  • Um campo Id para ser usado como campo chave automático;
  • Funções Get e Set públicos para manipulação dos dados privados;

Após a criação da classe é necessário definir um arquivo de mapeamento Hibernate. Com o botão direito do mouse sobre “sbusca” em destaque na figura, escolha a opção “new” e “others”.
Conectando Hibernate

Na janela “New File” escolha a categoria “XML” e “File Type” “Xml Document”. Clique em “Next” e defina o nome do arquivo como “Sites.hbm.xml” (a extensão xml é automaticamente inserida). Clique em “Next” e por fim em “Finish”. Copie o código abaixo para realizar a amarração:

<?xml version=”1.0″?>

<!DOCTYPE hibernate-mapping PUBLIC

“-//Hibernate/Hibernate Mapping DTD 3.0//EN”

“http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd”>

<hibernate-mapping>

<class name=”sbusca.Sites” table=”SITES”>

<id name=”id” column=”SITES_ID”>

<generator class=”native”/>

</id>

<property name=”nome”/>

<property name=”url”/>

<property name=”descricao”/>

<property name=”keyword”/>

</class>

</hibernate-mapping>

Para verificar se tudo funcionou até aqui, vamos criar uma classe para ver se o hibernate está conseguindo criar os registros: (espero que já saiba como criar a classe depois de eu repetir mais de uma vez a seqüencia de teclas!)

package sbusca;

import org.hibernate.Session;

import util.HibernateUtil;

public class MaquinaDeBusca {

public static void main(String[] args) {

MaquinaDeBusca mgr = new MaquinaDeBusca();

mgr.createAndStoreEvent(”Tecnoclasta”,”http://www.tecnoclasta.com”,”Detonanto Tecnologia”,”java, tecnologia, astronáutica, astronomia”);

mgr.createAndStoreEvent(”Uol Universo On-line”,”http://www.uol.com.br/“,”Universo On-line - O maior portal em língua portuguesa”,”portal, uol, sites, notícias”);

mgr.createAndStoreEvent(”Portal Terra”,”http://www.terra.com.br/“,”Qual a sua Terra”,”portal, terra, notícias, sites”);

mgr.createAndStoreEvent(”Folha de São Paulo”,”http://www.folha.uol.com.br/“,”O Jornal com Credibilidade”,”jornal, folha, notícias”);

HibernateUtil.getSessionFactory().close();

}

private void createAndStoreEvent(String nome, String url,

String descricao, String keyword) {

Session session = HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Sites umSite = new Sites();

umSite.setNome(nome);

umSite.setDescricao(descricao);

umSite.setUrl(url);

umSite.setKeyword(keyword);

session.save(umSite);

session.getTransaction().commit();

}

}

Executando esta classe o NetBeans vai trabalhar um bocado, e no fim do processo tudo deverá funcionar. Veja você mesmo se foi criada a tabela e se os registros foram criados corretamente.

Observe que o hibernate elimina toda a necessidade de codificação em SQL. Isso facilita muito a manutenção e mesmo portar o sistema para um banco de dados diferente.

Um segundo teste do hibernate consiste em executar uma consulta. Mude a função main para esta, inclua uma nova função “buscaSites()” e execute a classe novamente:

public static void main(String[] args) {

MaquinaDeBusca mgr = new MaquinaDeBusca();

//String teste=”store”;

String teste = “list”;

if (teste.equals(”store”)) {

mgr.createAndStoreEvent(”Tecnoclasta”, “http://www.tecnoclasta.com”, “Detonanto Tecnologia”, “java, tecnologia, astronáutica, astronomia”);

mgr.createAndStoreEvent(”Uol Universo On-line”, “http://www.uol.com.br”, “Universo On-line - O maior portal em língua portuguesa”, “portal, uol, sites, notícias”);

mgr.createAndStoreEvent(”Portal Terra”, “http://www.terra.com.br”, “Qual a sua Terra”, “portal, terra, notícias, sites”);

mgr.createAndStoreEvent(”Folha de São Paulo”, “http://www.folha.uol.com.br”, “O Jornal com Credibilidade”, “jornal, folha, notícias”);

} else if (teste.equals(”list”)) {

List sites = mgr.buscaSites(”notícias”);

for (int i = 0; i < sites.size(); i++) {

Sites umSite = (Sites) sites.get(i);

System.out.println(”Site: ” + umSite.getNome() +

“: ” + umSite.getDescricao()+ “, Url:”+umSite.getUrl());

}

}

HibernateUtil.getSessionFactory().close();

}

public List buscaSites(String keyword) {

Session session = HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

List result = session.createQuery(”from Sites where keyword like ‘”+ keyword+”‘”).list();

session.getTransaction().commit();

return result;

}

Dando certo será listado os sites da Uol, Terra e Folha.

Pensei em fazer isso em uma aula só, porém está ficando muito, muito longo. Então fica aqui a primeira parte do sistema de busca. Na próxima aula terminamos.

Dúvidas? vá para o fórum.

Posted on 08:54, fevereiro 14th, 2008 by Prof. Luis Eduardo

Sejam bem vindos, esta é a décima quarta aula de Programação Web em Java, para saber mais sobre o curso, começe em Curso de Programação Web em Java - CPWJ.

Até a última aula de HTML e CSS descobrimos como preparar uma página para publicação na Internet. Porém estas página preparadas assim tem um problema: são estáticas. Uma vez escritas e copiadas para o servidor, permanecerão exatamente iguais em todos os detalhes.

Com o conteúdo de Java aprendemos como construir programas. Vamos juntar as duas coisas agora.

JSP é uma sigla para Java Server Pages, e é uma tecnologia desenvolvida pela Sun para permitir o uso do Java para produzir páginas dinâmicas na Web. É utilizada em conjunto com classes Java com regras específicas para atendimento a requisições dos usuários. Estas classes são os Servlets.

Revisando como funciona a Web

O cliente faz uma requisição através do navegador quando:

  • Digita um endereço na barra de endereço e envia;
  • Clica em um botão de envio de um formulário;
  • Modifica um dado em um formulário com código javascript relacionado;

Na ação do usuário esta requisição é enviada pela Internet (ou Intranet) até o servidor de Web e este faz uma série de ações:

  • Interpreta a requisição
  • Procura na pasta root o arquivo HTML pedido
  • Envia o arquivo de volta ao navegador do cliente

Por fim o navegador do cliente interpreta o código Html, css e “desenha” o resultado.

Páginas dinâmicas

Com as páginas dinâmicas a diferença está nas ações do servidor de WEB:

  • Interpreta a requisição e detectando um pedido para página dinâmica:
  • Aciona uma classe Servlet
  • A classe Servlet interpreta qual ação foi requisitada e aciona as classes adequadas
  • Após a execução das ações, é chamada a página JSP para preparar a resposta visuais à requisição. As páginas JSP possuem código para produção de uma página HTML ad-roc, isto é sob demanda.
  • O Servidor envia para o navegador cliente a página de resposta gerada

Observe que temos duas camadas de código para produção de uma página dinâmica: os Servlets e o JSP. Um modelo mais completo utiliza três camadas e é chamada MVC Model-View-Control. Vamos ver cada uma destas camadas:

Model

A camada Model (modelo) possui a representação das informações do programa. No nosso exemplo, esta camada irá implementar classes para representar as entidades envolvidas no programa. Por exemplo em um programa de frente de caixa, haveria classes para representar produtos, compras, notas fiscais, itens de notas fiscais, métodos de pagamento. Estas classes iriam também armazenar todas as ações que eventualmente o usuários necessitasse realizar sobre estas entidades. Normalmente as classes utilizam um sistema de banco de dados para fazer o armazenamento persistente. Utilizaremos a biblioteca Hibernate para facilitar a persistência dos dados. Iremos utilizar o banco de dados Mysql para os exemplos

View

A camada View (visão) é responsável por construir uma interface para interação do usuário. Ela prepara a apresentação da informação para que o usuário possa reagir as respostas e continuar utilizando o programa. Em Java utilizaremos páginas JSP com Jstl para produzir as páginas de resposta. Observe que a camada View não acessa diretamente o banco de dados, ela recebe normalmente objetos Collection geradas pelas classes da camada Model e produz código HMTL a partir deles. Percebeu porque tivemos uma longa aula sobre coleções? (revise)

Control

A camada Control (controle) é a camada que controla o processo. Cada requisição do usuário é primeiro interpretado pela camada de controle que determina qual ação deve ser executada no modelo e encaminha depois a resposta do modelo para a camada de visão. No nosso exemplo quem irá fazer toda a camada de controle será o Struts.

Preparem-se, na próxima aula um sistema de busca completo será nosso primeiro programa!

Arrumem suas máquinas:

Dúvidas? vá para o fórum.

Buscar:

Arquivos

Índice

Arquivo

julho 2008
S T Q Q S S D
« jun    
 123456
78910111213
14151617181920
21222324252627
28293031  

RSS Meu FriendFeed

Contato