[ problema ] Struts 1.1 & Action

Olá, pessoal.

Sou novo no Struts, estou tentando aprender o 1.X, por necessidade, já consegui alguns testes, mas agora tenho um problema ao tentar executar uma action… ( eu segui um tutorial ). Se puderem dar uma olhada, eu ficaria agradecido… Enquanto isso continuarei minhas buscas aqui, se eu mesmo conseguir a resposta também posto [ caso alguém outro também necessite :wink: )


FrameWork: STRUTS 1.1
IDE: Eclipse 3.4.0
Servidor: Tomcat 6.0.18
JAVA: JDK1.6.0_13


ERRO:

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

exception
org.apache.jasper.JasperException: An exception occurred processing JSP page /strutsv1_1t001/index.jsp at line 16

13: <body>
14: 	
15: 	<b><bean:message key="home.bemVindo"/></b><br/>
16: 	<html:form action="LogIn" type="login.Validar" method="POST">
17: 		<bean:message key="forms.nome"/> <html:text name="nome" property="nome" value=""/>
18: 		<bean:message key="forms.senha"/> <html:text name="senha" property="senha" value=""/>
19: 		<html:submit property="enviar" value="Enviar"/>


Stacktrace:
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

javax.servlet.ServletException: javax.servlet.jsp.JspException: Cannot retrieve mapping for action /LogIn
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:852)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
	org.apache.jsp.strutsv1_005f1t001.index_jsp._jspService(index_jsp.java:103)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

javax.servlet.jsp.JspException: Cannot retrieve mapping for action /LogIn
	org.apache.struts.taglib.html.FormTag.lookup(FormTag.java:810)
	org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:506)
	org.apache.jsp.strutsv1_005f1t001.index_jsp._jspx_meth_html_005fform_005f0(index_jsp.java:162)
	org.apache.jsp.strutsv1_005f1t001.index_jsp._jspService(index_jsp.java:93)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

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

Arquivos:

Web.XML

<?xml version="1.0" encoding="UTF-8"?>
<web-app
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID"
	version="2.5">

  	<!-- Titulo -->
	<display-name>strutsV1_1T001</display-name>
  	<!-- /Titulo -->

  	<!-- Erro 404 -->
	<error-page>
	  <error-code>404</error-code>
	  <location>/erros/404.jsp</location>
	</error-page>
  	<!-- /Erro 404 -->
	
  	<!-- Index -->
	<welcome-file-list>
	  <welcome-file>/strutsv1_1t001/index.jsp</welcome-file>
	</welcome-file-list>
  	<!-- /Index -->
  
  	<!-- Struts TLD TagLibs -->
	<jsp-config>
		<taglib>
		  <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
		  <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
		</taglib>
		
		<taglib>
		  <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
		  <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
		</taglib>
		
		<taglib>
		  <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
		  <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
		</taglib>
		
		<taglib>
		  <taglib-uri>/WEB-INF/struts-template.tld</taglib-uri>
		  <taglib-location>/WEB-INF/struts-template.tld</taglib-location>
		</taglib>
	</jsp-config>
  	<!-- /Struts TLD TagLibs -->

  	<!-- Struts config -->
	<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>application</param-name>
			<param-value>ling.ApplicationResources</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>  
  	<!-- /Struts config -->
  	
	<servlet-mapping>
		<servlet-name>action</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
</web-app>

Struts-config.XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC  
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"  
          "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">  
 <struts-config>  
 
 	<form-beans>
 		<form-bean name="Validar" type="login.Validar"/>
 	</form-beans>

	<action-mappings>
		<action path="LogIn" type="login.Executar" name="Validar" input="/index.jsp">
		  	<forward name="success" path="/logado.jsp"/>
			<forward name="failure" path="/index.jsp"/>
		</action> 
	</action-mappings>
  
 </struts-config>  

index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<!DOCTYPE html PUBLIC
	"-//W3C//DTD HTML 4.01 Transitional//EN"
	"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title><bean:message key="home.titulo"/></title>
</head>
<body>
	
	<b><bean:message key="home.bemVindo"/></b><br/>
	<html:form action="LogIn" type="login.Validar" method="POST">
		<bean:message key="forms.nome"/> <html:text name="nome" property="nome" value=""/>
		<bean:message key="forms.senha"/> <html:text name="senha" property="senha" value=""/>
		<html:submit property="enviar" value="Enviar"/>
	</html:form>
</body>
</html>

Validar.java

package login;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

public class Validar extends ActionForm {
  	private String nome  = null;
  	private String senha = null;
  	
	public String getNome() {
  	  	return (nome);
  	}
  	
  	public void setNome(String nome) {
  	  	this.nome = nome;
  	}

	public String getSenha() {
  	  	return (senha);
  	}
  	
  	public void setSenha(String senha) {
  	  	this.senha = senha;
  	}

} 

Executar.java

package login;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class Executar extends Action {
	
  	public ActionForward execute(
  			ActionMapping mapping,
  			ActionForm form,
  			HttpServletRequest request,
  			HttpServletResponse response)
  	throws IOException, ServletException {
  	  	String target = new String("success");
  	  	
  	  	if ( form != null ) {
			NameForm nameForm = (NameForm)form;
			String nome  = nameForm.getNome();
			String senha = nameForm.getSenha();
  	  	}
  	  	
  	  	if ( nome != "admin" || senha != "123456" )
  	  		target = new String("failure");
  	  	else {
  	  	  	request.setAttribute("NOME", nome);
  	  	}
  	  	
  	  	return (mapping.findForward(target));
  	}
  	
}

logado.jsp

UHUL

Estrutura de arquivos:

strutsV1_1T001
build
WAR
– -- strutsV1_1T001.WAR
WebContent
– -- erros
– -- – 404.jsp
– -- META-INF
– -- strutsV1_1T001
– -- – index.jsp
– -- – logado.jsp
– -- WEB-INF
– -- – classes
– -- – -- ling
– -- – -- – ApplicationResources.properties
– -- – -- login
– -- – -- – Executar.java
– -- – -- – Validar.java
– -- – lib
– -- – -- [ Struts common & struts.jar ]
– -- – struts-config.xml
– -- – struts-bean.tld
– -- – struts-html.tld
– -- – struts-logic.tld
– -- – struts-nested.tld
– -- – struts-template.tld
– -- – struts-tiles.tld
– -- – web.xml


Creio que aí tem tudo que se é necesário saber, se alguem souber alguma coisa que possa ajudar, por favor, poste :wink:

Obrigado.
Tarcísio.

ATUALIZAÇÃO

O Problema foi resolvido ( enquanto eu postava, fui lendo o código e tentei algumas alterações, agora ele roda )

AS ALTERAÇÕES:

PASTA LOGIN virou um PACOTE LOGIN com os dois arquivos Executar.java e Validar.java .

EXECUTAR.JAVA

package login;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class Executar extends Action {
	
[b]	String nome  = null;
	String senha = null;[/b]
	
  	public ActionForward execute(
  			ActionMapping mapping,
  			ActionForm form,
  			HttpServletRequest request,
  			HttpServletResponse response)
  	throws IOException, ServletException {
  	  	String target = new String("success");
  	  	
  	  	if ( form != null ) {
			[b]Validar [/b]nameForm =[b] (Validar)form;[/b]
			nome  = nameForm.getNome();
			senha = nameForm.getSenha();
  	  	}
  	  	
  	  	if ( nome != "admin" || senha != "123456" )
  	  		target = new String("failure");
  	  	else {
  	  	  	request.setAttribute("NOME", nome);
  	  	}
  	  	
  	  	return (mapping.findForward(target));
  	}
  	
} 

VALIDAR.JAVA

package login;

[b]import org.apache.struts.action.ActionForm;[/b]

public class Validar extends ActionForm {

	private static final long serialVersionUID = 1L;
	
	private String nome  = null;
  	private String senha = null;
  	
	public String getNome() {
  	  	return (nome);
  	}
  	
  	public void setNome(String nome) {
  	  	this.nome = nome;
  	}

	public String getSenha() {
  	  	return (senha);
  	}
  	
  	public void setSenha(String senha) {
  	  	this.senha = senha;
  	}

} 

Modificações no struts-config.XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC  
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"  
          "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">  
 <struts-config>  
 
 	<form-beans>
 		<form-bean name="Validar" type="login.Validar"/>
 	</form-beans>

	<action-mappings>
		<action [b]path="/login"[/b] type="login.Executar"[b] name="Validar"[/b] input="/index.jsp">
		  	<forward name="success" path="/logado.jsp"/>
			<forward name="failure" path="/index.jsp"/>
		</action> 
	</action-mappings>
  
 </struts-config>  

modificações do index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<!DOCTYPE html PUBLIC
	"-//W3C//DTD HTML 4.01 Transitional//EN"
	"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title><bean:message key="home.titulo"/></title>
</head>
<body>
	
	<b><bean:message key="home.bemVindo"/></b><br/>
	<html:form [b]action="login"[/b] type="login.Validar" method="POST">
		<bean:message key="forms.nome"/> <html:text name="nome" property="nome" value=""/>
		<bean:message key="forms.senha"/> <html:text name="senha" property="senha" value=""/>
		<html:submit property="enviar" value="Enviar"/>
	</html:form>
</body>
</html>

Executando no TOMCAT, ele abre normalmente, porém ao dar SUBMIT, ele da erro de PAGINA NÃO ENCONTRADA [404] :
/login.do;jsessionid=4D3D4E99479C248367DECA360E258E9E
Erro 404: Página não encontrada.

Continuo buscando as causas do novo erro, qualquer novidade posto aqui, se altguém tiver alguma idéia a mais, poste, por favor :wink:

Obrigado.

PROBLEMA RESOLVIDO.

Depois de alguns testes e mudanças por conta própria, achei o problema, agora tudo está funcionando.

MUDANÇAS:

struts-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC  
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"  
          "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">  
 <struts-config>  
 
 	<form-beans>
 		<form-bean name="Validar" type="login.Validar"/>
 	</form-beans>

	<action-mappings>
		<action path="/login" type="login.Executar" name="Validar" input="/index.jsp">
		  	<forward name="success" path="/strutsv1_1t001/logado.jsp"/>
			<forward name="failure" path="/strutsv1_1t001/index.jsp"/>
		</action> 
	</action-mappings>
  
 </struts-config>  

Executar.java

package login;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class Executar extends Action {
	
	String nome  = null;
	String senha = null;
	
  	public ActionForward execute(
  			ActionMapping mapping,
  			ActionForm form,
  			HttpServletRequest request,
  			HttpServletResponse response)
  	throws IOException, ServletException {
  	  	String target = new String("success");
  	  	
  	  	if ( form != null ) {
			Validar nameForm = (Validar)form;
			nome  = nameForm.getNome();
			senha = nameForm.getSenha();
  	  	}
  	  	
  	  	if ( nome.equals("admin") && senha.equals("123456") )
  	  	  	request.setAttribute("NOME", nome);
  	  	else {
  	  		target = new String("failure");
  	  	}
  	  	
  	  	return (mapping.findForward(target));
  	}
  	
} 

Bom, de qqr forma obrigado a todos ;D Desculpem o transtorno hahah

Abraço.
Tarcísio.