Servlet não executa comandos

Olá pessoal,

Mas uma vez to queimando a cabeça tentando fazer com que a servlet rode o que eu quero.

Montei uma aplicação onde tenho duas páginas jsp, uma com um formulário e outra que quando os dados forem inseridos a servlet redirecione para ela, pois bem, mando rodar num da nhum erro, porém no browser só fica o caminho da servlet e uma página em branco, e no banco de dados num insere nenhum valor. vejam os códigos:

Classe PessoaDB (Classe que faz o Insert)

/** 
 * Classe de Exemplo de Conexão e Comandos com o Banco de Dados PostgreSQL 
 * @author Paulo Henrique Peres 
 */ 

public class PessoaDB { 
    
    // Atributos da Classe 
    private int codigo; 
    private String nome; 
    private String email; 
    
    // Atributos para a conexão e comandos DDL 
    java.sql.Connection conn = null; 
    java.sql.ResultSet rs = null; 
    java.sql.Statement st = null; 
    
    // Parametros para conexão 
    String driver = "org.postgresql.Driver"; // Driver de Conexão 
    String usuario = "Paulo"; // Nome do Usuário 
    String senha = ""; // Senha do Usuário 
    String url = "jdbc:postgresql://localhost/Agenda"; // URL para Conexão 

    
    /** 
     * Métodos Set e Get da Classe 
     */ 
    public void setCodigo (int codigo) { 
        this.codigo = codigo; 
    } 
    
    public int getCodigo (){ 
        return codigo; 
    } 
    
    public void setNome (String nome){ 
        this.nome = nome; 
    } 
    
    public String getNome (){ 
        return nome; 
    } 
    
    public void setEmail (String email){ 
        this.email = email; 
    } 
    
    public String getEmail (){ 
        return email; 
    } 
    
    /** 
     * Métodos de INSERT, UPDATE, DELETE e SELECT no Banco de Dados 
     */ 
    
    // Método de INSERT 
    public void InsertSQL (){ 
        // Atributos do Método 
        String sql; 
        
        // Montando o comando SQL 
        sql = "INSERT INTO Agenda (cod_pessoa, nome_pessoa, email_pessoa)" + 
              "VALUES (" + codigo + ",'" + nome + "','" + email +"')"; 
        
        // Efetuando a Conexão e a execução do comando SQL 
        try { 
            // Conectando 
            Class.forName(driver); 
            conn = java.sql.DriverManager.getConnection(url,usuario, senha); 
            
            // Criando um Statement 
            st = conn.createStatement(); 
            
            // Efetuando o Comando 
            st.executeUpdate(sql); 
            
            // Fechando a Conexão 
            st.close(); 
            conn.close(); 
        } catch (Exception e){ 
            e.printStackTrace(); 
        } 
        
    } 
} 
 

Servlet



import java.io.*; 
import java.net.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 

public class CadastraPessoa extends HttpServlet { 
    // Atributos da Servlet 
    PessoaDB pessoa = new PessoaDB(); 
    private String target = "sucesso.jsp"; 
    
    /** Incializando a Servlet 
     */ 
    public void init(ServletConfig config) throws ServletException { 
        super.init(config); 
        
    } 
    
    // Método doGet 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
        
    } 

    
    // Método doPost 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
      
        // Setando os atributos da classe Pessoa 
        pessoa.setCodigo(Integer.parseInt(request.getParameter("codigo"))); 
        pessoa.setNome(request.getParameter("nome")); 
        pessoa.setEmail(request.getParameter("email")); 
        
        try{ 
            // Inserindo os dados 
            pessoa.InsertSQL(); 
            
            // Redirecionando para a página de sucesso do cadastro 
            ServletContext context = getServletContext(); 
            RequestDispatcher dispatcher = context.getRequestDispatcher(target); 
            dispatcher.forward(request, response); 
        } 
        catch (Exception e){ e.printStackTrace();} 
    } 

     /** Destruindo a Servlet 
     */ 
    public void destroy() { 
        
    } 
    
} 
 

Página onde está o form de cadastro


<%@page contentType="text/html"%> 
<%@page pageEncoding="UTF-8"%> 
<html> 
    <head><title>JSP Page</title></head> 
    <body> 
        <form name="CadastraPessoa" action="CadastraPessoa" method="POST"> 
            <p> Código: <input type="text" name="codigo" size="10"> 
            <p> Nome..: <input type="text" name="nome" size="50"> 
            <p> E-mail: <input type="text" name="email" size="30"> 
            <input name="Gravar" type="submit" value="Submit"> 
         </form> 
        

    </body> 
</html> 
 

Já num sei mais o q fazer, se pelo menos mostrasse algum erro, mas nem isso.

Valeu,

Paulo

cara. tem como vc mandar o web.xml tbm… isso parece erro de mapeamento :slight_smile:

[]´s

Veja o web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
  <servlet>
    <servlet-name>CadastraPessoa</servlet-name>
    <servlet-class>CadastraPessoa</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>CadastraPessoa</servlet-name>
    <url-pattern>/CadastraPessoa</url-pattern>
  </servlet-mapping>
  <session-config>
    <session-timeout>
            30
        </session-timeout>
  </session-config>
  <welcome-file-list>
    <welcome-file>
            index.jsp
        </welcome-file>
    <welcome-file>
            index.html
        </welcome-file>
    <welcome-file>
            index.htm
        </welcome-file>
  </welcome-file-list>
</web-app>

Valeu

Paulo

[quote=thadeurc]cara. tem como vc mandar o web.xml tbm… isso parece erro de mapeamento :slight_smile:

[]´s[/quote]

Não esta com erro de mapeamenco se nao apareceria algo como HTTP Status 404 - Servlet CadastraPessoa is not available

coloca alguma saida no seu metodo “doPost” que eu acho que o problema esta na conexao/inserção da sua classe PessoaDB

neste ponto:

<servlet>
<servlet-name>CadastraPessoa</servlet-name>
<servlet-class>[color=red]CadastraPessoa[/color]</servlet-class>
</servlet>

tu tem que por o caminho completo da sua classe, só o nome não funciona, o server não esta achando a sua classe :wink:

Colocar o que e de que modo?

[quote=skill_ufmt]neste ponto:

<servlet>
<servlet-name>CadastraPessoa</servlet-name>
<servlet-class>[color=red]CadastraPessoa[/color]</servlet-class>
</servlet>

tu tem que por o caminho completo da sua classe, só o nome não funciona, o server não esta achando a sua classe ;)[/quote]

A cllasse CadastroPessoa nao esta em nenhum pacote, logo o container procura ela dentro do WEB-INF/classes

Cara da uma olhada … tenta degugar na “mao” fazendo assim.

[code] protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

     // Setando os atributos da classe Pessoa 
     response.getWriter().write("Recebendo Parametros ");

     pessoa.setCodigo(Integer.parseInt(request.getParameter("codigo"))); 
     pessoa.setNome(request.getParameter("nome")); 
     pessoa.setEmail(request.getParameter("email")); 
     
     response.getWriter().write("Tentando Conectar ");
     try{ 
         // Inserindo os dados 
         pessoa.InsertSQL(); 
         response.getWriter().write("Inseriu ");             

         // Redirecionando para a página de sucesso do cadastro 
         ServletContext context = getServletContext(); 
         RequestDispatcher dispatcher = context.getRequestDispatcher(target); 
         dispatcher.forward(request, response); 
     } 
     catch (Exception e){ e.printStackTrace();
     response.getWriter().write("Gerou uma execao ");

}
}
[/code]

Esquece que falei no outro, mova a sua instanciação de Pessoa e sua target para dentro do doPost.

no seu insert você não esta passando parametros nenhum a seu sql, se vc não passar os valores de nome, codigo, email, para ele não irá gravar nada.

use um PreparedStateman para isso.

no mais leia um pouco, sua estrutura tá bem fraca principalemten quanto ao suo das cofigurações do banco de dados, retire isso do seu código, coloque em uma classe separada, se possível(e é possível) tabém retira seus insert, update, delete também para uma classe.

Nunca mexi com postgree, mas vc nao explicita em lugar nenhum o commit.

Seguindo a sugestão do colega sobre a estrutura… De uma olhada nos padrões MVC. Existem vários frameworks que te fazem todo o “trabalho sujo”… Procure no forum que tem um monte de discussões e ateh tutoriais no site.

Galera, fiz o q foi dito nos dois ultimos tópicos, porém naum funciona, quanto a questão de debugar com mensagens, apareceu todas as mensagens, tanto a dentro do try quanto a do catch

Que foda.

Valeu

Paulo

try{ 
              // Inserindo os dados 
              pessoa.InsertSQL(); 
              response.getWriter().write("Inseriu ");             
 
              // Redirecionando para a página de sucesso do cadastro 
              ServletContext context = getServletContext(); 
              response.getWriter().write("contexto ");             
              RequestDispatcher dispatcher = context.getRequestDispatcher(target); 
              response.getWriter().write("request");             
              dispatcher.forward(request, response); 
              response.getWriter().write("dispatcher");             
          } 

pra todo caso … da uma olhada neste artigo
http://www.guj.com.br/java.artigo.168.1.guj
creio q vai ser mais util pra voce …

[quote=skill_ufmt]neste ponto:

CadastraPessoa [color=red]CadastraPessoa[/color]

tu tem que por o caminho completo da sua classe, só o nome não funciona, o server não esta achando a sua classe ;)[/quote]

ta parecendo isso daqui mesmo… to tem que colocar o caminho completo da classe. package.class

[quote=denon][quote=skill_ufmt]neste ponto:

<servlet>
<servlet-name>CadastraPessoa</servlet-name>
<servlet-class>[color=red]CadastraPessoa[/color]</servlet-class>
</servlet>

tu tem que por o caminho completo da sua classe, só o nome não funciona, o server não esta achando a sua classe ;)[/quote]

ta parecendo isso daqui mesmo… to tem que colocar o caminho completo da classe. package.class[/quote]

La vai de novo
A classe CadastroPessoa nao esta em nenhum pacote (o que é desaconcelhado) , logo o container procura ela dentro do WEB-INF/classes

opa
onde esta seu postgresql.jar??

ele tem que ficar debntro da pasta tomcat/common/lib/
coloque dentro dessa pasta e reinicie o tomcat

outra, qual o nome desse jar??

Olá Pessoal,

Seguinte, resolvi o problema, era um erro estupido, 1º que na classe que fazia o insert eu coloquei o nome errado da tabela, e depois onde redirecionava para a página de sucesso na Servlet, coloquei assim na vairavel target = ‘sucessocadastra.jsp’, e o certo era ‘/sucessocadastra.jsp’.

Bom, aproveitando, quando insero um registro na barra de endereço do browser fica o nome da Servlet, como faço para mudar para o caminho da página de sucesso, ou nãim mostrar nada, o que seria até melhor.

Do mais, obrigado pelas dicas, quanto a questão de estudar, estou fazendo isso, esses problemas que eu enviei é de uma aplicação que está só servindo de testes.

Atenciosamente,
Paulo