Projeto CRUD com JSP (Servlets)

Um exemplo utilizando o padrão DAO e o padrão MVC. Visto que o padrão DAO esta representada na camada de persistência (pacote persitence) e o padrão MVC:
A camada model está representada no pacote entity.
A camada view está representada nas paginas jsp’s.

A camada control está divida no pacote manager (que controla a parte de consulta ao banco de dados) e o pacote control (que tem uma classe Servlet onde fará toda a lógica de inserir, deletar e atualizar). O Servlet tem a função de receber as requisições das paginas jsps, enviar essas requisições para a camada de persistência, modelo e camada de controle por exemplo, validação dos campos do formulário jsp, e transmitir os resultados as paginas jsps.

O scriptlet corresponde em atribuir código Java entre <% %> nas paginas jsp’s. Nesse exemplo é utilizado o JSTL (JSP Standard Tag Library) que é uma coleção de bibliotecas em Java que permite substituir o scriplet na pagina JSP por tags JSTLs. Porque cada tag tem uma finalidade bem definida sendo equivalente a programação Java nas paginas JSPs.

A Estrutura do Projeto

Criar o Script do MySql - Banco de dados

drop database if exists aula;

create database aula;

use aula;

create table funcionario(
	idFuncionario int primary key auto_increment,
	nome varchar(35),
	salario float
);    

Classe Dao

package persistence;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class Dao {
	
	Connection con;
	PreparedStatement stmt;
	ResultSet rs;
	
	public void open() throws Exception{
		
		Class.forName("com.mysql.jdbc.Driver");
		con = DriverManager.getConnection("jdbc:mysql://localhost:3306/aula", "usuario","senha");		
	}
	
	public void close() throws Exception{
		con.close();
	}
}    

Classe FuncionarioDao

package persistence;

import java.util.ArrayList;
import java.util.List;

import entity.Funcionario;

public class FuncionarioDao extends Dao {
	
	
	public void create(Funcionario f) throws Exception{		
		open();
			stmt = con.prepareStatement("insert into funcionario values(null,?,?)");
			stmt.setString(1, f.getNome());
			stmt.setDouble(2, f.getSalario());
			stmt.execute();
			stmt.close();
		close();		
	}

	public void delete(int cod) throws Exception{		
		open();
			stmt = con.prepareStatement("delete from funcionario where idFuncionario = ?");
			stmt.setInt(1, cod);
			stmt.execute();
			stmt.close();
		close();		
	}

	public void update(Funcionario f) throws Exception{		
		open();
			stmt = con.prepareStatement("update funcionario set nome = ? , salario = ? where idFuncionario = ?");
			stmt.setString(1, f.getNome());
			stmt.setDouble(2, f.getSalario());
			stmt.setInt(3, f.getIdFuncionario());
			stmt.execute();
			stmt.close();
		close();		
	}
	
	public List findAll() throws Exception{		
		open();
			stmt = con.prepareStatement("select * from funcionario");
			rs = stmt.executeQuery();
				List lista = new ArrayList();
			while(rs.next()){
				Funcionario funcionario = new Funcionario();
				funcionario.setIdFuncionario(rs.getInt(1));
				funcionario.setNome(rs.getString(2));
				funcionario.setSalario(rs.getDouble(3));
				lista.add(funcionario);
			}
			stmt.close();
		close();
		return lista;
	}
	
	public Funcionario findByCode(int cod) throws Exception{		
		open();
			stmt = con.prepareStatement("select * from Funcionario where idFuncionario = ?");
			stmt.setInt(1, cod);	
			rs = stmt.executeQuery();
				Funcionario funcionario	= null;			
			if(rs.next()){
				funcionario = new Funcionario();
				funcionario.setIdFuncionario(rs.getInt(1));
				funcionario.setNome(rs.getString(2));
				funcionario.setSalario(rs.getDouble(3));
				
			}
			stmt.close();
		close();
		return funcionario;
	}	
}    

Classe Funcionario

package entity;

public class Funcionario {
	
	private Integer idFuncionario;	
	private String nome;	
	private Double salario;
	
	public Funcionario() {
		// TODO Auto-generated constructor stub
	}

	public Funcionario(Integer idFuncionario, String nome, Double salario) {
		super();
		this.idFuncionario = idFuncionario;
		this.nome = nome;
		this.salario = salario;
	}

	@Override
	public String toString() {
		return "Funcionario [idFuncionario=" + idFuncionario + ", nome=" + nome
				+ ", salario=" + salario + "]";
	}

	public Integer getIdFuncionario() {
		return idFuncionario;
	}
	public void setIdFuncionario(Integer idFuncionario) {
		this.idFuncionario = idFuncionario;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public Double getSalario() {
		return salario;
	}
	public void setSalario(Double salario) {
		this.salario = salario;
	}		
}    

ManagerBean serve para controlar as consultas do banco.

package manager;

import java.util.ArrayList;
import java.util.List;
import persistence.FuncionarioDao;
import entity.Funcionario;

public class ManagerBean {
	
	private List lista;

	public List getLista() {
		
		try {			
			lista = new ArrayList<>();
			lista = new FuncionarioDao().findAll();
			
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		
		return lista;
	}

	public void setLista(List lista) {
		this.lista = lista;
	}	
}    

Classe Servlet para Controle.

package control;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import persistence.FuncionarioDao;

import entity.Funcionario;


//Essa anotação serve para identificar o servlet 
// para as paginas jsps e assim poder chamar as métodos
// doPost e doGet
@WebServlet("/Controle")  //Anotação do Servlet 3.0
public class Controle extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public Controle() {
        super();
    }

	// doGet -> São requisições das paginas jsps enviadas por link
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
		String cmd = request.getParameter("cmd");
		
		if(cmd.equalsIgnoreCase("buscar")){
			buscar(request,response);
		}
		
		if(cmd.equalsIgnoreCase("excluir")){
			excluir(request,response);
		}		
	}
	
	// doPost -> São requisições das paginas jsps enviadas por formulario  
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// comando para resgatar um valor da pagina JSP
		String cmd = request.getParameter("cmd");
		
			if(cmd.equalsIgnoreCase("gravar")){
				gravar(request,response);
			}
			
			if(cmd.equalsIgnoreCase("alterar")){
				alterar(request,response);
			}	
	}

	protected void gravar(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String nome = request.getParameter("nome");
		Double salario = new Double(request.getParameter("salario"));
		
		Funcionario f = new Funcionario();
		f.setNome(nome);
		f.setSalario(salario);
		
			try {
				
				new FuncionarioDao().create(f);
				// Comando para enviar uma msg para pagina jsp
				request.setAttribute("msg", "Dados Gravados");
				
			} catch (Exception e) {
			request.setAttribute("msg", "Error" + e.getMessage());
			}
			finally{
			//Comando para redirecionar para pagina jsp de resposta			
			request.getRequestDispatcher("sistema.jsp").forward(request, response);
			}		
	}
	
	protected void buscar(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Integer cod = new Integer(request.getParameter("cod"));
		
		try {
			
			Funcionario func = new FuncionarioDao().findByCode(cod);
			
			request.setAttribute("funcionario", func);
			request.getRequestDispatcher("altera.jsp").forward(request, response);
		} catch (Exception e) {
			
			request.setAttribute("msg", "Error " + e.getMessage());
			request.getRequestDispatcher("sistema.jsp").forward(request, response);
		}		
	}
	
	protected void alterar(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		Integer cod = new Integer(request.getParameter("cod"));
		String nome = request.getParameter("nome");
		Double salario = new Double(request.getParameter("salario"));
		
		Funcionario f = new Funcionario();
		f.setIdFuncionario(cod);
		f.setNome(nome);
		f.setSalario(salario);
		
			try {
				
				new FuncionarioDao().update(f);
				
				request.setAttribute("msg", "Dados Alterados");
				request.getRequestDispatcher("lista.jsp").forward(request, response);
			} catch (Exception e) {
				request.setAttribute("msg", "Error" + e.getMessage());
				request.getRequestDispatcher("sistema.jsp").forward(request, response);
			}		
	}
	
	protected void excluir(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Integer cod = new Integer(request.getParameter("cod"));
		
		try {
			
			new FuncionarioDao().delete(cod);
			
			request.setAttribute("msg", "Dados Excluídos");
			request.getRequestDispatcher("lista.jsp").forward(request, response);
		} catch (Exception e) {
			
			request.setAttribute("msg", "Error " + e.getMessage());
			request.getRequestDispatcher("sistema.jsp").forward(request, response);
		}		
	}	
}    

Página index.jsp

<h2> Sistema de Cadastro de Funcionario - CRUD Completo </h2>

<p/>
<a href="sistema.jsp">Cadastrar Funcionario</a>    

Página Sistema.jsp

<h2> Cadastro de Funcionario </h2>

<form method="post" action="Controle?cmd=gravar">

	Nome <p/>
	<input type="text" name="nome" size="35">
	<br/>
	Salario <p/>
	<input type="text" name="salario" size="35">
	<br/>
	<input type="submit" value="Cadastrar"/>

</form>

${msg}
<br/>
<a href="lista.jsp">Listagem dos Funcionarios</a>    

Página lista.jsp

<%@page import="entity.*, persistence.*"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<jsp:useBean id="mb" class="manager.ManagerBean" scope="request"/>


<table border=1 >

		<tr>
			<th> Codigo </th>
			<th> Funcionario </th>
			<th> Salario </th>
			<th> Alterar </th>
			<th> Excluir </th>		
		
		</tr>

	<c:forEach items="${mb.lista}" var="linha">

		<tr>
			<td> ${linha.idFuncionario}</td>		
			<td> ${linha.nome}</td>
			<td> ${linha.salario}</td>
			<td> <a href="Controle?cmd=buscar&cod=${linha.idFuncionario}"> Alterar </a> </td>		
			<td> <a href="Controle?cmd=excluir&cod=${linha.idFuncionario}"> Excluir </a> </td>
		</tr>
	</c:forEach>

</table>

${msg}
<br/>
<a href="index.jsp">Voltar para Principal</a>    

Página altera.jsp

<%@page import="entity.*, persistence.*"%>

<%
	if(request.getAttribute("funcionario") != null){
		
		Funcionario func = (Funcionario) request.getAttribute("funcionario");		
%>

	<form method="post" action="Controle?cmd=alterar">

		Codigo <p/>
		<input type="text" name="cod" value="<%=func.getIdFuncionario() %>" readonly="readonly" size="5">
		<br/>
		Nome <p/>
		<input type="text" name="nome" value="<%=func.getNome() %>" size="35">
		<br/>
		Salario <p/>
		<input type="text" name="salario" value="<%=func.getSalario() %>" size="35">
		<br/>
		<input type="submit" value="Alterar"/>
	
	</form>

<%
	}
%>
${msg}
<a href="index.jsp">Voltar</a>