Servlet não funciona

10 respostas
F

Olá pessoal, tive de recorrer a vcs pois estou quando quero rodar um servlet, o tomcat me da o erro 500, com o seguinte conteúdo,

org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet LocadoraServlet threw exception
java.lang.NumberFormatException: null
	at java.lang.Integer.parseInt(Integer.java:454)
	at java.lang.Integer.parseInt(Integer.java:527)
	at meupacote.web.LocadoraServlet.service(LocadoraServlet.java:39)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
	at java.lang.Thread.run(Thread.java:717)

Obrigado pessoal, conto com o apoio de vocês

10 Respostas

O

Opa amigo.

Seguinte antes de dar o “parseInt” verifica se o objeto esta nulo.

Caso não resolva post seu codigo aqui para analisarmos melhor.

R

Dentro do seu servlet você passa um nulo para o método parseInt. É isso.

sugestão: pratique a leitura de stacktrace.

F

Oliveira.caio:
Opa amigo.

Seguinte antes de dar o “parseInt” verifica se o objeto esta nulo.

Caso não resolva post seu codigo aqui para analisarmos melhor.


Olá amigo, segue a servlet principal q eu chamo as outras…

package meupacote.web;

import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import meupacote.Titulo;
import meupacote.dao.*;


public class LocadoraServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public LocadoraServlet() {
        super();      
    }

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String cmd  = request.getParameter("cmd");
		
		if(cmd == null)
			cmd = "principal";
		
		
		InterfaceLocadoraDAO dao;
		Titulo titulo = new Titulo();
		if(cmd != null || !cmd.equalsIgnoreCase("principal")){
			
			titulo.setNome(request.getParameter("nome"));
			String isbn = request.getParameter("isbn");
			if(isbn == null)
				isbn="1";			
			titulo.setIsbn(isbn);
			String tipo = request.getParameter("tipo");
			titulo.setTipo(Integer.parseInt(tipo));
			titulo.setGenero(request.getParameter("genero"));
			
		}
		try{
			dao = (InterfaceLocadoraDAO) new LocadoraDAO();
			RequestDispatcher rd = null;
			if(cmd.equalsIgnoreCase("listar")){
				List titulosList = dao.todosTitulos();
				request.setAttribute("titulosList", titulosList);
				rd = request.getRequestDispatcher("/mostrarTitulosCads.jsp");				
			}else if(cmd.equalsIgnoreCase("addliv")){
				dao.salvar(titulo);
				rd = request.getRequestDispatcher("LocadoraServlet?cmd=listar");
			}
			else if(cmd.equalsIgnoreCase("exc")){
				dao.excluir(titulo);
				rd = request.getRequestDispatcher("LocadoraServlet?cmd=listar");
			}
			else if(cmd.equalsIgnoreCase("atu")){
				titulo = dao.procurarTitulo(titulo.getNome());
				HttpSession session = request.getSession(true);
				session.setAttribute("titulo", titulo);
				rd = request.getRequestDispatcher("/formAtuTitulo.jsp");
			}
			else if(cmd.equalsIgnoreCase("atualizar")){
				dao.atualizar(titulo);
				rd = request.getRequestDispatcher("LocadoraServlet?cmd=listar");
			}
			else if(cmd.equalsIgnoreCase("principal")){
				rd = request.getRequestDispatcher("/index.jsp");
			}
				rd.forward(request, response);
		}catch (Exception e) {
			e.printStackTrace();
			throw new ServletException(e);
		}		
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}

Segue o web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" 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"> <display-name> LocadoraWeb</display-name> <servlet> <description> </description> <display-name> LocadoraServlet</display-name> <servlet-name>LocadoraServlet</servlet-name> <servlet-class>meupacote.web.LocadoraServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LocadoraServlet</servlet-name> <url-pattern>/LocadoraServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>

Conto com vcs… :slight_smile: :slight_smile: :slight_smile:

F

rmendes08:
Dentro do seu servlet você passa um nulo para o método parseInt. É isso.

sugestão: pratique a leitura de stacktrace.

Amigo aonde encontro um tutorial ou link para praticar a leitura de stacktrance???

A

Opa amigo. É preciso você verificar antes o que o rmendes08 e o Oliveira.caio disseram.

Observe o erro:

# java.lang.NumberFormatException: null  
#     at java.lang.Integer.parseInt(Integer.java:454)  
#     at java.lang.Integer.parseInt(Integer.java:527)

Está falando que deu erro de NumberFormatException, ou seja, não foi possível converter para o tipo INT, ou pra um formato de número, pois o campo está nulo, ou não pode ser convertido em número(INT): java.lang.NumberFormatException: null

Nessa parte do código:

#   String tipo = request.getParameter("tipo");  
#             titulo.setTipo(Integer.parseInt(tipo));

No request.getParameter("tipo"), não existe o parâmetro "tipo", ou ela não pode ser convertida em INT por se tratar de uma String lliteral. Testa antes o que está chegando no parâmetro "tipo", depois volta a postar.

Valeu, e boa sorte.

R

Provavelmente o erro tá nesse trecho:

String tipo = request.getParameter("tipo");  
 titulo.setTipo(Integer.parseInt(tipo));

Um teste de nulo antes do parse resolve o seu problema.

Para ler uma stacktrace antes de mais nada você tem que entender como funcionam exceções e pilha de chamadas à métodos. Conhecendo isso é usá-las para procurar os erros.

P

ola felipe, na linha 39 da sua servlet (como diz a stacktrace: LocadoraServlet.java:39) voce esta tentando transformar uma String em int atraves do Integer.parseInt, porem a String que voce esta passando para esse método é null!

Chuto que voce esta pegando essa string de request.getParameter… ele retorna null quando o parametro nao foi passado via http (se for get, deve estar faltando o LocadoraSevlet?variavel=100)

F

Paulo Silveira:
ola felipe, na linha 39 da sua servlet (como diz a stacktrace: LocadoraServlet.java:39) voce esta tentando transformar uma String em int atraves do Integer.parseInt, porem a String que voce esta passando para esse método é null!

Chuto que voce esta pegando essa string de request.getParameter… ele retorna null quando o parametro nao foi passado via http (se for get, deve estar faltando o LocadoraSevlet?variavel=100)

Olá Paulo, obrigado, pela iluminação, mas estou apreendendo aos poucos a ler aquela pilha de erros!!

estou com mais uma dúvida.
está aparecendo outro erro 500 no servidor.

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

javax.servlet.ServletException: meupacote.dao.LocadoraDAO cannot be cast to meupacote.dao.InterfaceLocadoraDAO
	meupacote.web.LocadoraServlet.service(LocadoraServlet.java:75)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:729)


root cause 

java.lang.ClassCastException: meupacote.dao.LocadoraDAO cannot be cast to meupacote.dao.InterfaceLocadoraDAO
	meupacote.web.LocadoraServlet.service(LocadoraServlet.java:45)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:729)


note The full stack trace of the root cause is available in the Apache Tomcat/5.5.27 logs.

Segue tbm a interface

package meupacote.dao;
import meupacote.Titulo;
import java.util.List;

public interface InterfaceLocadoraDAO {
	void atualizar(Titulo titulo);
	void excluir(Titulo titulo);
	List todosTitulos();
	void salvar(Titulo titulo);
	Titulo procurarTitulo(String nome);
	
}

Vcs poderiam me dar uma ilumina porque está aparecendo este erro tbm??

Abraço a todos

F

estou apreendendo aos poucos a ler aquela pilha de erros!!

estou com mais uma dúvida.
está aparecendo outro erro 500 no servidor

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

javax.servlet.ServletException: meupacote.dao.LocadoraDAO cannot be cast to meupacote.dao.InterfaceLocadoraDAO
	meupacote.web.LocadoraServlet.service(LocadoraServlet.java:75)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:729)


root cause 

java.lang.ClassCastException: meupacote.dao.LocadoraDAO cannot be cast to meupacote.dao.InterfaceLocadoraDAO
	meupacote.web.LocadoraServlet.service(LocadoraServlet.java:45)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

Aqui vai a INTERFACE

package meupacote.dao;
import meupacote.Titulo;
import java.util.List;

public interface InterfaceLocadoraDAO {
	void atualizar(Titulo titulo);
	void excluir(Titulo titulo);
	List todosTitulos();
	void salvar(Titulo titulo);
	Titulo procurarTitulo(String nome);	
}

obrigado

M

Se o request.getParamiter() está retornando null, é porque esse atributo não existe na sessão. :wink:

Criado 9 de agosto de 2009
Ultima resposta 12 de ago. de 2009
Respostas 10
Participantes 6