Problemas ao rodar SERVLET

2 respostas
A

quando eu fui rodar uma servler no tomcat 5.0 deu o seguinte erro: java.lang.NullPointerException

o arquivo WEB-INF/web.xml está assim:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

    <servlet>
        <servlet-name>Teste</servlet-name>
        <servlet-class>TestServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Teste</servlet-name> 
        <url-pattern>/oi</url-pattern> 
    </servlet-mapping>

    <servlet>
        <servlet-name>Cadastro</servlet-name>
        <servlet-class>GravaServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Cadastro</servlet-name> 
        <url-pattern>/Cadastro</url-pattern> 
    </servlet-mapping>

  <servlet>
        <servlet-name>Consulta</servlet-name>
        <servlet-class>LerServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Consulta</servlet-name> 
        <url-pattern>/Consulta</url-pattern> 
    </servlet-mapping>

    <servlet>
        <servlet-name>Apaga</servlet-name>
        <servlet-class>ApagaServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Apaga</servlet-name> 
        <url-pattern>/Apaga</url-pattern> 
    </servlet-mapping>
</web-app>

o arquivo WEB_INF/classes/LerServlet.class está assim

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

public class LerServlet extends HttpServlet {
	Connection con;
	PreparedStatement pst;
	ResultSet rs;

	public void init ( ) throws ServletException {
		try {
				Class.forName("com.mysql.jdbc.Driver");
				String url="jdbc:mysql://127.0.0.1:3306/noite";
				con = DriverManager.getConnection(url,"root","");
				String sql = "Select * from funcionario";
				pst = con.prepareStatement( sql );
		} catch(Exception e) {}
	}
	public void doPost (HttpServletRequest req, HttpServletResponse resp)
				throws ServletException, IOException {
		resp.setContentType ("text/html");
		PrintWriter out = resp.getWriter();
		out.println("<html><head><title> Cadastro de funcionários");
		out.println("</title> </head> <body> <h1> <table>");
		out.println("<tr bgcolor = yellow> <th> Nome</th> <th> Cargo</th><th> Salário</th>");
		try {	
			rs = pst.executeQuery( );
			while ( rs.next( ) ) {
				out.println("<tr><td> <a href='Apaga?id="+rs.getString("id")+"'>" + rs.getString("nome")+ "</a>");
				out.println ("<td>" + rs.getString("cargo") );
				out.println ("<td>" + rs.getString("salario") );
			}
		} catch (Exception e) {
			out.println(e); 
		}
		out.println("</table></body> </html>");
		out.close();
	}
	public void doGet (HttpServletRequest req, HttpServletResponse resp)
				throws ServletException, IOException {
		doPost ( req, resp );
	}

	public void destroy ( ) {
		try {
			rs.close ( );
			con.close( );
		} catch (Exception e) { }
	}
}

2 Respostas

cancao

public void init ( ) throws ServletException { try { Class.forName("com.mysql.jdbc.Driver"); String url="jdbc:mysql://127.0.0.1:3306/noite"; con = DriverManager.getConnection(url,"root",""); String sql = "Select * from funcionario"; pst = con.prepareStatement( sql ); } catch(Exception e) {} }
No trecho acima, se houver algum erro, vc não vai ficar sabendo visto que não está fazendo um tratamento adequado da exception. Tente alterar para que fique assim:

public void init ( ) throws ServletException { try { Class.forName("com.mysql.jdbc.Driver"); String url="jdbc:mysql://127.0.0.1:3306/noite"; con = DriverManager.getConnection(url,"root",""); String sql = "Select * from funcionario"; pst = con.prepareStatement( sql ); } catch(Exception e) { e.printStackTrace(); } }
Dessa maneira vc vai ficar sabendo se a connection e o preparedstatement foram corretamente criados e podem ser usados em ourtras partes do servlet.

Até.

A

eu fiz isso mas não apareceu erro nenhum…

eu já tentei de tudo… este trecho do código tá certo(eu to utilizando em outra aplicação e tá funcionando).

Código: 
public void init ( ) throws ServletException { 
      try { 
            Class.forName("com.mysql.jdbc.Driver"); 
            String url="jdbc:mysql://127.0.0.1:3306/noite"; 
            con = DriverManager.getConnection(url,"root",""); 
            String sql = "Select * from funcionario"; 
            pst = con.prepareStatement( sql ); 
      } catch(Exception e) { 
            e.printStackTrace(); 
      } 
   }

eu acho que é erro na linha

rs = pst.executeQuery( );

Criado 15 de maio de 2004
Ultima resposta 16 de mai. de 2004
Respostas 2
Participantes 2