Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
1. OBJETIVOS
Construir uma Aplicao Web completa utilizando Servlets e JSP.
Reconhecer e interpretar o modelo de desenvolvimento baseado em Camadas.
Acessar banco de dados utilizando Java Beans e JDBC.
2. CONTEDOS
Modelo de desenvolvimento Web multicamadas.
Camada de Acesso a Dados: JavaBeans.
Camada de Apresentao: JSP.
Camada de Negcios: Servlets.
4. INTRODUO
Nesta unidade voc aprender como desenvolver uma Aplicao Web com conexo a ban-
co de dados via JDBC.
Vamos construir uma Aplicao completa para Controle de funcionrios de uma empresa,
a qual permitir que o usurio adicione novos funcionrios, possa remover os cadastrados, liste
e ainda pesquise pelo nome.
Mos a obra!
Tomando como base nossa Aplicao, vamos criar uma Servlet que ser responsvel pelo
processamento de todas as requisies enviadas pelo clientes. Esse Servlet, direcionar as soli-
citaes para as pginas dinmicas.
Observe que as pginas dinmicas tero como objetivo a apresentao das respostas para
o cliente, as quais podero ter apenas contedo esttico (XHTML) ou dados armazenados no
banco de dados.
Para armazenar as informaes utilizaremos o banco de dados MySQL, e a conexo ser
realizada atravs de JDBC. As pginas JSP no tero acesso direto aos dados armazenados, desse
modo, criaremos uma Camada de Acesso aos Dados utilizando componentes JavaBeans.
Tomando, portanto, como base o modelo MVC, teremos:
Camada de Acesso aos Dados (Model): JavaBeans.
Camada de Apresentao (View): Pginas dinmicas JSP.
Camada de Negcios (Controller): Servlets.
U5 -Estudo de Caso: Construindo uma Aplicao Web utilizando componentes JavaBeans e conexo com Banco de Dados via JDBC 71
O prximo passo ser o de criar nosso primeiro componente Java Beans para manipular
os dados dos funcionrios.
Para tanto, dentro do pacote com.controlefuncionarios, crie uma nova classe Java com o
nome de FuncionariosBean:
1 package com.controlefuncionarios;
2 public class FuncionarioBean {
3 private int id;
4 private String nome;
5 private String endereco;
6 private String bairro;
7 private String cidade;
8 private String cep;
9 private double salario;
10
11 public void setId(int id) {
12 this.id = id;
13 }
14 public int getId() {
15 return id;
16 }
17 public void setNome(String nome) {
18 this.nome = nome;
19 }
20 public String getNome() {
21 return nome;
22 }
23
24 public void setEndereco(String endereco) {
25 this.endereco = endereco;
26 }
27 public String getEndereco() {
28 return endereco;
29 }
30 public void setBairro(String bairro) {
31 this.bairro = bairro;
32 }
33 public String getBairro() {
34 return bairro;
35 }
36 public void setCidade(String cidade) {
37 this.cidade = cidade;
38 }
39 public String getCidade() {
40 return cidade;
41 }
42 public void setCep(String cep) {
43 this.cep = cep;
44 }
45 public String getCep() {
46 return cep;
47 }
48 public void setSalario(double salario) {
49 this.salario = salario;
50 }
51 public double getSalario() {
52 return salario;
53 }
54 }
Note que para realizar o acesso ao banco de dados vamos criar um outro componente
Java Beans. Ento, adicione ao pacote com.controlefuncionarios, uma nova classe Java com o
nome de DadosBean.
O construtor da classe responsvel pela conexo com o banco de dados. Para isso, utili-
zaremos a classe Connection, disponvel no pacote java.sql.*.
Lembre-se de declarar os atributos:
private Connection conexao;
private Statement stmt;
1 public DadosBean() {
2 try{
U5 -Estudo de Caso: Construindo uma Aplicao Web utilizando componentes JavaBeans e conexo com Banco de Dados via JDBC 73
3 Class.forName(com.mysql.jdbc.Driver);
conexao = DriverManager.getConnection( jdbc:mysql://localhost/
4
funcionario, root, 123 );
5 stmt = conexao.createStatement();
6 }catch ( ClassNotFoundException c ){
7 c.printStackTrace();
8 } catch (SQLException e) {
9 e.printStackTrace();
10 }
11 }
Alm do construtor, a classe DadosBean contm os seguintes mtodos:
public void adicionarFuncionario(FuncionarioBean f) adiciona um novo
funcionrio ao banco de dados.
1 public void adicionarFuncionario(FuncionarioBean f){
2
3 String sql = INSERT INTO funcionario.tab_funcionario
4 + (func_nome,func_endereco,func_bairro,func_cidade,
5 + func_cep, func_salario)
6 + VALUES
7 + (+ f.getNome() + , + f.getEndereco()
8 + , + f.getBairro() + , + f.getCidade()
9 + , + f.getCep() + , + f.getSalario() + );
10
11 try {
12 stmt.executeUpdate(sql);
13 } catch (SQLException e) {e.printStackTrace();}
14 }
public void removerFuncionario(int codigo) remove um funcionrio do banco
de dados, para isso necessrio que seja passado como parmetro o cdigo
do funcionrio.
1 public void removerFuncionario(int codigo){
2 String sql = DELETE FROM funcionario.tab_funcionario
3 + WHERE func_id = + codigo;
4 try {
5 stmt.executeUpdate(sql);
6 } catch (SQLException e) {
7 e.printStackTrace();
8 }
9 }
public ArrayList< FuncionarioBean > listarFuncionarios() retorna a lista dos
funcionrios cadastrados no banco de dados. Para facilitar a apresentao dos
dados, este mtodo retorna um objeto da classe ArrayList.
1 public ArrayList< FuncionarioBean > listarFuncionarios()
2 throws SQLException{
3
4 ArrayList< FuncionarioBean > lista =
9
stmt.executeQuery(SELECT * FROM tab_funcionario );
10
11 while( dados.next() ){
12 FuncionarioBean f = new FuncionarioBean();
13 f.setId(dados.getInt(1));
14 f.setNome(dados.getString(2));
15 f.setEndereco(dados.getString(3));
16 f.setBairro(dados.getString(4));
17 f.setCidade(dados.getString(5));
18 f.setCep(dados.getString(6));
19 f.setSalario(dados.getDouble(7));
20 lista.add(f);
21 }
22 } catch (SQLException e) { e.printStackTrace(); }
23 return lista;
24 }
24 return lista;
25 }
Para terminamos a Camada de Acesso aos Dados, vamos aproveitar e criar o banco de
dados. Lembre-se de que voc pode criar as Tabelas diretamente no console do banco, porm
essa tarefa pode ser facilmente executada com a ferramenta MySQL Query Browser.
Criaremos, portanto, o banco de dados com o nome de funcionrio:
1 CREATE DATABASE `funcionario`
7. CAMADA DE APRESENTAO
Na Camada de Apresentao vamos criar todas as pginas que sero visualizadas pelo
usurio.
Utilizaremos um modelo simples, que voc poder melhorar se quiser!
Vamos comear codificando o arquivo index.jsp, o qual apresentar um menu de opes
para o usurio:
Veja que a propriedade action j faz referncia ao Servlet da Camada de Negcios, o qual
ser realizado em breve.
Alm disso, criaremos um arquivo de cabealho (cabealho.jsp) que ser includo em
todas as pginas da Aplicao:
1 <hr/>
2 <p class=centro>
<a href=Controlador> Clique aqui para ir a pgina inicial
3
</a>
4 <br/>
5 <br/>
6 ©2008 - Todos os direitos reservados.
7 </p>
8 </body>
9 </html>
1 <jsp-config>
2 <jsp-property-group>
3 <display-name>CabecalhoRodape</display-name>
4 <url-pattern>*.jsp</url-pattern>
5 <include-prelude>/cabecalho.jsp</include-prelude>
6 <include-coda>/rodape.jsp</include-coda>
7 </jsp-property-group>
8 </jsp-config>
Vamos criar, agora, uma Folha de Estilos em Cascata para melhorar a apresentao do
contedo.
Para tanto, crie um novo arquivo com o nome de estilo.css:
U5 -Estudo de Caso: Construindo uma Aplicao Web utilizando componentes JavaBeans e conexo com Banco de Dados via JDBC 77
body {
1
2 margin :0px;
padding
3
:0px;
4 font-family :Verdana;
5 }
6
7 h1{
8 width : 100%;
9 padding : 20px;
10 margin : 0px;
11 background : #CCECFF;
12 }
13
14 form{
15 margin: 15px;
16 }
17 p.centro{
18 text-align:center;
19 }
Verifique se tudo foi codificado corretamente at agora compilando a sua Aplicao. Por
enquanto, nenhuma funcionalidade pode ser utilizada, mas voc dever ver uma tela semelhante
a essa:
Voc pode notar que nas linhas um e trs fazemos uma referncia aos componentes Java
Beans da Camada de Acesso a Dados FuncionarioBean e DadosBean.
Note tambm, que os dados do novo funcionrio so facilmente adicionados ao banco de
dados com a chamada do mtodo adicionarFuncionario na linha 35:
U5 -Estudo de Caso: Construindo uma Aplicao Web utilizando componentes JavaBeans e conexo com Banco de Dados via JDBC 79
O prximo passo criar uma pgina para que seja possvel remover funcionrios cadas-
trados. Para isso, crie um novo arquivo JSP com o nome de remover.jsp. Tambm utilizaremos
nessa pgina o componente Java Beans DadosBean para remover os funcionrios.
1 <jsp:useBean id = dados scope = request
2 class = com.controlefuncionarios.DadosBean />
3 <%
4 String codigo = request.getParameter(txtCodigo);
5 if ( codigo == null || codigo.isEmpty() ){
6 %>
7 <h2> Remover Funcionrio</h2>
8 <form action=remover.jsp method=post>
9 Cdigo do funcionrio: <input type=text name=txtCodigo />
10 <input type=submit value=remover />
11 </form>
12 <%
13 }else{
14 %>
15 <h2>Funcionrio removido sucesso!</h2>
16 <%
17
dados.removerFuncionario(Integer.parseInt(codigo));
18 }
19 %>
Vamos criar agora uma pgina para listar os funcionrios cadastrados. Gere, portanto,
uma nova pgina JSP com o nome de listar.jsp:
1 <%@ page import = java.util.* %>
2 <%@ page import=java.text.DecimalFormat%>
3 <%@ page import = com.controlefuncionarios.* %>
4 <jsp:useBean id = dados scope = request
5 class=com.controlefuncionarios.DadosBean />
6 <%
7 List lista = dados.listarFuncionarios();
8 Iterator listaIterator = lista.iterator();
9 FuncionarioBean f;
10
11 if ( lista.size() > 0 ){
12 DecimalFormat df = new DecimalFormat(0.00);
13 %>
14 <h2> Listar Funcionrios</h2>
<table border=0 width=100%>
15
16 <%
17 while ( listaIterator.hasNext() ){
18 f = ( FuncionarioBean ) listaIterator.next();
19 %>
20 <tr><td>Cdigo:</td><td> <%= f.getId() %> </td></tr>
21 <tr><td>Nome:</td><td> <%= f.getNome() %> </td></tr>
Para finalizar a Camada de Apresentao, vamos criar uma pgina para que o usurio possa
pesquisar os funcionrios cadastrados. Crie um novo arquivo JSP com o nome de pesquisar.jsp:
29 f = ( FuncionarioBean ) listaIterator.next();
30 %>
31 <tr><td>Cdigo:</td><td> <%= f.getId() %> </td></tr>
32 <tr><td>Nome:</td><td> <%= f.getNome() %> </td></tr>
33 <tr><td>Endereo:</td><td> <%= f.getEndereco() %> </td></tr>
34 <tr><td>Bairro:</td><td> <%= f.getBairro() %> </td></tr>
35 <tr><td>Cidade:</td><td> <%= f.getCidade() %> </td></tr>
36 <tr><td>Cep:</td><td> <%= f.getCep() %> </td></tr>
<tr><td>Salrio: R$</td><td> <%= df.format(f.getSalario()) %> </td></
37
tr>
38 <tr><td colspan=2><hr/></td></tr>
39 <%
40 }
41 %>
42 </table>
43 <%
44 }else{
45 %>
46 <h2>Nenhum funcionrio encontrado. </h2>
47 <%
48
}
49 }
50 %>
Finalizamos com isso a Camada de Apresentao!
8. CAMADA DE NEGCIOS
A Camada de Negcio conhecida, tambm, como Camada Lgica, responsvel pelo tra-
tamento das requisies enviadas pelos clientes.
Para isso, vamos construir um Servlets que receber as requisies e realizar o encami-
nhamento para o recurso solicitado.
Crie um novo Servlet com o nome de Controlador este Servlet dever ser colocado dentro
do pacote com.controlefuncionarios.
Deixe que o NetBeans adicione as informaes referente ao Servlet automaticamente no
arquivo web.xml:
Veja:
1 package com.controlefuncionarios;
2
3 import java.io.*;
4 import javax.servlet.ServletException;
5 import javax.servlet.http.HttpServlet;
6 import javax.servlet.http.HttpServletRequest;
7 import javax.servlet.http.HttpServletResponse;
8
9 public class Controlador extends HttpServlet {
10
11 public Controlador() {
12 }
13
protected void processRequest(HttpServletRequest req, HttpServletResponse
14
res)
15 throws ServletException, IOException {
16
17 String op = req.getParameter(grpMenu);
18 if ( op != null){
19
20 int opInt = Integer.parseInt(op);
21 switch(opInt){
22 case 1:
23 res.sendRedirect(adicionar.jsp);
24 break;
25 case 2:
26 res.sendRedirect(remover.jsp);
27 break;
28 case 3:
29 res.sendRedirect(listar.jsp);
U5 -Estudo de Caso: Construindo uma Aplicao Web utilizando componentes JavaBeans e conexo com Banco de Dados via JDBC 83
30 break;
31 case 4:
32 res.sendRedirect(pesquisar.jsp);
33 break;
34 default:
35 res.sendRedirect(index.jsp);
36
37 }
38 }else
39 res.sendRedirect(index.jsp);
40 }
41
protected void doGet(HttpServletRequest request, HttpServletResponse
42
response)
43 throws ServletException, IOException {
44 processRequest(request, response);
45 }
46
protected void doPost(HttpServletRequest request, HttpServletResponse
47
response)
48 throws ServletException, IOException {
49 processRequest(request, response);
50 }
51 }
Finalmente terminamos a construo da Aplicao, assim, a estrutura do projeto ficou da
seguinte forma:
9. QUESTES AUTOAVALIATIVAS
importante que aproveite este momento para realizar uma autoavaliao sobre os con-
ceitos estudados nesta unidade:
1) Para que servem os componentes Java Beans?
2) O que JDBC?
10. CONSIDERAES
Chegamos ao final do desenvolvimento da nossa Aplicao Web com acesso a banco de
dados utilizando componentes Java Beans e JDBC.
Com a construo da Aplicao, foi possvel notar a importncia da utilizao de padres
no desenvolvimento de Aplicaes. O modelo MVC muito empregado nesses casos e permitiu
a separao clara e transparente da Aplicao nas Camadas de: Acesso a Dados, Apresentao
e Negcios.
Tambm vimos como fcil utilizar os componentes Java Beans na conexo com banco de
dados. Com eles, foi possvel retirar todo cdigo de acesso aos dados da Camada de Apresenta-
o.
Finalmente, o Servlet teve papel crucial no desenvolvimento do projeto. Ele funcionou
como um perfeito maestro no tratamento das requisies.
11. E-REFERNCIAS
SUN 2008. Servlets. Disponvel em: <http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Servlets.html>. Acesso em: 9 dez. 2013.
J2EE Sun Developer Network. Homepage. Disponvel em: <http://java.sun.com/javaee/>. Acesso em: 9 dez. 2013.
SERVLETS - Sun Developer Network. Servlets. Disponvel em: <http://java.sun.com/products/servlet/>. Acesso em: 9 dez. 2013.
______. Products. Disponvel em: <http://java.sun.com/products/jsp/>. Acesso em: 9 dez. 2013.
Durante alguns anos o desenvolvimento de Aplicaes Web era apenas uma tendncia,
hoje j uma realidade. Assim, no deixe de aplicar os ensinamentos aprendidos ao longo da
disciplina.
Sucesso!