Duvida: struts

oi gente,

estou começando em java, e estou usando o struts.
tem um errinho q estah dando, q naum consegui resolver… jah pesquisei, e tentei de td. se puderem me dar uma mao.
o erro:

javax.servlet.ServletException
	org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

bom, vou colar aqui meu FormBean, q eh onde ACHO q estah o erro.

package br.com.caelum.struts.form;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.*;
import br.com.caelum.jdbc.modelo.Contato;

public class ContatoForm extends ActionForm {

	private Contato contato = new Contato();
	
	public Contato getContato() {
		return this.contato;
	}
	
	public boolean stringVazia(String s) {
		return s == null || s.trim().length() == 0;
	}
	
	public ActionErrors validate(ActionMapping map, HttpServletRequest req) {
		ActionErrors erros = new ActionErrors();
		if (stringVazia(contato.getNome())) {
			erros.add("nome", new ActionMessage("erro.campoNome"));
		}
		if (stringVazia(contato.getEmail())) {
			erros.add("email", new ActionMessage("erro.campoEmail"));
		}
		if (stringVazia(contato.getEndereco())) {
			erros.add("endereco", new ActionMessage("erro.campoEndereco"));
		}
		return erros;
	}
	

	public void reset(ActionMapping map, HttpServletRequest req) {
		contato.setNome(null);
		contato.setEmail(null);
		contato.setEndereco(null);
	}

}

meu AdicionaContatoAction:

package br.com.caelum.struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.*;
import br.com.caelum.jdbc.dao.ContatoDAO;
import br.com.caelum.jdbc.modelo.Contato;
import br.com.caelum.struts.form.ContatoForm;

public class AdicionaContatoAction extends Action {
	
	
	public ActionForward execute(ActionMapping map,	ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		ContatoForm formulario = (ContatoForm)form;
		System.out.println("Tentando criar um novo contato...");
		Contato contato = formulario.getContato();
		ContatoDAO dao = new ContatoDAO();
		dao.adiciona(contato);
		return map.findForward("ok");
	}

}

meu novo.jsp:

<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>

<html:html>
<head><title>Cadastrar usuário</title></head>
<html:errors/>
<html:form action="/novoContato" focus="contato.nome">
	Nome:
	<html:text property="contato.nome"/>
	<br/>
	Email: 
	<html:text property="contato.email"/>
	<br/>
	Endereço: 
	<html:text property="contato.endereco"/>
	<br/>
	<html:submit>Enviar dados</html:submit>
	<br/>
</html:form>
</html:html>

um pedaço do struts-config(form-beans e action-mappings):

(...)
    <form-bean
    	name="ContatoForm"
    	type="br.caelum.struts.form.ContatoForm"/>
(...)
		<action
			path="/listaContatos"
			type="br.com.caelum.struts.action.ListaContatosAction">
				<forward name="lista" path="/lista.jsp"/>
		</action>

		<action
			path="/novoContato"
			type="br.com.caelum.struts.action.AdicionaContatoAction"
			name="ContatoForm"
			input="/novo.jsp"
			scope="request">
				<forward name="ok" path="/listaContatos.do"></forward>
		</action>

		<action
			path="/removeContato"
			type="br.com.caelum.struts.action.RemoveContatoAction"
			name="ContatoForm"
			input="/exclui.jsp"
			scope="request">
				<forward name="rmvOk" path="/listaContatos.do"></forward>
		</action>
		
		<action
			path="/mostraContato"
			type="br.com.caelum.struts.action.MostraContatoAction"
			name="ContatoForm"
			input="/mostra.jsp"
			scope="request">
				<forward name="mstOk" path="/listaContatos.do"></forward>
		</action>
(...)

ah, mais uma pequena duvida… como devo chamar a pagina?
localhost:8080/struts/novo.jsp
ou
localhost:8080/struts/adicionaContato.do
?

se alguem puder me ajudar…
desde jah agrdeço.
Deus abençoe!

primeiro quando acontece o erro?

depois no seu form nao coloque um objeto inteiro mas sim as propiedades dele
tipo:

private String nome;
private String email;
private String endereco;
...
//metodos get's e set's
...

mals, proxima eu coloco mais abreviado…
bom, o erro ocorre qdo eu executo o localhost:8080/struts/novo.jsp
ai dah aquela mensagem de erro…

crie um novo action mapping

<action
         path="/addContato"
         name="ContatoForm"
         input="/novo.jsp"
         forward="/novo.jsp" />

chame ele assim
localhost:8080/struts/addContato.do

ih…

continua no mesmo erro… :cry:
mas vlw mesmo assim…

como esta seu web.xml?

o web.xml tah assim:

<web-app>

  <display-name>Struts Blank Application</display-name>
  
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>2</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>2</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

//welcome file list
//declaracoes de taglibs

</web-app>