Struts em ação - erro cod capitulo 1

[list]Olá pessoal,

Sou novo no mundo java e pra poder me ajudar a aprender java pra web ou melhor Struts, comprei o livro Struts em ação, mas no primeiro capitulo existe um exemplo básico que esta apresentando erro. Poderiam me ajudar?? Preciso aprender isso logo, pois entrei como trainne de java e tenho que saber isso… to ferrado, não sei nem montar a estrutura de diretórios e nem sei o que colocar dentro de cada diretório.

Ai, pessoal, segue o erro que apresenta na aplicação que fiz(copiei rsrs)… os códigos fonte[list]

ERRO:
org.apache.jasper.JasperException: File “/WEB-INF/struts-html.tld” not found
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:50)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:411)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:118)
org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:159)
org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:418)
org.apache.jasper.compiler.Parser.parseDirective(Parser.java:483)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1539)
org.apache.jasper.compiler.Parser.parse(Parser.java:126)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:220)
org.apache.jasper.compiler.ParserController.parse(ParserController.java:101)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:203)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:470)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

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

RegisterAction.java

package app;

import org.apache.struts.action.*;
import javax.servlet.http.*;
import java.io.*;

public class RegisterAction extends Action
{
	public ActionForward perform (ActionMapping mapping,
								 ActionForm form,
	                             HttpServletRequest req,
	                             HttpSerletResponse res)
	{

		//Faca a coercao do formulario para o RegisterForm
		String username = rf.getUsername();
		String password1 = rf.getPassword1();
		String password2 = rf.getPassword2();


		// Aplique a logica de negocio
		if (password1.equals(password2))
		{
			try
			{


				//Retorne ActionForward no caso de sucesso
				UserDirectory.getInstance().setUser(username,password1);
				return mapping.findForward("sucess");
			}
			catch (UserDirectoryException e)
			{
				return mapping.findForward("failure");
			}
		}


		//Retorne ActionForward no caso de falha
		return mapping.findForward("failure");
	}
}

registerform.java

package app;

import org.apache.struts.action.*;

public class RegisterForm extends ActionForm
{
	/*Declaracao de variaveis*/
	protected String username;
	protected String password1;
	protected String password2;


	/*Declaracao dos getters*/
	public String getUsername ()
	{
		return this.username;
	};
	public String getPassword1 ()
	{
		return this.password1;
	};
	public String getPassord2 ()
	{
		return this.password2;
	};

	/*Declaracao dos setters*/
	public void setUsername(String username)
	{
		this.username = username;
	};
	public void setPassword1(String password)
	{
		this.password1 = password;
	};
	public void setPassword2 (String password)
	{
		this.password2 = password;
	};
}

struts-config.xml

&lt?xml version="1.0" encoding="ISO-8859-1" ?&gt

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">


/* Aqui contém detalhes que o ActionServlet precisa para lidar com as solicitações feitas para sua aplicação. */



<!-- ======================================== Form Bean Definitions -->
<struts-config>
    <form-beans>
    
    	<!-- Registration form bean -->
    	<form-bean name="registerForm" type="app.RegisterForm"/>
    </form-beans>


<!-- =================================== Action Mapping Definitions -->
<action-mappings>
    <!-- Process a user logon -->
    <action    path="/register"
               type="app.RegisterAction"
               name="registerForm">
    	<forward name="sucess" path="/sucess.html"/>
    	<forward name="failure" path="/failure.html"/>
    </action>
    </action-mappings>
</struts-config>

register.jsp

<%@ taglib uri="WEB-INF/struts-html.tld" prefix="form" %>

<form:form action="register.do">
	UserName:<form:text property="username"/><br>
	enter password:<form:password property="password1"/><BR>
	re-enter password:</form:password property="password2"/><BR>
<form:submit value="Register"/>
</form:form>

sucess.html

<HTML>
<HEAD>
	<TITLE>SUCESS</TITLE>
</HEAD>
<BODY>
	Registration succeeded!
	<P><A > try another?</A></P>
</BODY>
</HTML>

failure.html

<HTML>
<HEAD>
	<TITLE>FAILURE</TITLE>
</HEAD>
<BODY>
	Registration failure!
	<P><A > try again?</A></P>
</BODY>
</HTML>

Valeu galera pela força e um grande abraço a todos…

Esse é o pior livro para se aprender struts que eu ja vi.
Os exemplos são cheios de falhas…Falta o autor mencionar algumas coisas para o exemplo rodar,e ainda por cima a tradução é uma das piores que ja vi!

Bem o seu erro me parece que você não colocou os arquivos .tld no diret´roio WEB-INF.
tENTA fazer isso e deve funcionar…

[quote=antoniopopete]Esse é o pior livro para se aprender struts que eu ja vi.
Os exemplos são cheios de falhas…Falta o autor mencionar algumas coisas para o exemplo rodar,e ainda por cima a tradução é uma das piores que ja vi!

Bem o seu erro me parece que você não colocou os arquivos .tld no diret´roio WEB-INF.
tENTA fazer isso e deve funcionar…[/quote]

Discordo…
Completamente.
Alias, nao tao completamente. A Tradução pode não ser a das melhores, as vezes leio 2x ou até 3x a mesma página. Mas entendo.
Estou lendo também. Não fiz nenhum exercício, pois uso o Struts mais de 8 horas por dia. Estou lendo para conceito mesmo…
Muito bom o livro, usa bem design patterns, OO, e etc…

 org.apache.jasper.JasperException: File "/WEB-INF/struts-html.tld" not found 

Coloca sua tag dentro do XML.
Perceba que o conteiner diz que nao encontrou a tag.
Seu fonte tem outro erro, no action voce nao esta fazendo o Parse para o seu ActionForm. Veja bem, o rf, simplesmente nao existe.

Outra coisa, o livro inicia imaginando que voce sabe java e as coisas basicas para java web.
Baixe o fonte. Os fontes DEVEM estar rodando e funcionando…

[]'s

afsrj e antoniopopete, blz?

até havia entendido que não havia encontrado a tag, mas o problema é que não sei direito onde declarar… to viajando nisso… o meu problema maior é o de não enterder muito bem a função e o que deve haver em cada parte do struts… tb estou cabaçando pra montar os diretórios…

Agradeço pela força de vcs até o momento e desculpe pelo trabalho que estou dando a vcs…

[]'s

afsrj, fiz a correção no action que me falow… segue abaixo o código:

add&gt&gt RegisterForm rf = (RegisterForm) form;

package app;

import org.apache.struts.action.*;
import javax.servlet.http.*;
import java.io.*;

public class RegisterAction extends Action
{
	public ActionForward perform (ActionMapping mapping,
								 ActionForm form,
	                             HttpServletRequest req,
	                             HttpSerletResponse res)
	{

		//Faca a coercao do formulario para o RegisterForm
		RegisterForm rf = (RegisterForm) form;
		
		String username = rf.getUsername();
		String password1 = rf.getPassword1();
		String password2 = rf.getPassword2();


		// Aplique a logica de negocio
		if (password1.equals(password2))
		{
			try
			{


				//Retorne ActionForward no caso de sucesso
				UserDirectory.getInstance().setUser(username,password1);
				return mapping.findForward("sucess");
			}
			catch (UserDirectoryException e)
			{
				return mapping.findForward("failure");
			}
		}


		//Retorne ActionForward no caso de falha
		return mapping.findForward("failure");
	}
}

Pessoal,

não havia mesmo o arquivo… add o arquivo do struts blank… Agora esta dando este erro:

org.apache.jasper.JasperException: /register.jsp(6,19) The end tag “</form:password” is unbalanced
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:134)
org.apache.jasper.compiler.Parser.checkUnbalancedEndTag(Parser.java:1706)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1561)
org.apache.jasper.compiler.Parser.parseBody(Parser.java:1789)
org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:1060)
org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1367)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1560)
org.apache.jasper.compiler.Parser.parse(Parser.java:126)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:220)
org.apache.jasper.compiler.ParserController.parse(ParserController.java:101)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:203)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:470)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

poderiam me ajudar a enterder as mensagem de erro tb?? não sei se estou sabendo o que elas estão indicando de erro…

Um abraço a todos…

O erro esta aqui:

re-enter password:</form:password property="password2"/><BR>

Retire essa barra na tag form vc está fechando antes:


re-enter password:<form:password property="password2"/><BR>

Olá ramilani12, muito obrigado pela ajuda… o erro tb esta no livro… valeu mesmo cara… mas agora aparece este erro e pelo que entendo é de biblioteca… mas não sei como colocar… vou add um aquivo pra mostar como o código fika ao abrir no eclipse…

org.apache.jasper.JasperException: Unable to compile class for JSP
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:97)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:346)
org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:414)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:472)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK
org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory.getCompiler(CompilerAdapterFactory.java:106)
org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:935)
org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:764)
org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:382)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:472)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

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

pessoas, bom dia!!

arrumei o java home, o path e o classpath(desintalei o tomcat e o jdk, instalei novamente e configurei as variáveis do sistema novamente). E agora só acusa este erro:

HTTP Status 404 - /register/register.jsp


type Status report

message /register/register.jsp

description The requested resource (/register/register.jsp) is not available.


Apache Tomcat/5.0.28