Você está na página 1de 11

Java Home

Aprender Java

Exemplo completo com JSP JSTL Servlet JDBC


PostGreSQL

Posted by Andr Flix |

S S S S M

Sunday, 16 March, 2014

Home

IDE

Eclipse

Exemplo completo com JSP JSTL Servlet JDBC


PostGreSQL

No Comments

Exemplo completo com JSP JSTL Servlet JDBC


PostGreSQL
Ol Amigos,
Hoje criaremos um projeto completo com as tecnologias java: JSP + JSTL + Servlet + JDBC + PostgreSQL.
Claro que iniciaremos com uma breve descrio de cada uma delas.

Tecnologias utilizadas no exemplo


JSP (Java Server Page) a tecnologia Java para construo de pginas dinmicas.
JSTL (JSP Stantard Tag Library) uma biblioteca de tags que nos ajudam na construo de pgina dinmica sem utilizarmos a scriplet (cdigo Java diretamente
na pgina)
Servlet so classes especiais java que recebem e respondem a requisies do protocolo HTTP.
JDBC (Java Database Connectivity) a forma padro de acesso a Banco de dados em Java
PostgreSQL um banco de dados relacional gratuito e de grande aceitao no mercado e com caractersticas muito boas para sistemas na Internet
Padro MVC Model View Controller um padro de projeto que divide nossa aplicao em vrias camadas

1. Introduo
Este exemplo comea uma pgina inicial index.jsp que exibe as informaes de funcionamento do projeto. Ao clicar na imagem principal exibido o menu.jsp.
Esta pgina tem a opo de listagem de alunos ou realizar a manuteno (Incluso, alterao, consulta ou excluso de um Aluno). Se escolhermos a opo de
cadastro ser exibida a tela de manuteno.
Veja os campos disponveis.

Cursos online Java Moodle

img 1 Viso macro do nosso projeto


Para maior facilidade as classes e pginas tambm foram comentadas para auxiliar no entendimento e estudo do cdigo.

VocdeverterconhecimentoprviodeAplicaoWebJavaeutilizaodoTomcat.
Casoaindanotenha,acesseoslinksinformadosnofinaldesteartigo.

2 . Criao da tabela no banco de dados


Script de criao da tabela no Banco de dados:
1
2
3
4
5
6
7
8

CREATETABLEIFNOTEXISTStbaluno(
matriculabigintNOTNULL,
nomecharactervarying(255),
telefonecharactervarying(255),
emailcharactervarying(255),
datacadastrodate,
CONSTRAINTtbaluno_pkeyPRIMARYKEY(matricula)
);

criado o comando que gera a tabela caso ela ainda no exista.

3 . Construo do projeto
Para comear vamos construir a estrutura do nosso projeto. Ao final deste tutorial o seu projeto deve estar como mostrado na imagem abaixo:

Sobre

Tutoriais

Nela temos o nome do projeto (AcademicNetWeb)


Abaixo os ns mais importantes so:
-> Java Resources (src) (Aqui teremos os cdigos fontes arquivos .java)
-> WebContent (Aqui ficam os arquivos web JSPs, imagens, JavaScript).
Para criar o projeto, no Eclipse, acesse o menu File >> Other>> Na tela que aparece escolha Web >> Dynamic Web Project.
D o nome de AcademicNetWeb Next >> Next Na ltima tela Selecione a opio Generate web.xml deployment descriptor. >> Finish
Para saber mais sobre criao de projeto web no Eclipse Clique Aqui
Vamos criar a classe de entidade Aluno. O contedo deve ser o seguinte:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

packagebr.com.feltex.entidade;

importjava.io.Serializable;
importjava.util.Date;

/**
*
*Classedeentidadequepossuiosatributosdoaluno
*
*/
publicclassAlunoimplementsSerializable{

privatestaticfinallongserialVersionUID=309513637403441918L;

privateLongmatricula;

privateStringnome;

privateStringtelefone;

privateStringemail;

privateDatedataCadastro;

publicAluno(){}

publicAluno(Longmatricula){

super();

this.matricula=matricula;

publicAluno(Longmatricula,Stringnome){

super();

this.matricula=matricula;

34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83

this.nome=nome;

publicDategetDataCadastro(){

returndataCadastro;
}
publicStringgetEmail(){

returnemail;
}
publicLonggetMatricula(){

returnmatricula;
}
publicStringgetNome(){

returnnome;
}
publicStringgetTelefone(){

returntelefone;
}
publicvoidsetDataCadastro(DatedataCadastro){

this.dataCadastro=dataCadastro;
}
publicvoidsetEmail(Stringemail){

this.email=email;
}
publicvoidsetMatricula(Longmatricula){

this.matricula=matricula;
}
publicvoidsetNome(Stringnome){

this.nome=nome;
}
publicvoidsetTelefone(Stringtelefone){

this.telefone=telefone;
}
@Override
publicStringtoString(){

return"Aluno[matricula="+matricula+",nome="+nome

+",telefone="+telefone+",email="+email

+",dataCadastro="+dataCadastro+"]";
}

A Classe DAO a classe que utilizamos para conectar como Banco de Dados PostgreSQL.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

packagebr.com.feltex.dao;

importjava.sql.Connection;
importjava.sql.DriverManager;

/**
*ClasseresponsvelpelaConexocomoBancodedados.utilizadaporoutras
*classesdepersistnciadedados.
*
*/
publicclassDAO{

publicConnectiongetConexao(){

Connectionconexao=null;

Stringusuario="postgres";

Stringsenha="teco01";

StringnomeBancoDados="bdacademicnet";

try{

Class.forName("org.postgresql.Driver");

conexao=DriverManager.getConnection("jdbc:postgresql://localhost:5432/"+nomeBancoDados,

usuario,senha);

}catch(Exceptione){

e.printStackTrace();

returnconexao;

}
}

A classe AlunoDAO responsvel por realizar todas as operaes com Banco de dados.
Nela encontramos os mtodos de persistncia (
alterar alterao de um registro no banco de dados
excluir exclui um registro no banco de dados
existe Verifica a existncia de uma matrcula informada no banco de dados

inserir incluir os dados de um aluno no banco de dados


listar retorna todos os registros existentes no banco de dados
consultar retorna um registro identificado com a matrcula informada
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84

packagebr.com.feltex.dao;

importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.Statement;
importjava.util.ArrayList;
importjava.util.List;

importbr.com.feltex.entidade.Aluno;

/**
*
*ClassedePersistnciadedadosdosobjetosdeAluno
*"filha"daClasseDAO.
*
*/

publicclassAlunoDAOextendsDAO{

publicvoidalterar(Alunoaluno){

try{

Connectionconexao=getConexao();

PreparedStatementpstmt=conexao

.prepareStatement("UpdatetbalunoSETnome=?,telefone=?,email=?,datacadastro=?"

+"WHEREmatricula=?");

pstmt.setString(1,aluno.getNome());

pstmt.setString(2,aluno.getTelefone());

pstmt.setString(3,aluno.getEmail());

pstmt.setDate(4,newjava.sql.Date(aluno.getDataCadastro().getTime()));

pstmt.setLong(5,aluno.getMatricula());

pstmt.execute();

pstmt.close();

conexao.close();

}catch(Exceptione){

e.printStackTrace();

publicvoidexcluir(Alunoaluno){

try{

Connectionconexao=getConexao();

PreparedStatementpstm=conexao

.prepareStatement("Deletefrom tbalunowherematricula=?");

pstm.setLong(1,aluno.getMatricula());

pstm.execute();

pstm.close();

conexao.close();

}catch(Exceptione){

e.printStackTrace();

publicbooleanexiste(Alunoaluno){

booleanachou=false;

try{

Connectionconexao=getConexao();

PreparedStatementpstm=conexao

.prepareStatement("Select*fromtbalunowherematricula=
?");

pstm.setLong(1,aluno.getMatricula());

ResultSetrs=pstm.executeQuery();

if(rs.next()){

achou=true;

pstm.close();

conexao.close();

}catch(Exceptione){

e.printStackTrace();

returnachou;

publicvoidinserir(Alunoaluno){

try{

Connectionconexao=getConexao();

PreparedStatementpstm=conexao

.prepareStatement("Insertinto tbaluno(matricula,nome,telefone,email,datacadastro)values(?,?,?,?,?)"

pstm.setLong(1,aluno.getMatricula());

pstm.setString(2,aluno.getNome());

pstm.setString(3,aluno.getTelefone());

pstm.setString(4,aluno.getEmail());

pstm.setDate(5,newjava.sql.Date(aluno.getDataCadastro()

85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
10
0
10
1
10
2
10
3
10
4
10
5
10
6
10
7
10
8
10
9
11
0
11
1
11
2
11
3
11
4
11
5
11
6
11
7
11
8
11
9
12
0
12
1
12
2
12
3
12
4
12
5
12
6
12
7
12
8
12
9
13
0
13
1
13
2
13
3
13
4
13
5
13
6
13
7

.getTime()));

pstm.execute();

pstm.close();

conexao.close();
}catch(Exceptione){

e.printStackTrace();
}

publicList<Aluno>listar(){

List<Aluno>lista=newArrayList<>();

try{

Connectionconexao=getConexao();

Statementstm=conexao.createStatement();

ResultSetrs=stm.executeQuery("Select*fromtbaluno");

while(rs.next()){

Alunoaluno=newAluno();

aluno.setMatricula(rs.getLong("matricula"));

aluno.setNome(rs.getString("nome"));

aluno.setTelefone(rs.getString("telefone"));

aluno.setEmail(rs.getString("email"));

aluno.setDataCadastro(newjava.util.Date(rs.getDate("datacadastro").getTime()));

lista.add(aluno);

stm.close();

conexao.close();

}catch(Exceptione){

e.printStackTrace();

returnlista;
}
publicAlunoconsultar(Alunoaluno){

try{

Connectionconexao=getConexao();

PreparedStatementpstm=conexao

.prepareStatement("Select*fromtbalunowherematricula=
?");

pstm.setLong(1,aluno.getMatricula());

ResultSetrs=pstm.executeQuery();

if(rs.next()){

aluno.setMatricula(rs.getLong("matricula"));

aluno.setNome(rs.getString("nome"));

aluno.setTelefone(rs.getString("telefone"));

aluno.setEmail(rs.getString("email"));

aluno.setDataCadastro(newjava.util.Date(rs.getDate("datacadastro").getTime()));

pstm.close();

conexao.close();

}catch(Exceptione){

e.printStackTrace();

returnaluno;
}

13
8

AlunoServlet a principal classe do nosso projeto. Ela a controladora da navegao. Todas as requisies de acesso ao banco de dados, controle de navegao,
leitura de dados da tela ou envio para o destino de erro ou sucesso responsabilidade desta classe. Seguindo o padro MVC ela o Contoller.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82

packagebr.com.feltex.servlet;

importjava.io.IOException;
importjava.text.DateFormat;
importjava.text.SimpleDateFormat;
importjava.util.ArrayList;
importjava.util.Date;
importjava.util.List;

importjavax.servlet.RequestDispatcher;
importjavax.servlet.ServletException;
importjavax.servlet.annotation.WebServlet;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;

importbr.com.feltex.dao.AlunoDAO;
importbr.com.feltex.entidade.Aluno;

@WebServlet("/AlunoServlet")
publicclassAlunoServletextendsHttpServlet{

privatestaticfinallongserialVersionUID=1L;

protectedvoiddoGet(HttpServletRequestrequest,

HttpServletResponseresponse)throwsServletException,IOException{

doPost(request,response);

protectedvoiddoPost(HttpServletRequestrequest,

HttpServletResponseresponse)throwsServletException,IOException{

Stringacao=request.getParameter("acao");

Stringdestino="sucesso.jsp";

Stringmensagem="";

List<Aluno>lista=newArrayList<>();

Alunoaluno=newAluno();

AlunoDAOdao=newAlunoDAO();

try{

//SeaaoforDIFERENTEdeListarsolidososdadosdatela

if(!acao.equalsIgnoreCase("Listar")){

aluno.setMatricula(Long.parseLong(request.getParameter("matricula")));

aluno.setNome(request.getParameter("nome"));

aluno.setTelefone(request.getParameter("telefone"));

aluno.setEmail(request.getParameter("email"));

//Fazaleituradadatadecadastro.Casoocorraumerrodeformatao

//osistemautilizaradataatual

try{

DateFormatdf=newSimpleDateFormat("dd/MM/yyyy");

aluno.setDataCadastro(df.parse(request.getParameter("dataCadastro")));

}catch(Exceptione){

aluno.setDataCadastro(newDate());

if(acao.equalsIgnoreCase("Incluir")){

//VerificaseamatrculainformadajexistenoBancodeDados

//Seexistirenviarumamensagemsenofazaincluso

if(dao.existe(aluno)){

mensagem="Matrculainformadajexiste!";

}else{

dao.inserir(aluno);

}elseif(acao.equalsIgnoreCase("Alterar")){

dao.alterar(aluno);

}elseif(acao.equalsIgnoreCase("Excluir")){

dao.excluir(aluno);

}elseif(acao.equalsIgnoreCase("Consultar")){

request.setAttribute("aluno",aluno);

aluno=dao.consultar(aluno);

destino="aluno.jsp";

}catch(Exceptione){

mensagem+=e.getMessage();

destino="erro.jsp";

e.printStackTrace();

83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
10
0
10
1
10
2
10
3

//Seamensagemestivervaziasignificaquehouvesucesso!
//Senoserexibidaateladeerrodosistema.
if(mensagem.length()==0){

mensagem="AlunoCadastradocomsucesso!";
}else{

destino="erro.jsp";
}

//ListatodososregistrosexistentenoBancodeDados
lista=dao.listar();
request.setAttribute("listaAluno",lista);
request.setAttribute("mensagem",mensagem);

//Osistemadirecionadoparaapgina
//sucesso.jspSetudoocorreubem
//erro.jspsehouveralgumproblema.
RequestDispatcherrd=request.getRequestDispatcher(destino);
rd.forward(request,response);

4. Criao das pginas


index.jsp Pgina inicial do nosso projeto. Utilizamos aqui contedo HTML5 puro. Uma pgina simples, sem contedo dinmico e que possui os links para o menu da
aplicao quando clicamos na imagem.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

<!DOCTYPEhtml>
<htmllang="pt">
<head>
<title>PginaInicial</title>
</head>
<body>

<divalign="center">

<H1>SejabemvindoaosistemaAcademicNet!</H1>

<H2>

Nestaversoutilizaremosastecnologias:JSP+JSTL+Servlet+JDBC+PostGreSQL.

</H2>

<ahref="menu.jsp">

<imgsrc="imagem/AcemicNet.png">

</a>

</div>
<ahref="http://www.feltex.com.br"target="_blank">http://www.feltex.com.br</a>

</body>
</html>

menu.jsp Pgina que conter as opes de cadastros no nosso sistema. Tambm uma pgina simples, sem contedo dinmico e que possui os links para o menu da
aplicao quando clicamos nos links. O primeiro chamar a pgina aluno.jsp. O Segundo chamar o Servlet AlunoServlet com a opo de listar todos os usurios
cadastrados no Banco de Dados.
1
2
3
4
5
6
7
8
9
10
11
12
13

<!DOCTYPEhtml>
<htmllang="pt">
<head>
<title>PginaInicial</title>
</head>
<body>

<divalign="center">

<H1>SejabemvindoaosistemaAcademicNet!</H1>

<ahref="aluno.jsp">ManterAluno</a><br>

<ahref="AlunoServlet?acao=Listar">ListarAlunos</a><br>

</div>
</body>
</html>

aluno.jsp Pgina que contm cdigo dinmico. Quando encontramos a marcao ${} significa que um contedo que deve ser recebido pela pgina e que ser
exibido. Nos campos de texto recebemos os dados de aluno, veja o exemplo: value=${aluno.nome} que recebe o campo nome do aluno.
Nesta pgina utilizamos HTML5. Ento podemos ver no campo matrcula a palavra required. Isso informa que este campo obrigatrio. No ser possvel enviar os
dados ao servidor sem o preenchimento dele.
Na linha abaixo definimos que o mtodo de envio dos dados para o servidor ser post e o destino no servidor ser a nossa Classe Servlet: AlunoServlet
1 <formmethod="post"action="AlunoServlet">

O Atributo autofocus no campo nome determina que este campo receber o cursor assim que a pgina for carregada no seu browser.
O atributo placeholder o valor que ser exibido nos campos quando eles estiverem vazios. Isso serve para informar ao usurio um valor possvel a ser utilizado.

As linhas
1 <inputtype="submit"value="Enviar">
2 <inputtype="reset"value="Limpar"><br/>

Informam que temos um boto submit que envia os dados ao servidor e tambm um boto reset que limpa os valores exibidos nos campos do formulrio.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

<!DOCTYPEhtml>
<htmllang="pt">
<head>
<title>CadastrodeAluno</title>
</head>
<body>

<divalign="center">

<formmethod="post"action="AlunoServlet">

<fieldset>

<legend>CadastrodeAlunos</legend>

<label>Matrcula:</label><inputname="matricula"required

value="${aluno.matricula}"

placeholder="2236541"/><br/>

<label>Name:</label><input

name="nome"autofocus="autofocus"placeholder="Nome"value="${aluno.nome}"/><br/>

<label>Telefone:</label><input

type="tel"name="telefone"placeholder="99999999"value="${aluno.telefone}"/><br/>

<label>Email:</label><input

type="email"name="email"placeholder="andre@feltex.com.br"value="${aluno.email}"/><br/>

<label>DataCadastro:</label><inputtype="date"name="dataCadastro"value="${aluno.dataCadastro}"

placeholder="10/10/2014"/><br/><label>Ao</label><select

name="acao"required>

<optionselectedvalue="Incluir">Incluir</option>

<optionvalue="Alterar">Alterar</option>

<optionvalue="Excluir">Excluir</option>

<optionvalue="Consultar">Consultar</option>

</select><br/><inputtype="submit"value="Enviar"><input

type="reset"value="Limpar"><br/>

</fieldset>

</form>

</div>
</body>
</html>

alunoLista.jsp uma pgina dinmica que utilizamos vrios recursos de JSTL. Nas primeiras linhas so declaradas as tags que sero utilizadas. Isso feito com as
marcaes
@ taglib para cada linha dessa h um prefix que ser utilizado como abreviao no uso da TagLib.
A tag a seguir realiza um loop. Neste caso lido o atributo listaAluno que foi enviado do AlunoServlet e ser realizado um loop adicionando cada elemento a
varivel aluno.
J na linha utilizamos TagLib para realizar a formatao de data no padro dia/ms/ano (10/10/2014).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

<!DOCTYPEhtml>
<%@tagliburi="http://java.sun.com/jsp/jstl/functions"prefix="fn"%>
<%@tagliburi="http://java.sun.com/jsp/jstl/fmt"prefix="fmt"%>
<%@tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c"%>
<htmllang="pt">
<head>
<metahttpequiv="ContentType"content="text/html;charset=ISO88591">
<title>ListadeAlunos</title>
</head>
<body>

<divalign="center">

<P>ListadeAlunos</P>

<tableborder="1">

<tr>

<td>Matricula</td>

<td>Nome</td>

<td>Telefone</td>

<td>DataCadastro</td>

<td>Comandos</td>

</tr>

<c:forEachvar="aluno"items="${listaAluno}">

<tr>

<td>${aluno.matricula}</td>

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

<td>${aluno.telefone}</td>

<td><fmt:formatDatevalue="${aluno.dataCadastro}"type="both"pattern="dd/MM/yyyy"/>

<td><ahref="AlunoServlet?acao=Excluir&matricula=${aluno.matricula}">Excluir</a></td>

</tr>

</c:forEach>

</table>

<c:iftest="${fn:length(listaAluno)>0}">

Existem${fn:length(listaAluno)}alunos!

</c:if><br>

34
35
36
37
38

</div>

<ahref="menu.jsp">Voltar</a>

</body>
</html>

sucesso.jsp Esta pgina exibida quando h uma atualizao bem sucedida no banco de dados. feito o uso de JSTL aqui.
Temos o uso do que usado para exibir o atributo mensagem que recebido do AlunoServlet. Na linh
realizado um include dinmico da pgina de lista de alunos. Isso significa que ser exibida a listagem de alunos ao carregar esta pgina.
1
2
3
4
5
6
7
8
9
10
11

<!DOCTYPEhtml>
<%@tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c"%>
<htmllang="pt">
<head>
<title>PginadeSucesso</title>
</head>
<body>
<H1>MensagemJSTL:
<c:outvalue="${mensagem}"/></H1>
<jsp:includepage="alunoLista.jsp"/>
</body>
</html>

A pgina erro.jsp responsvel por receber a varivel mensagem e exibi-la. Esta pgina mostrada sempre que h um problema de atualizao de dados dos no
Banco de dados.
1
2
3
4
5
6
7
8
9
10
11

<!DOCTYPEhtml>
<htmllang="pt">
<head>
<title>MensagensdeErro</title>
</head>
<body>Verifiqueoerro:${mensagem}

<ahref="menu.jsp">Voltar</a>
</body>
</html>

Por fim temos o nosso arquivo web.xml que bem simples para o nosso projeto. Ele apenas define qual ser a pgina inicial da nossa aplicao. Atualmente
index.jsp. Caso voc queira uma pgina diferente, por exemplo, a de login. basta alterar a linha index.jsp para menu.jsp
1
2
3
4
5
6
7
8
9

<?xmlversion="1.0"encoding="UTF8"?>
<webappxmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"

xmlns="http://java.sun.com/xml/ns/javaee"xmlns:web="http://java.sun.com/xml/ns/javaee"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/webapp_3_0.xsd"

id="WebApp_ID"version="3.0">

<welcomefilelist>

<welcomefile>index.jsp</welcomefile>

</welcomefilelist>
</webapp>

Observe que temos tambm, nas pasta WEB-INF\lib os arquivos:


jstl.jar e standard.jar (Contm as tags que precisamos para uso de JSTL)
postgresql-9.3-1100.jdbc4.jar (Driver para realizar a conexo como Banco de dados PostgreSQL)
Esses arquivos so necessrio para que o nosso projeto funcione.
Deixei disponvel o projeto completo com o cdigo fonte para auxiliar a todos no processo de aprendizado. Para baixar: Clique aqui

Concluso
Este um projeto simples que explica os conceitos necessrios para construo de um aplicativo completo para Java Web.
Ele pode ser utilizado em qualquer Servidor Web (JBoss, Tomcat, Websphere, Weblogic), pois no h nenhuma configurao especfica para uma implementao de
servidor.
Para utilizar este projeto com outros bancos de Dados (MySQL, SQL Server, Oracle, DB2) basta alterar a forma de conexo na classe DAO.

Links relacionados
Recomendo que leia: Como gerenciar a transao JPA com Hibernate via Filtro em projeto Web
Leia tambm: Exemplo completo com JSF Primefaces + EJB + Hibernate + MySQL + JMS (Topic)
Voc ir gostar:Bean Transaction Management
Java Web

JDBC
Abraos e bons estudos.

No esquea de curtir este post nas rede sociais. D a sua contribuio social e
ajude o autor:
S S S S M

This entry was posted in Eclipse, Java, JavaEE, JSF, WildFly

Copyright Text Here.


Biznez Theme by SketchThemes

Você também pode gostar