Você está na página 1de 17

Integrao com Banco de Dados

Acesso a bancos de dados


Servlets so aplicaes Java e, como qualquer outra aplicao Java, podem usar JDBC e integrar-se com um banco de dados relacional Pode-se usar java.sql.DriverManager e obter a conexo da forma tradicional
Class.forName("nome.do.Driver"); Connection con = DriverManager.getConnection("url", "nm", "ps");

Pode-se obter as conexes de um pool de conexes atravs de javax.sql.DataSource via JNDI (J2EE)
DataSource ds = (DataSource)ctx.lookup("jbdc/Banco"); Connection con = ds.getConnection();

Servlet que faz um SELECT em banco


Para tornar um servlet capaz de acessar bancos de dados, basta incluir cdigo JDBC dentro dele

Servlet que usa DAO


Misturar cdigo de servlet com banco de dados no uma boa idia. O ideal disponibilizar uma interface independente de banco para o servlet

Exemplo de DAO
O DAO um objeto que isola o servlet da camada de dados, deixando-o vontade para mudar a implementao Faa-o sempre implementar uma interface Java

Model View Controller

Design de aplicaes JSP


Design centrado em pginas

Aplicao JSP consiste de seqncia de pginas (com ou sem beans de dados) que contm cdigo ou links para chamar outras pginas

Design centrado em servlet (FrontController ou MVC)

Aplicao JSP consiste de pginas, beans e servlets que controlam todo o fluxo de informaes e navegao Favorece uma melhor organizao em camadas da aplicao, facilitando a manuteno e promovendo o reuso de componentes. Um nico servlet pode servir de fachada Permite ampla utilizao de J2EE design patterns

Layout centrado em pginas (JSP Model 1)

Layout centrado em servlet (JSP Model 2)

O que MVC
Padro de arquitetura: Model View Controller

Tcnica para separar dados ou lgica de negcios (Model) da interface do usurio (View) e do fluxo da aplicao (Control)

Como implementar?
H vrias estratgias Todas procuram isolar

As operaes de controle de requisies em servlets e classes ajudantes, Operaes de gerao de pginas em JSP e JavaBeans, e Lgica das aplicaes em classes que no usam os pacotes javax.servlet

Uma estratgia consiste em se ter um nico controlador (FrontController pattern) que delega requisies a diferentes objetos que implementam comandos que o sistema executa (Command pattern)

Command Pattern
um padro de projeto clssico catalogado no livro "Design Patterns" de Gamma et al (GoF = Gang of Four)

Serve para encapsular uma requisio como um objeto, permitindo que clientes parametrizem diferentes requisies, filas ou requisies de log, e suportar operaes reversveis." [GoF]

Consiste em usar polimorfismo para construir objetos que encapsulam um comando e oferecer um nico mtodo execute() com a implementao do comando a ser executado

Command Pattern

Command Pattern

Command Pattern em Java


public interface public Command class Server { { public Object execute(Object private Database arg); db = ...; } private HashMap cmds = new HashMap(); public Server() { public class DeleteCommand implements Command { initCommands(); } public DeleteCommand(Database db) { private void initCommands() { public class NewCommand implements Command { this.db = db; cmds.put("new", new NewCommand(db)); } cmds.put("del", public NewCommand(Database db) { new DeleteCommand(db)); this.db = db; public Object execute(Object arg) { ... } d = (Data)arg; Data } int id = d.getArg(0); public void service(String cmd, public Object execute(Object arg) { db.delete(id); Object data) { Data d = (Data)arg; } ... int id = d.getArg(0); } Command c = (Command)cmds.get(cmd); String nome = d.getArg(1); ... db.insert(new Member(id, nome)); Object result = c.execute(data); } ... } } }

FrontController com Command Pattern


Os comandos so instanciados e guardados em uma base de dados na memria (HashMap, por exemplo)

Pode-se criar uma classe especfica para ser fbrica de comandos

O cliente que usa o comando (o servlet), recebe na requisio o nome do comando, consulta-o no HashMap, obtm a instncia do objeto e chama seu mtodo execute()

O cliente desconhece a classe concreta do comando. Sabe apenas a sua interface (que usa para fazer o cast ao obt-lo do HashMap

No HashMap
Comando c = new ComandoInserir(); comandosMap.put("inserir", c);

No servlet:
String cmd = request.getParameter("cmd"); Comando c = (Comando)comandosMap.get(cmd); c.execute();

Exemplo de implementao

Você também pode gostar