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 [Link] que exibe as informaes de funcionamento do projeto. Ao clicar na imagem principal exibido o [Link].
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 [Link] 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
[Link];
[Link];
[Link];
/**
*
*Classedeentidadequepossuiosatributosdoaluno
*
*/
publicclassAlunoimplementsSerializable{
privatestaticfinallongserialVersionUID=309513637403441918L;
privateLongmatricula;
privateStringnome;
privateStringtelefone;
privateStringemail;
privateDatedataCadastro;
publicAluno(){}
publicAluno(Longmatricula){
super();
[Link]=matricula;
publicAluno(Longmatricula,Stringnome){
super();
[Link]=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
[Link]=nome;
publicDategetDataCadastro(){
returndataCadastro;
}
publicStringgetEmail(){
returnemail;
}
publicLonggetMatricula(){
returnmatricula;
}
publicStringgetNome(){
returnnome;
}
publicStringgetTelefone(){
returntelefone;
}
publicvoidsetDataCadastro(DatedataCadastro){
[Link]=dataCadastro;
}
publicvoidsetEmail(Stringemail){
[Link]=email;
}
publicvoidsetMatricula(Longmatricula){
[Link]=matricula;
}
publicvoidsetNome(Stringnome){
[Link]=nome;
}
publicvoidsetTelefone(Stringtelefone){
[Link]=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
[Link];
[Link];
[Link];
/**
*[Link]
*classesdepersistnciadedados.
*
*/
publicclassDAO{
publicConnectiongetConexao(){
Connectionconexao=null;
Stringusuario="postgres";
Stringsenha="teco01";
StringnomeBancoDados="bdacademicnet";
try{
[Link]("[Link]");
conexao=[Link]("jdbc:postgresql://localhost:5432/"+nomeBancoDados,
usuario,senha);
}catch(Exceptione){
[Link]();
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
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
/**
*
*ClassedePersistnciadedadosdosobjetosdeAluno
*"filha"daClasseDAO.
*
*/
publicclassAlunoDAOextendsDAO{
publicvoidalterar(Alunoaluno){
try{
Connectionconexao=getConexao();
PreparedStatementpstmt=conexao
.prepareStatement("UpdatetbalunoSETnome=?,telefone=?,email=?,datacadastro=?"
+"WHEREmatricula=?");
[Link](1,[Link]());
[Link](2,[Link]());
[Link](3,[Link]());
[Link](4,[Link]([Link]().getTime()));
[Link](5,[Link]());
[Link]();
[Link]();
[Link]();
}catch(Exceptione){
[Link]();
publicvoidexcluir(Alunoaluno){
try{
Connectionconexao=getConexao();
PreparedStatementpstm=conexao
.prepareStatement("Deletefrom tbalunowherematricula=?");
[Link](1,[Link]());
[Link]();
[Link]();
[Link]();
}catch(Exceptione){
[Link]();
publicbooleanexiste(Alunoaluno){
booleanachou=false;
try{
Connectionconexao=getConexao();
PreparedStatementpstm=conexao
.prepareStatement("Select*fromtbalunowherematricula=
?");
[Link](1,[Link]());
ResultSetrs=[Link]();
if([Link]()){
achou=true;
[Link]();
[Link]();
}catch(Exceptione){
[Link]();
returnachou;
publicvoidinserir(Alunoaluno){
try{
Connectionconexao=getConexao();
PreparedStatementpstm=conexao
.prepareStatement("Insertinto tbaluno(matricula,nome,telefone,email,datacadastro)values(?,?,?,?,?)"
[Link](1,[Link]());
[Link](2,[Link]());
[Link](3,[Link]());
[Link](4,[Link]());
[Link](5,[Link]([Link]()
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()));
[Link]();
[Link]();
[Link]();
}catch(Exceptione){
[Link]();
}
publicList<Aluno>listar(){
List<Aluno>lista=newArrayList<>();
try{
Connectionconexao=getConexao();
Statementstm=[Link]();
ResultSetrs=[Link]("Select*fromtbaluno");
while([Link]()){
Alunoaluno=newAluno();
[Link]([Link]("matricula"));
[Link]([Link]("nome"));
[Link]([Link]("telefone"));
[Link]([Link]("email"));
[Link]([Link]([Link]("datacadastro").getTime()));
[Link](aluno);
[Link]();
[Link]();
}catch(Exceptione){
[Link]();
returnlista;
}
publicAlunoconsultar(Alunoaluno){
try{
Connectionconexao=getConexao();
PreparedStatementpstm=conexao
.prepareStatement("Select*fromtbalunowherematricula=
?");
[Link](1,[Link]());
ResultSetrs=[Link]();
if([Link]()){
[Link]([Link]("matricula"));
[Link]([Link]("nome"));
[Link]([Link]("telefone"));
[Link]([Link]("email"));
[Link]([Link]([Link]("datacadastro").getTime()));
[Link]();
[Link]();
}catch(Exceptione){
[Link]();
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
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
@WebServlet("/AlunoServlet")
publicclassAlunoServletextendsHttpServlet{
privatestaticfinallongserialVersionUID=1L;
protectedvoiddoGet(HttpServletRequestrequest,
HttpServletResponseresponse)throwsServletException,IOException{
doPost(request,response);
protectedvoiddoPost(HttpServletRequestrequest,
HttpServletResponseresponse)throwsServletException,IOException{
Stringacao=[Link]("acao");
Stringdestino="[Link]";
Stringmensagem="";
List<Aluno>lista=newArrayList<>();
Alunoaluno=newAluno();
AlunoDAOdao=newAlunoDAO();
try{
//SeaaoforDIFERENTEdeListarsolidososdadosdatela
if(){
[Link]([Link]([Link]("matricula")));
[Link]([Link]("nome"));
[Link]([Link]("telefone"));
[Link]([Link]("email"));
//[Link]
//osistemautilizaradataatual
try{
DateFormatdf=newSimpleDateFormat("dd/MM/yyyy");
[Link]([Link]([Link]("dataCadastro")));
}catch(Exceptione){
[Link](newDate());
if([Link]("Incluir")){
//VerificaseamatrculainformadajexistenoBancodeDados
//Seexistirenviarumamensagemsenofazaincluso
if([Link](aluno)){
mensagem="Matrculainformadajexiste!";
}else{
[Link](aluno);
}elseif([Link]("Alterar")){
[Link](aluno);
}elseif([Link]("Excluir")){
[Link](aluno);
}elseif([Link]("Consultar")){
[Link]("aluno",aluno);
aluno=[Link](aluno);
destino="[Link]";
}catch(Exceptione){
mensagem+=[Link]();
destino="[Link]";
[Link]();
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([Link]()==0){
mensagem="AlunoCadastradocomsucesso!";
}else{
destino="[Link]";
}
//ListatodososregistrosexistentenoBancodeDados
lista=[Link]();
[Link]("listaAluno",lista);
[Link]("mensagem",mensagem);
//Osistemadirecionadoparaapgina
//[Link]
//[Link].
RequestDispatcherrd=[Link](destino);
[Link](request,response);
4. Criao das pginas
[Link] 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="[Link]">
<imgsrc="imagem/[Link]">
</a>
</div>
<ahref="[Link]
</body>
</html>
[Link] 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 [Link]. 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="[Link]">ManterAluno</a><br>
<ahref="AlunoServlet?acao=Listar">ListarAlunos</a><br>
</div>
</body>
</html>
[Link] 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=${[Link]} 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="${[Link]}"
placeholder="2236541"/><br/>
<label>Name:</label><input
name="nome"autofocus="autofocus"placeholder="Nome"value="${[Link]}"/><br/>
<label>Telefone:</label><input
type="tel"name="telefone"placeholder="99999999"value="${[Link]}"/><br/>
<label>Email:</label><input
type="email"name="email"placeholder="andre@[Link]"value="${[Link]}"/><br/>
<label>DataCadastro:</label><inputtype="date"name="dataCadastro"value="${[Link]}"
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>
[Link] 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="[Link]
<%@tagliburi="[Link]
<%@tagliburi="[Link]
<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>${[Link]}</td>
<td>${[Link]}</td>
<td>${[Link]}</td>
<td><fmt:formatDatevalue="${[Link]}"type="both"pattern="dd/MM/yyyy"/>
<td><ahref="AlunoServlet?acao=Excluir&matricula=${[Link]}">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="[Link]">Voltar</a>
</body>
</html>
[Link] 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="[Link]
<htmllang="pt">
<head>
<title>PginadeSucesso</title>
</head>
<body>
<H1>MensagemJSTL:
<c:outvalue="${mensagem}"/></H1>
<jsp:includepage="[Link]"/>
</body>
</html>
A pgina [Link] 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="[Link]">Voltar</a>
</body>
</html>
Por fim temos o nosso arquivo [Link] que bem simples para o nosso projeto. Ele apenas define qual ser a pgina inicial da nossa aplicao. Atualmente
[Link]. Caso voc queira uma pgina diferente, por exemplo, a de login. basta alterar a linha [Link] para [Link]
1
2
3
4
5
6
7
8
9
<?xmlversion="1.0"encoding="UTF8"?>
<webappxmlns:xsi="[Link]
xmlns="[Link]
xsi:schemaLocation="[Link]
id="WebApp_ID"version="3.0">
<welcomefilelist>
<welcomefile>[Link]</welcomefile>
</welcomefilelist>
</webapp>
Observe que temos tambm, nas pasta WEB-INF\lib os arquivos:
[Link] e [Link] (Contm as tags que precisamos para uso de JSTL)
[Link] (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