Escolar Documentos
Profissional Documentos
Cultura Documentos
Aprender Java
S S S S M
Home
IDE
Eclipse
No Comments
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.
VocdeverterconhecimentoprviodeAplicaoWebJavaeutilizaodoTomcat.
Casoaindanotenha,acesseoslinksinformadosnofinaldesteartigo.
CREATETABLEIFNOTEXISTStbaluno(
matriculabigintNOTNULL,
nomecharactervarying(255),
telefonecharactervarying(255),
emailcharactervarying(255),
datacadastrodate,
CONSTRAINTtbaluno_pkeyPRIMARYKEY(matricula)
);
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
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
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);
<!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>
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