:?: Aplicando modelo MVC

13 respostas
coca1na

Pessoal, bom dia!

Seguinte, fiz um CRUD bem simples, utilizando jsp e banco mysql.

Tenho 3 jsp (index, alterar, exluir) e nessas jsp tenho tanto o codigo html, quanto java e persistencia no banco…

Gostaria de saber como eu devo proceder pra aplicar MVC neste aplicativo.

Estrutura:

  • Paginas Web
    • alterar.jsp
    • excluir.jsp
    • index.jsp

IDE: Netbeans 6.9
Servidor web: Glassfish
Banco: Mysql

index.jsp:

<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>Cadastro</title>
    </head>
    <body bgcolor="#66AADD">
        <%
                    String nome = request.getParameter("nome");
                    String idade = request.getParameter("idade");
                    String telefone = request.getParameter("telefone");
                    String email = request.getParameter("email");
                    String acao = "";
                    int id;

                    Class.forName("com.mysql.jdbc.Driver").newInstance();

                    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/cadastro", "root", "root");
                    Statement stm = con.createStatement();
                    ResultSet rs;

        %>

        <form action="index.jsp?acao=cadastrar" method="post" id="cadastroform">
            <div>
                <label for="nome"><span>*</span>Nome: </label>
                <input type="text" name="nome" id="nome" placeholder="Digite seu nome" required /><br /><br />
            </div>
            <div>
                <label for="email"><span>*</span>Email</label>
                <input type="email" name="email" id="email" placeholder="Digite seu email" required /><br /><br />
            </div>
            <div>
                <label for="telefone"><span>*</span>Telefone</label>
                <input type="text" name="telefone" id="telefone" placeholder="Digite seu telefone" /><br /><br />
            </div>
            <div>
                <label for="idade"><span>*</span>Idade</label>
                <input type="text" name="idade" id="idade" placeholder="Digite sua idade" /><br /><br />
            </div>
            <div>
                <input type="submit" id="enviar" value="Cadastrar" />
            </div>
        </form>
        <div>
            <form action="index.jsp?acao=consultar" method="post" id="consultaform">
                <input type="submit" id="consultar" value="Consultar" >
            </form>
        </div>
        <br /><br/>

        <%
                    if (request.getParameter("acao") == null) {
                    } else if (request.getParameter("acao").equals("cadastrar")) {
                        try {
                            stm.executeUpdate("insert into cadastro(nome,idade,telefone,email) values('" + nome + "','" + idade + "','" + telefone + "','" + email + "')");
                            stm.close();
                            con.close();
                            out.print("Cadastro realizado com sucesso!");
                        } catch (Exception ex) {
                            out.print("Erro: " + ex.toString());
                        }
                    } else if (request.getParameter("acao").equals("consultar")) {
                        rs = stm.executeQuery("select * from cadastro");
                        out.print("<strong><h3>Registros cadastrados:</h3></strong> <br />");
                        while (rs.next() == true) {
                            out.print("ID: " + rs.getInt("identificador") + "<br />");
                            out.print("Nome: " + rs.getString("nome") + "<br />");
                            out.print("Idade: " + rs.getString("idade") + "<br />");
                            out.print("Telefone: " + rs.getString("telefone") + "<br />");
                            out.print("E-mail: " + rs.getString("email") + "<br /><br />");
                            out.print("<form action='alterar.jsp?id=" + rs.getInt("identificador") + "' method='post' id='editarform'>");
                            out.print("<input type='submit' id='alterar' value='Alterar' >");
                            out.print("</form>");
                            out.print("<form action='excluir.jsp?id=" + rs.getInt("identificador") + "' method='post' id='editarform'>");
                            out.print("<input type='submit' id='excluir' value='Excluir' >");
                            out.print("</form>");
                        }
                    } else if (request.getParameter("acao").equals("salvaralteracao")) {
                        try {
                            stm.executeUpdate("update cadastro set nome='" + request.getParameter("nome") + "',idade='" + request.getParameter("idade") + "',telefone='" + request.getParameter("telefone") + "',email='" + request.getParameter("email" + "' where identificador = '" + request.getParameter("id") + ";"));
                            stm.close();
                            con.close();
                            out.print("Alteração realizada com sucesso!");
                            response.sendRedirect("index.jsp?acao=consultar");
                        } catch (Exception ex) {
                            out.print("Erro: " + ex.toString());
                        }
                    }
        %>
    </body>
</html>

alterar.jsp:

<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Alterar</title>
    </head>
    <body bgcolor="#66AADD">

        <%
                    String acao = "";
                    String indice = request.getParameter("id");

                    Class.forName("com.mysql.jdbc.Driver").newInstance();

                    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/cadastro", "root", "root");
                    Statement stm = con.createStatement();
                    ResultSet rs;

                    if (request.getParameter("acao") == null) {
                        String query = "select * from cadastro where identificador=" + indice;
                        rs = stm.executeQuery(query);
                        while (rs.next()) {
                            out.print("<form action='alterar.jsp?acao=salvaralteracao' method='post' id='salvaralteracaoform'>");
                            out.print("<input type='hidden' name='indice2' id='indice2' value='" + indice + "' />");
                            out.print("Nome: " + "<input type='text' name='anome' id='anome' value='" + rs.getString("nome") + "' ><br />");
                            out.print("E-mail: " + "<input type='text' name='aemail' id='aemail' value='" + rs.getString("email") + "' ><br />");
                            out.print("Telefone: " + "<input type='text' name='atelefone' id='atelefone' value='" + rs.getString("telefone") + "' ><br />");
                            out.print("Idade: " + "<input type='text' name='aidade' id='aidade' value='" + rs.getString("idade") + "' ><br />");
                            out.print("<input type='submit' id='alterar' value='Salvar Alteração' >");
                            out.print("</form>");
                        }

                    } else if (request.getParameter("acao").equals("salvaralteracao")) {
                        String nome = request.getParameter("anome");
                        String idade = request.getParameter("aidade");
                        String telefone = request.getParameter("atelefone");
                        String email = request.getParameter("aemail");
                        String query = "";
                        query = "update cadastro set nome='" + nome;
                        query += "',idade='" + idade;
                        query += "',telefone='" + telefone;
                        query += "',email='" + email;
                        query += "' where identificador = '" + request.getParameter("indice2") + "'";
                        stm.executeUpdate(query);
                        stm.close();
                        con.close();
                        response.sendRedirect("index.jsp?acao=consultar");
                    }
        %>
    </body>
</html>

excluir.jsp:

<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Excluir</title>
    </head>
    <body bgcolor="#66AADD">

        <%
                    String indice = request.getParameter("id");
                    String query = "delete from cadastro where identificador=" + indice;
                    Class.forName("com.mysql.jdbc.Driver").newInstance();

                    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/cadastro", "root", "root");
                    Statement stm = con.createStatement();
                    ResultSet rs;

                    stm.executeUpdate(query);
                    stm.close();
                    con.close();
                    response.sendRedirect("index.jsp?acao=consultar");

        %>
    </body>
</html>

13 Respostas

benignoms

Amigão, não há MVC com scriptlet… ao menos não tenho nem interesse em saber como seja :wink: Use JSF!

coca1na

Voce ta dizendo que se eu utilizar linguagem pura, como ta ai, nao consigo colocar em mvc ?

getAdicted

Olá,

É como utilizar JAVA como um linguagem procedural, ou seja, desprezando o paradigma de OO.

Você não considerou o paradigma MVC:

Model (modelo)…: classes de persistência.
View (visão)…: classes de visão.
Controller (controle)…: classes responsáveis pela lógica do negócio.

Eu aconselho você a procurar materiais que contemplem o assunto em questão, eu posso indicar a apostila caelum-fj21, me ajudou muito.

[]'s

coca1na

Eu ainda não entendi direito… eu acho…

Eu sei que não considerei o MVC, é isso que quero fazer…

Tenho esse aplicativo, e quero deixar ele no padrão MVC…

O que eu deveria fazer para que ele fique em MVC ? Criar uma classe que conterá as ações dos servlets… outra pras ações do banco…

gostaria de dicas sobre o que fazer com este código pra ficar em MVC

j0nny

Não precisa usar JSF não, pode fazer MVC desse seu modo tbm, mas antes estude bem sobre MVC.
Sua estrutura pode ser parecida com essa:
View: JSP’s e Servlet’s
Controller: Classe responsável por receber as requisições da servlet
Model: Classes que cuidam da sua regra de negócio

Espero ter clareado isso…

Edit: Do jeito que vc está fazendo, colocando sua persistência nas JSP’s, é totalmente contrário ao MVC, aconselho ler mais sobre MVC.

coca1na

j0nny:
Não precisa usar JSF não, pode fazer MVC desse seu modo tbm, mas antes estude bem sobre MVC.
Sua estrutura pode ser parecida com essa:
View: JSP’s e Servlet’s
Controller: Classe responsável por receber as requisições da servlet
Model: Classes que cuidam da sua regra de negócio

Espero ter clareado isso…

Edit: Do jeito que vc está fazendo, colocando sua persistência nas JSP’s, é totalmente contrário ao MVC, aconselho ler mais sobre MVC.

Obrigado…

Sim, sim, eu sei, é totalmente contrário ao MVC.

Tem muuuuito o que melhorar aí, e eu não pretendo usar nenhum framework pra nada, só o código puro mesmo, mesmo porque não tem necessidade, é um sistema bem simples para fins acadêmicos.

Então, eu deveria fazer assim ?

Model:
Nesta parte, deixarei as classes que farão os comandos no banco de dados, conexão com o banco, e etc ?

View:
Nesta parte irei colocar os jsp’s com os formulários ?

Controller:
Nesta parte eu coloco os servlets que receberão as requisições feitas na view e enviarão ao model e o caminho contrário tmb ?

Veja que eu coloquei os servlets na Controller, pq eu acho que eles não se encaixam na view, estou incorreto ?

Desta forma como eu listei estaria aplicando corretamente o mvc ?

Obrigado, e desculpe a insistencia.

j0nny

coca1na:
j0nny:
Não precisa usar JSF não, pode fazer MVC desse seu modo tbm, mas antes estude bem sobre MVC.
Sua estrutura pode ser parecida com essa:
View: JSP’s e Servlet’s
Controller: Classe responsável por receber as requisições da servlet
Model: Classes que cuidam da sua regra de negócio

Espero ter clareado isso…

Edit: Do jeito que vc está fazendo, colocando sua persistência nas JSP’s, é totalmente contrário ao MVC, aconselho ler mais sobre MVC.

Obrigado…

Sim, sim, eu sei, é totalmente contrário ao MVC.

Tem muuuuito o que melhorar aí, e eu não pretendo usar nenhum framework pra nada, só o código puro mesmo, mesmo porque não tem necessidade, é um sistema bem simples para fins acadêmicos.

Então, eu deveria fazer assim ?

Model:
Nesta parte, deixarei as classes que farão os comandos no banco de dados, conexão com o banco, e etc ?

View:
Nesta parte irei colocar os jsp’s com os formulários ?

Controller:
Nesta parte eu coloco os servlets que receberão as requisições feitas na view e enviarão ao model e o caminho contrário tmb ?

Veja que eu coloquei os servlets na Controller, pq eu acho que eles não se encaixam na view, estou incorreto ?

Desta forma como eu listei estaria aplicando corretamente o mvc ?

Obrigado, e desculpe a insistencia.

Correto, com uma ressalva, muitos colocam a servlet na view, por ela ‘popular’ a view muitas vezes, é discutível, tudo depende de como vc fará isso.

benignoms

Poder pode… Quem quer pode tudo! Não quis dizer que era obrigatório o uso de JSF, e sim, que existem frameworks MVC para facilitar o trabalho. Pra que sofrer? Se for um trabalho de faculdade… tudo bem!

j0nny

Talvez por aprender como funcionam as coisas debaixo dos panos?

P

Modelo Visao e Controle… São separados. a visão sera so as Paginas jsp sem scriplets (use Expression Languege EL em vez de scriplets) … o controller é onde vc vai receber os dados que suas paginas jsp enviarao ( o que o usuario requisitar) … e no seu servlet vc ira tratar a requisição de acordo com o que o usuario esta querendo… se necessario enviar para a camada de negocios que é o Model onde vc pode persistir os dados do usuario , quando tiver manipulado os dados que o usuario requisitou… vc envia uma resposta de volta para a View (a pagina jsp) e é isso.!

Falow :smiley:

benignoms

Basta estudar… mas fazer um sistema MVC “BY HANDS”… é meio louco, não acha?

coca1na

benignoms, não concordo, não acho que seja meio louco, é tudo uma questão de possibilidade, neste caso por exemplo, como pode ser visto no código que eu disponibilizei, é um sistema muito simples, com poucas linhas de código e poucas ações a serem realizadas.

Não é abordada nenhuma questão de segurança outro coisa qualquer.

Não vejo nenhum problema realmente em realizar a padronização na mão sem o uso de frameworks.

Pedro_GTI, só uma observação, o Model deve receber e enviar de volta as informações ao Controller, não ? Acho que o Model enviar direto à View é incorreto.

ou estou equivocado ?

Obrigado a todos pelos comentários, continuem dando suas opniões se possível.

P

O model envia é para o controller mesmo… e o controller faz a ligação para a pagina… algumas raras vezes o modelo comunica-se direto com a view mas n é uma boa pratica… o papel do controller é ser um intermediario entre a view e o model…

Criado 20 de novembro de 2010
Ultima resposta 20 de nov. de 2010
Respostas 13
Participantes 5