Struts Aplicação

Olá pessoal, estou estudando struts e estou com erro em minha aplicação, quando tento acessar http://localhost:8080/brioko/teste.do aparece o seguinte erro:


HTTP Status 404 - Servlet action is not available

type Status report

message Servlet action is not available

description The requested resource (Servlet action is not available) is not available.
Apache Tomcat/6.0.16


Alguem sabe me dizer o que está gerando esse erro? Vou postar meus arquivos de configuração :

web.xml

<?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>
  <display-name>Struts Blank Application</display-name>
  
  <!-- Standard Action Servlet Configuration -->
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
 </servlet>


  <!-- Standard Action Servlet Mapping -->
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

 
</web-app>

struts-config.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>

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

<struts­-config>

    <action-­mappings>

        <action path="/teste" type="TesteSimplesAction">
              <forward name="ok" path="/exemplo.jsp"/>
        </action>

    </action-­mappings>


    <!­­ Arquivo de Mensagens ­­>
    <message­resources parameter="MessageResources" />

</struts­-config>

TesteSimplesAction.java

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 TesteSimplesAction extends Action{
	
	public ActionForward execute(ActionMapping map, ActionForm form, HttpServletRequest request, HttpServletResponse response){
		
		System.out.println("Executando o codigo da logica de negocios...");
		return map.findForward("ok");
		
				
	}
	
	
}

Bom eh isso! Estou com esse problema e está me intrigando o que acaba impacando a continualidade de meus estudos sobre JEE, se puderem ajudar estarei muito agradecido.
Valeu pessoal, até logo

ps:Esses problemas do erro de ortografia do codigo foi de quando eu copiei no eclipse e colei aqui no post do forum mas no meu codigo estes erros estão certo ! A questão é algum parametro que esta faltando não ??

Seu erro está no XML, a sua classe realmente não está dentro de pacote nenhum? Se estiver, tem que colocar no “type” do xml.

Nao, nao está dentro de nenhum pacote, está no default packege!
Qual erro poder ser no xml? Eu ja li, re-li, refiz de diversas maneiras esses xml !!!

Ja tentou extender sua classe de DispatchAction ?

public class TesteSimplesAction extends org.apache.struts.actions.DispatchAction

[]'s

Tentei isso que disse! Mas deu na mesma …
O codigo está certo? É essa a ideia??
Nao sei, tem algo de errado nesses xml que no momento em que acesso o link teste.do nao acha a servlet, mas agora, qual seria este motivo???

tenta extender de DispatchAction

Ja tentei isso! Como disse acima …

ok… vamos lá…

Todas e quaisquer diferenças que eu pude notar:

O método execute tem na assinatura “throws Exception” (não sei se causa alguma diferença pois nunca coloquei sem, mas… como dito, “todas e quaisquer diferenças”).

A linha 18 do seu XML está errada (o comentário):

para:

Esse MessageResources.properties existe dentro de src? (apenas dentro de src, não pode estar dentro de nenhuma package ou pasta, se estiver, tem que mudar, ou o XML ou o local do .properties)

Bem… dá uma olhada nisso.

o que ele esta fazendo é sobscrever o metodo execute… com isto mesmo que o execute na classe pai tenha um throws Exception seu filho não precisa ter…
portanto neste ponto não faz diferença… é mesmo meio complicado de descobrir na hora de configurar… o melhor mesmo é puxar um exemplo ja configurado e funcionando e modificar as configurações do seu jeito…
do que configurar do 0…

Bom, estes erros de ortografia no codigo eu consertei no meu projeto, testei e entao nao o mesmo erro, observei o arquivo MessageResources.properties e está criado no src apenas nele …
Este erro que está acontecendo ta me intrigando, nao to conseguindo evoluir meus estudos em JEE por isso… :x

No struts-config.xml vc definiu errado sua tag de mensagens.

Esta assim:

<messageresources 

O certo seria:

<message-resources..

[]'s

concordo luistiagos, nem me lembro da ultima vez que digitei um Class.forName para driver de Banco de Dados… hahaha, primeiro eu digitei pra aprender, depois fiz um componente ninja, depois JPA, o negocio é saber que existe e entender.

hahaha, pode crer lcegatti.

O meu codigo no projeto esta correto, digitei <message-resources… o que acontece é que quando postei algumas codigos coram postados errados :wink: Mas obrigado pela atenção !!!

Obrigado galera! Nao encontrei a solução ainda, vou dar uma pesquisada na net…
Se souberem de algo me informe por gentileza…

Valeu pessoal!!

Ok, tive uma idéia! Plano B!

kara… se mata, pega outro projeto, o _blank, carrega e começa dai, se bobiar tem um “.” no fim do xml e vamos demorar 3 dias pra descobrir, ainda mais que pelo que entendi você ainda não chegou a desenvolver nada (justamente pelo struts não estar “funcionando”).

huauhauhahua… bem… é o que eu faria uma hora dessas.

Na hora que vc estiver iniciando o Tomcat da uma olhada no log e ve se não esta com algum erro na inicialização.

[]'s

[quote=victor.godinho]Ok, tive uma idéia! Plano B!

kara… se mata, pega outro projeto, o _blank, carrega e começa dai, se bobiar tem um “.” no fim do xml e vamos demorar 3 dias pra descobrir, ainda mais que pelo que entendi você ainda não chegou a desenvolver nada (justamente pelo struts não estar “funcionando”).

huauhauhahua… bem… é o que eu faria uma hora dessas.[/quote]

ahahhaha verdade ahahhahahah

É, justamente isso que vou tentar, o codigo esta ok certo? vou me basear na logica do struts e vou tentar criar dai … eu vou avisando aqui no topico como fui me saindo!

Valeu pessoal !!

Bom galera fiz algumas alterações de acordo com nosso amigo victor.godinho e mudei os arquivod xml, isso gerou mudaças no resultado mas ainda não está funcionando corretamente, mas já se abre uma grande porta para o raciocinio do problema, vou postar os novos arquivos de configuração:

web.xml

<?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>
  <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>
    <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>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

</web-app>

struts-config.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>


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



<struts-config>

    <global-forwards>
            <forward
            name="teste"
            path="/pages/wall.jsp"/>
    </global-forwards>


    <action-mappings>
            
        <action
            path="/ddd"
            type="TesteSimplesAction"/>

    </action-mappings>

    <message-resources parameter="MessageResources" />

</struts-config> 

TesteSimplesAction.java

import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionMapping; 
import org.apache.struts.action.ActionForm;  
import org.apache.struts.action.ActionForward; 

public class TesteSimplesAction extends Action {

	
	public ActionForward execute(ActionMapping map, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		System.out.println("OLA MUNDAO...");
		return map.findForward("teste");
		
	}
	
}

-> Dessa forma quando acesso o arquivo ddd.do aparece o seguinte erro:


HTTP Status 500 -

type Exception report

message

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

exception

javax.servlet.ServletException: java.lang.ClassNotFoundException: TesteSimplesAction
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

root cause

java.lang.ClassNotFoundException: TesteSimplesAction
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1360)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1206)
org.apache.struts.chain.commands.util.ClassUtils.getApplicationClass(ClassUtils.java:54)
org.apache.struts.chain.commands.util.ClassUtils.getApplicationInstance(ClassUtils.java:71)
org.apache.struts.chain.commands.servlet.CreateAction.createAction(CreateAction.java:98)
org.apache.struts.chain.commands.servlet.CreateAction.getAction(CreateAction.java:68)
org.apache.struts.chain.commands.AbstractCreateAction.execute(AbstractCreateAction.java:91)
org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

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

-> Contanto, fiz algumas alterções para testar o funcionamento e seguindo meu raciocinio chegamos a uma conclusão, bem tendo as seguintes alterações no arquivo struts-config.xml que irei postar:

struts-config.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>


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



<struts-config>

    <global-forwards>
            <forward
           [b] name="teste"
            path="/ddd.do"/[/b]>
    </global-forwards>


    <action-mappings>
            
            <action
            [b]path="/ddd"
            forward="/pages/wall.jsp[/b]"/>

    </action-mappings>

    <message-resources parameter="MessageResources" />

</struts-config> 

-> E criando um arquivo jsp “index.jsp” que tem um forward para teste

index.jsp

<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<logic:redirect forward="teste"/>

–> Ao acessar o index.jsp ou o ddd.do consigo o resultado desejado, portanto, voltando aos arquivos xml anteriores conseguimos enchergar que o erro esta com a classe TesteSimplesAction.java, pelo que estou imaginando existem duas hipoteses:
1- Existe um erro no codigo da classe TesteSimplesAction.java
2- Existe um erro no arquivo struts-config.xml neste momento:

<action
            path="/ddd"
            type="TesteSimplesAction"/>

—> Pelo que parece, não é encontrada essa classe (TesteSimplesAction.java), ja coloquei a “/” na frente ja fiz o action com invez de type coloquei forward (ps: Gostaria de saber a diferença entre eles), já coloquei o nome da clasa com o .java no final e ja escrevi o caminho inteiro default package.TesteSimplesAction. Bom me corrigam se minha analise estiver errada, tomando como conta, sou iniciante em JEE, mas estou precisando muito da resolução deste problema para poder proceguir meus estudos sobre o assunto, Obrigado pessoal, valeu a força e atenção de vcs :smiley:

kara…

Olha… estou aqui indignado… tá certo seu xml, sua classe…

(Sabe como é esses momentos, você começa a desconfiar até da sombra), tenta fazer assim:
Coloca essa sua Action dentro de um package (package teste;) e atualiza o type (type=“teste.TesteSimplesAction”), se não for isso… eu acho que terei que me matar.

Agora, quanto ao seu post:
O type indica a classe que “representa” aquele forward, ou seja, apenas para Classes, já o forward não, é genérico, você consegue utilizar para um JSP por exemplo, ou outro Servlet.
Apesar de na realidade as duas ficarem meio entrelaçadas, esse é o “porque”…

Abraço kara, tenta com esse package, já está “começando” (já começou) a ficar ridiculo esse erro com um Hello World (huaahuahuauhua).