Struts Aplicação

22 respostas
fmy_1

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 ??

22 Respostas

victor.godinho

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.

fmy_1

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 !!!

lcegatti

Ja tentou extender sua classe de DispatchAction ?

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

[]'s

fmy_1

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???

luistiagos

tenta extender de DispatchAction

fmy_1

Ja tentei isso! Como disse acima …

victor.godinho

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.

luistiagos

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…

fmy_1

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

lcegatti

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

Esta assim:

<messageresources

O certo seria:

<message-resources..

[]'s

victor.godinho

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.

fmy_1

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 !!!

fmy_1

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

Valeu pessoal!!

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.

lcegatti

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

guh008

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.

ahahhaha verdade ahahhahahah

fmy_1

É, 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 !!

fmy_1

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:

victor.godinho

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).

fmy_1

Ae galera! Até que fim, consegui resolver o caso, com a ajuda de um amigo o Bruno Savi que tb participa aqui do GUJ. Bom o problema era que as classes estavam indo para o diretorio /bin e nao para /WEB-INF/classes, por isso nao encontrava a minha Action. Obrigado a todos pela força, valeu pessoal, até logo 8)

jmarc1456

por favor cara

ja que vc conseguiu ajude os mais necessitados aqui
intão,

o esquema aqui tá assim

java 1.6
Tomcat 6
Struts 1.3.8

estrutura do arquivo struts.config.xml

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

	<action path="/teste" type="br.com.caelum.struts.action.TesteSimplesAction">
		<forward name="ok" path="/exemplo.jsp"/>
	</action>
	
</action-mappings>	

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

estrutura do arquivo Web.xml

<?xml version="1.0" encoding="ISO-8859-1"?> Aplicacao web simples index.html struts org.apache.struts.action.ActionServlet 1 struts *.do

estrutura do arquivo java (classe)

TesteSimplesAction.java

package teste;

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

{

<a class="mention" href="/u/override">@Override</a>

public ActionForward execute(ActionMapping map, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception

{

System.out.println(“Executando o código da lógica de negócios…”);

return map.findForward(“ok”);

}

}

vc pode ver que ele está em um pacote teste
ja tentei alterar no struts-config.xml de :

para

reiniciei o Tomcat a cada teste.

mas mesmo assim me é apresentado o erro :

http 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: br.com.caelum.struts.action.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: br.com.caelum.struts.action.TesteSimplesAction

org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1358)

org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)

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)

BLA BLA BLA BLA…

o erro é apresentado quando eu tento acessar o caminho :

http://localhost:8080/struts/teste.do

alguém pode me dar uma luz ae

to querendo continuar estudando a apostila da caelum F21 mas dei uma travada nesta parte.

segue no outro tópico a estrutura de pastas de minha aplicação

vlw ae ein

jmarc1456

essa é a estrutura de pastas de minha aplicação

Pasta de C:\java\workspace\br.com.caelum.struts.action
05/02/2009 23:36 217 .amateras
05/02/2009 23:37 754 .classpath
05/02/2009 22:33 4 .cvsignore
05/02/2009 22:33 462 .project
05/02/2009 23:04 356 .tomcatplugin
05/02/2009 22:33 bin
05/02/2009 22:13 251 exemplo.jsp
16/01/2009 00:25 159 index.html
06/02/2009 00:08 0 lista.txt
05/02/2009 22:33 src
04/02/2009 00:20 433 testa-mensagens.jsp
05/02/2009 22:34 WEB-INF
05/02/2009 23:41 work
Pasta de C:\java\workspace\br.com.caelum.struts.action\bin
Pasta de C:\java\workspace\br.com.caelum.struts.action\src
Pasta de C:\java\workspace\br.com.caelum.struts.action\WEB-INF
05/02/2009 22:33 7 .cvsignore
05/02/2009 23:37 classes
05/02/2009 22:35 lib
05/02/2009 22:59 src
05/02/2009 23:41 524 struts-config.xml
05/02/2009 23:28 537 web.xml
Pasta de C:\java\workspace\br.com.caelum.struts.action\WEB-INF\classes
03/07/2008 22:58 200 MessageResources.properties
05/02/2009 23:37 teste
Pasta de C:\java\workspace\br.com.caelum.struts.action\WEB-INF\classes\teste
05/02/2009 23:53 1.205 TesteSimplesAction.class
Pasta de C:\java\workspace\br.com.caelum.struts.action\WEB-INF\lib
29/05/2006 23:26 358.273 antlr-2.7.2.jar
24/09/2006 23:52 175.348 bsf-2.3.0.jar
29/05/2006 23:31 188.671 commons-beanutils-1.7.0.jar
13/08/2006 16:34 90.001 commons-chain-1.1.jar
06/12/2006 19:43 143.602 commons-digester-1.8.jar
16/08/2006 22:39 31.909 commons-fileupload-1.1.1.jar
16/08/2006 22:39 61.562 commons-io-1.1.jar
29/05/2006 23:32 38.015 commons-logging-1.0.4.jar
03/12/2006 23:43 138.956 commons-validator-1.3.1.jar
24/09/2006 23:51 20.962 jstl-1.0.2.jar
23/11/2007 02:14 16.630 jstl.jar
30/05/2006 00:23 65.261 oro-2.0.8.jar
20/07/2007 00:20 88.537 servlet-api.jar
24/09/2006 23:51 516.487 standard-1.0.2.jar
23/11/2007 02:14 315.295 standard.jar
03/03/2007 11:31 328.896 struts-core-1.3.8.jar
03/03/2007 11:38 264.038 struts-el-1.3.8.jar
03/03/2007 11:39 39.644 struts-extras-1.3.8.jar
03/03/2007 11:41 94.545 struts-faces-1.3.8.jar
03/03/2007 11:42 19.643 struts-mailreader-dao-1.3.8.jar
03/03/2007 11:43 17.784 struts-scripting-1.3.8.jar
03/03/2007 11:36 251.521 struts-taglib-1.3.8.jar
03/03/2007 11:34 119.653 struts-tiles-1.3.8.jar
Pasta de C:\java\workspace\br.com.caelum.struts.action\WEB-INF\src
03/07/2008 22:58 200 MessageResources.properties
05/02/2009 23:12 teste
Pasta de C:\java\workspace\br.com.caelum.struts.action\WEB-INF\src\teste
05/02/2009 23:53 628 TesteSimplesAction.java
Pasta de C:\java\workspace\br.com.caelum.struts.action\work

eu sei que deve ser alguma coisa muito fácil mas não acho
eu ja estou com a pulga atrás da orelha, estômago doendo, olhos vermelhos de ficar olhando para o micro e não achar o problema

se alguém puder fazer essa caridade

abraços

Criado 7 de agosto de 2008
Ultima resposta 5 de fev. de 2009
Respostas 22
Participantes 6