Struts

10 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 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 :smiley:

10 Respostas

Richard_Mendes_Madur

Cara no arquivo do struts-config.xml voce escreveu acionmappings.
O correto é “” (no seu arquivo está faltando o hifen).
Espero ter ajudado. Flw.

F

Tudo bem,

No seu xml esta assim “” e deve ser assim “”

Corrigido.

<struts­-config>

<action­-mappings>

   Verifica caminho da classe no type. ex:“br.TesteSimplesAction”





</action­-mappings>

<!­­ Arquivo de Mensagens ­­>

<message­-resources parameter=“MessageResources” />

</struts­-config>

Espero ter ajudado.

Grato

fmy_1

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

H

Olá…

Essa é a minha primeira msg no fórum e estou no mesmo barco que vc… começando a aprender JEE.

Vc colocou os jars do struts no local certo ?

veja blog…

valeu.

fmy_1

Olá pessoal, ainda nao consegui um solução para este problema? Alguem poderia me auxiliar? Me ensinar a fazer esse tipo de configuração que estou tentando??

Grato galera!

R

Olha só !
No mapeamento do web.xml, vc não teria que passar o caminho do struts-config.xml para o ActionServlet ?

<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>1</load-on-startup> </servlet>

Faz isso e testa.

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:

caiomacedor
Fera se você ainda não consegiu esclarecer a tua dúvida vou colocar aqui tudo que você precisa. Mas tem um detalhe, todo cuidade com a estrutura do teu projeto. Tudo tem o seu devivo lugar. Ai vai tudo que você precisa: 1º o web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4">
	<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>
 	<!-- Standard Action Servlet Mapping -->
  	<servlet-mapping>
		<servlet-name>action</servlet-name>
    	<url-pattern>*.do</url-pattern>
	</servlet-mapping>
 	<!-- The Usual Welcome File List -->
	<welcome-file-list>
    	<welcome-file>index.jsp</welcome-file>
  	</welcome-file-list>
  	<!-- TagLibs do Struts -->
  	<taglib>
  		<taglib-uri>/tags/struts-bean</taglib-uri> 
  		<taglib-location>/WEB-INF/struts-bean.tld</taglib-location> 
  	</taglib>
 	<taglib>
  		<taglib-uri>/tags/struts-logic</taglib-uri> 
	  	<taglib-location>/WEB-INF/struts-logic.tld</taglib-location> 
	</taglib>
</web-app>
2º struts-config:
<?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>
<!-- ================= Form Bean Definitions =================== -->
	<form-beans>
		<!-- Aqui sera declarado os forms -->
	</form-beans>
<!-- ==================== Global Forward Definitions ===================== -->
	<global-forwards>
		<forward name="welcome" path="/welcome.do" />
	</global-forwards>
<!-- ===================== Action Mapping Definitions ====================== -->
	<action-mappings>	
		<action path="/welcome" 
				type="br.com.aplicacaoTeste.TesteSimplesAction">
			<forward name="ok" path="/minhaPagina.jsp" />
		</action>
	</action-mappings>
<!-- ====================== Message Resources Definitions ====================== -->
	<message-resources parameter="MessageResources" />
</struts-config>
3º Action:
package br.com.aplicacaoTeste;

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) throws Exception {  
		System.out.println("OLA MUNDAO...");  
		String timao = "Coringão o Melhor Time do Mundo";
		
		request.setAttribute("str", timao);
		return map.findForward("ok");  
	} 
}
4º index.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/tags/struts-logic" prefix="logic"%>
<logic:redirect forward="welcome"/>
5º minhaPagina.jsp para onde vai ser direcionado
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
		<title>Minha Pagina Inicial</title>
	</head>
	<body>
		<% String time = request.getAttribute("str").toString();%>
		<h1 align="center"><%out.print(time);%></h1>
	</body>
</html>

Alem disso você terá que colocar na pasta WEB-INF os seguintes arquivos:
struts-bean.tld
struts-config.xml
struts-logic.tld
web.xml
index.jsp
minhaPagina.jsp

ai é só partir pro abraço.
Se não entender algo é só perguntar beleza fera?

bruno_savi

sua classe não ta compilando ou ta compilando em um lugar diferente de web-inf/classes

analise isso…

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)

Criado 7 de agosto de 2008
Ultima resposta 8 de ago. de 2008
Respostas 10
Participantes 7