Sabendo que a tecnologia Java Server Pages proporcionada pelo servidor de aplicação Tomcat nos possibilita criar aplicações web dinâmicas utilizando JavaBeans e Servlets, vamos então criar um motor básico que utiliza o principio usado por quase todas as aplicações web para o mundo corporativo, ou seja manipulação de dados.
Em aplicações Enterprise os dados na grande maioria das vezes é manipulado através de um servidor de banco de dados relacional, entretanto neste primeiro exemplo vamos utilizar um objeto Java que possibilita a criação de listas para manipular os dados, ressaltando o que realmente nos interessa neste momento é apenas o esqueleto de uma simples aplicação que mostra, adiciona, edita e deleta dados através de uma interface com o usuário.
Exemplo:
Neste exemplo utilizaremos um JavaBean que manipula dados através de um objeto List do Java e usamos Servlets para criar a interface com o usuário e manipular as ações requisitadas de entrada, edição e exclusão de dados. Utilize os comentários nos códigos abaixo para entender os processos e técnicas utilizadas.
Java
MeuJavaBean – Manipula Dados
package org.desenvolvimento.aberto; public class MeuJavaBean { // Declara atributo private String nome; private String comentario; // Construtor Default da classe public MeuJavaBean() { } // Construtor Overload public MeuJavaBean(String nome, String comentario) { this.nome = nome; this.comentario = comentario; } // Métodos Getter e Setter public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getComentario() { return comentario; } public void setComentario(String comentario) { this.comentario = comentario; } }
MeuJServlet – Mostra Dados (Página Principal)
package org.desenvolvimento.aberto; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; // Ler Servlet ao iniciar @WebServlet(urlPatterns="/MeuJServlet", loadOnStartup = 1) public class MeuJServlet extends HttpServlet { private static final long serialVersionUID = 1L; public MeuJServlet() { super(); } public void init(ServletConfig config) throws ServletException { // Inicia configuração super.init(config); // Cria uma Lista com o objeto JavaBean List<MeuJavaBean> registros = new ArrayList<MeuJavaBean>(); // Insere dados na lista registros.add(new MeuJavaBean("Ricardo", "Olá Pessoal")); registros.add(new MeuJavaBean("Mantovani", "Bem-vindos ao Desenvolvimento Aberto, adicione, altere e exclua dados desta tabela")); // Define um atributo para o contexto do servlet getServletContext().setAttribute("registros", registros); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Recupera contexto do JavaBean @SuppressWarnings("unchecked") List<MeuJavaBean> registros = (List<MeuJavaBean>) getServletContext().getAttribute("registros"); // Cria página HTML PrintWriter html = response.getWriter(); html.println("<!DOCTYPE html>"); html.println("<head><Title>Desenvolvimento Aberto</title>"); // CSS html.println("<style>"); html.println("td, th {"); html.println("border: none;"); html.println("background-color: #dddddd;"); html.println("padding: 5px;"); html.println("width: 200px; }"); html.println("</style>"); html.println("</head>"); // Corpo da página html.println("<html>"); html.println("<body>"); html.println("<h1>Desenvolvimento Aberto - Beans e Servlets</h1>"); // Cria tabela html.println("<table>"); html.println("<tr>"); html.println("<th>Nome:</th>"); html.println("<th>Comentário:</th>"); html.println("<th>Ação:</th>"); html.println("</tr>"); for (int id = 0; id < registros.size(); id++) { // Recupera identificador MeuJavaBean reg = registros.get(id); html.println("<tr>"); html.println("<td>" + reg.getNome() + "</td>"); html.println("<td>" + reg.getComentario() + "</td>"); // Link de edição html.println("<td><center>"); html.println("<a href='MeuServletEditar?identificador=" + id + "'>Editar</a> | "); html.println("<a href='MeuServletApagar?identificador=" + id + "'>Apagar</a>"); html.println("</center></td>"); html.println("</tr>"); } html.println("</table>"); // Define link para formulario de adicionar dados (Servlet) html.println("<P> <a href='MeuServletAdd'>Adicione um comentário</a> </p>"); html.println("</body>"); html.println("</html>"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Chama método GET doGet(request, response); } }
MeuServletAdd – Adiciona Dados
package org.desenvolvimento.aberto; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/MeuServletAdd") public class MeuServletAdd extends HttpServlet { private static final long serialVersionUID = 1L; public MeuServletAdd() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Mostra pagina HTML response.setContentType("text/html"); PrintWriter html = response.getWriter(); html.println("<html>"); html.println("<body>"); html.println("<h1>Desenvolvimento Aberto</h1>"); html.println("<h2>Servlet - Adiciona Dados</h2>"); // Formulário processa este mesmo Servlet e o método DoPost html.println("<form action='MeuServletAdd' method='post'>"); html.println("Nome: <input type='text' name='nome' size ='55' /> <br>"); html.println("<textarea name='comentario' cols='50' rows='7'></textarea> <br>"); html.println("<input type='submit' name='adiciona' value='Adicionar'/> <br>"); html.println("</form>"); html.println("</body>"); html.println("</html>"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Recupera parâmetros String nome = request.getParameter("nome"); String comentario = request.getParameter("comentario"); // Recupera Lista Registros @SuppressWarnings("unchecked") List<MeuJavaBean> registros = (List<MeuJavaBean>) getServletContext().getAttribute("registros"); // Adiciona dados ao Bean registros.add(new MeuJavaBean(nome, comentario)); // Redireciona para o Servlet principal response.sendRedirect("MeuJServlet"); } }
MeuServletEditar – Edita Dados
package org.desenvolvimento.aberto; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/MeuServletEditar") public class MeuServletEditar extends HttpServlet { private static final long serialVersionUID = 1L; // Cria identificador private static int id; public MeuServletEditar() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Recupera Lista Registros @SuppressWarnings("unchecked") List<MeuJavaBean> registros = (List<MeuJavaBean>) getServletContext() .getAttribute("registros"); // Recupera registro por ID id = Integer.parseInt(request.getParameter("identificador")); MeuJavaBean reg = registros.get(id); // Mostra pagina HTML response.setContentType("text/html"); PrintWriter html = response.getWriter(); html.println("<html>"); html.println("<body>"); html.println("<h1>Desenvolvimento Aberto</h1>"); html.println("<h2>Servlet - Editar Dados</h2>"); // Formulário processa este mesmo Servlet e o método DoPost html.println("<form action='MeuServletEditar' method='post'>"); html.println("Nome: <input type='text' name='nome' size ='55' value='" + reg.getNome() + "'/> <br>"); html.println("<textarea name='comentario' cols='50' rows='7'>" + reg.getComentario() + "</textarea> <br>"); html.println("<input type='submit' name='altera' value='Alterar'/> <br>"); html.println("</form>"); html.println("</body>"); html.println("</html>"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Recupera parâmetros String nome = request.getParameter("nome"); String comentario = request.getParameter("comentario"); // Recupera Lista Registros @SuppressWarnings("unchecked") List<MeuJavaBean> registros = (List<MeuJavaBean>) getServletContext() .getAttribute("registros"); // Altera dados ao Bean registros.get(id).setNome(nome); registros.get(id).setComentario(comentario); // Redireciona para o Servlet principal response.sendRedirect("MeuJServlet"); } }
MeuServletApagar – Apaga Dados
package org.desenvolvimento.aberto; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/MeuServletApagar") public class MeuServletApagar extends HttpServlet { private static final long serialVersionUID = 1L; public MeuServletApagar() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Recupera Lista Registros @SuppressWarnings("unchecked") List<MeuJavaBean> registros = (List<MeuJavaBean>) getServletContext() .getAttribute("registros"); // Recupera registro por ID int id = Integer.parseInt(request.getParameter("identificador")); // Remove identificador e redireciona Servlet registros.remove(id); // Redireciona para o Servlet principal response.sendRedirect("MeuJServlet"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }