[RESOLVIDO]Problemas com struts 2

8 respostas
S

Sou iniciante e tenho assistido video aulas para aprender, seguir uma ensinand o struts 2 mas no final o que fiz n funcionou, quando tento acessar a página aparece erro de HTTP 404 já re-vi e refiz tudo o que pedia, estou usando tomcat 6 e struts 2.1.6 e importei para o projeto commons-logging, freemaker,ognl, struts2-coree e xwork, e isso é o que aparece no console e tb vou colocar no final o web.xml e o struts.xml.

[color=red]30/07/2009 11:49:01 org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:Aula03' did not find a matching property.
30/07/2009 11:49:01 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Arquivos de programas\Java\jre6\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Arquivos de programas/Java/jre6/bin/client;C:/Arquivos de programas/Java/jre6/bin;D:\oracle\ora92\bin;C:\Arquivos de programas\Oracle\jre\1.3.1\bin;C:\Arquivos de programas\Oracle\jre\1.1.8\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Arquivos de programas\Symantec\pcAnywhere\;C:\Arquivos de programas\Microsoft SQL Server\80\Tools\Binn\;C:\Arquivos de programas\Microsoft SQL Server\90\Tools\binn\;C:\Arquivos de programas\Microsoft SQL Server\90\DTS\Binn\;C:\Arquivos de programas\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE\;C:\Arquivos de programas\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\;D:\Eclipse\Android SDK\android-sdk-windows-1.5_r3\tools
30/07/2009 11:49:02 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
30/07/2009 11:49:02 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1208 ms
30/07/2009 11:49:02 org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
30/07/2009 11:49:02 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.20
30/07/2009 11:49:03 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info
INFO: Parsing configuration file [struts-default.xml]
30/07/2009 11:49:03 org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter struts2
Unable to load configuration. - bean - jar:file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Aula03/WEB-INF/lib/struts2-core-2.1.6.jar!/struts-default.xml:46:178
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:58)
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:360)
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:403)
at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:69)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:48)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
at org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:108)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3800)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4450)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: Unable to load bean: type:org.apache.struts2.dispatcher.multipart.MultiPartRequest class:org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest - bean - jar:file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Aula03/WEB-INF/lib/struts2-core-2.1.6.jar!/struts-default.xml:46:178
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:222)
at org.apache.struts2.config.StrutsXmlConfigurationProvider.register(StrutsXmlConfigurationProvider.java:101)
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:165)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
... 22 more
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileUploadException
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
at java.lang.Class.getDeclaredConstructors(Unknown Source)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:212)
... 25 more
Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileUploadException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
... 29 more
30/07/2009 11:49:03 org.apache.catalina.core.StandardContext start
SEVERE: Error filterStart
30/07/2009 11:49:03 org.apache.catalina.core.StandardContext start
SEVERE: Context [/Aula03] startup failed due to previous errors
30/07/2009 11:49:03 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
30/07/2009 11:49:03 org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
30/07/2009 11:49:03 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/47 config=null
30/07/2009 11:49:03 org.apache.catalina.startup.Catalina start
INFO: Server startup in 1169 ms[/color]

Aqui é o 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">
  <display-name>Aula03</display-name>
  <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
e esse é o struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="false" />
  
    <package name="default" extends="struts-default">
        <default-action-ref name="home" />
        <action name="home">
            <result>
                /WEB-INF/pages/home.jsp
            </result>
        </action>
    </package>

</struts>

8 Respostas

A

A causa real do problema é indicada aqui nesta linha:
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileUploadException

Quando o Tomcat faz o deploy da sua aplicação ele carrega o filtro do Struts 2

<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

Esse por sua vez começa a configurar os interceptors (se você ainda não aprendeu sobre interceptors, eles são recursos que o framework disponibiliza para auxiliar em procedimentos comuns durante o desenvolvimento, upload de arquivos, validação, conversão de valores etc…) que estão definidos no seu struts.xml, como você está usando o grupo de interceptors padrão do struts 2 (extends=“struts-default”) ele tenta configurar o interceptador de upload de arquivos (que faz o tratamento dos arquivos enviados por formulário). Esse interceptador depende da biblioteca commons-fileupload.jar da Apache (que possui a classe FileUploadException que está faltando na hora de rodar a sua aplicação), provavelmente você não tem essa biblioteca na pasta WEB-INF/lib/ da sua aplicação.

Se a biblioteca estiver lá, tente reconstruir a aplicação.

Dicas:
Dentro do pacote padrão da biblioteca struts2-core.jar existe o arquivo struts-default.xml lá existe a lista de todos os interceptors que pertencem ao pacote struts-default, provavelmente nas video aulas que você está seguindo eles ainda vão te ensinar mais para frente como configurar o struts 2 para utilizar somente os interceptors que a sua aplicação precisa.
Para saber mais sobre os interceptadores (alguns são muito úteis) dê uma olhada nesta página: http://struts.apache.org/2.1.6/docs/interceptors.html#Interceptors-FrameworkInterceptors

Nessa página constam as dependências de cada interceptor, caso você enfrente esse problema novamente, verifique se não está faltando nenhuma biblioteca.

S

Vlw, funcionou, era isso e obrigado pela dica.

J

Cara, obrigado…
Segui uma video aula de um site e nao conseguia passar disso… Foi só add a commons-fileupload e funcionou beleza.

Obrigado.

higomatos

Ótima explicação!
Também estou tentando entender o funcionando do struts e tinha travado no mesmo erro!
Alguém se habilita a mostrar como posso configurar o interceptor pra não precisar adicionar a lib citada?
Tentei de algumas maneiras, mas se não add continuou o mesmo erro!

Uma das maneiras que tentei:
<package name="default" extends="struts-default" >
  <interceptors>
       <interceptor-stack name="myStack">
          <interceptor-ref name="timer"/>
          <interceptor-ref name="logger"/>
        <interceptor-ref name="defaultStack"/>
       </interceptor-stack>
  </interceptors>

 <default-interceptor-ref name="myStack"/>

 <action name="login"  class="tutorial.Login">
        <result name="input">login.jsp</result>
        <result type="redirectAction">/secure/home</result>
  </action>

</package>
Fonte: http://struts.apache.org/2.1.6/docs/how-do-we-configure-an-interceptor-to-be-used-with-every-action.html
higomatos

Encontrei o erro!

Eu havia chamado na solução apresentada porém este defaultSatck é uma pilha de interceptor organizada no struts-default.xml e nesta pilha consta uma chamada que usa a tal lib, vejam:

<interceptor-stack name="defaultStack"> <interceptor-ref name="exception"/> <interceptor-ref name="alias"/> <interceptor-ref name="servletConfig"/> <interceptor-ref name="i18n"/> <interceptor-ref name="prepare"/> <interceptor-ref name="chain"/> <interceptor-ref name="debugging"/> <interceptor-ref name="scopedModelDriven"/> <interceptor-ref name="modelDriven"/> <interceptor-ref name="fileUpload"/> <interceptor-ref name="checkbox"/> <interceptor-ref name="multiselect"/> <interceptor-ref name="staticParams"/> <interceptor-ref name="actionMappingParams"/> <interceptor-ref name="params"> <param name="excludeParams">dojo\..*,^struts\..*</param> </interceptor-ref> <interceptor-ref name="conversionError"/> <interceptor-ref name="validation"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> <interceptor-ref name="workflow"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> </interceptor-stack>

Coloquei então um default interceptor qualquer (que não usa o fileUpload) e funcionou sem a bendita fileUpload, fiz assim:

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="default" extends="struts-default"> <default-interceptor-ref name="params"/> </package> </struts>

G

valeu galera

o meu estava com mesmo problema e foi resolvido depois que coloquei
as bibliotecas citadas abaixo no diretório WEB-INF/lib do meu projeto …

commons-fileupload-X.X.X.jar (detalhe esta é para resolver o problema ) commons-io-X.X.X.jar commons-logging-X.X.X.jar commons-logging-api.X.X.jar freemarker-X.X.X.jar ognl-X.X.X.jar struts2-core-X.X.X.X.jar xwork-core-X.X.X.jar

obrigado

leandroportnoy

Alguem saberia como faria pra corrigir esse problema caso ocorra utilizando o deploy pelo maven? é necessário alterar algum xml pra poder “suprimir” esse artefacto no pom.xml??

leandroportnoy

Para o caso meu erro foi:

GRAVE: Exception starting filter struts2

java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)

at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:269)

at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)

at org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:115)

at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4001)

at org.apache.catalina.core.StandardContext.start(StandardContext.java:4651)

at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)

at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)

at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)

at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)

at org.apache.catalina.core.StandardService.start(StandardService.java:519)

at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)

at org.apache.catalina.startup.Catalina.start(Catalina.java:581)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)

at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

18/12/2010 15:55:42 org.apache.catalina.core.StandardContext start

GRAVE: Error filterStart

18/12/2010 15:55:42 org.apache.catalina.core.StandardContext start

GRAVE: Context [/struts2_jsp_example] startup failed due to previous errors
Criado 30 de julho de 2009
Ultima resposta 18 de dez. de 2010
Respostas 8
Participantes 6