Question

I've been a .NET developer for over 8 years now and I've been placed on a Java project and I'm trying to get up to speed. I'm using Eclipse EE 3.5.1, JBoss 5.1, and Struts 2.1.8.1 (all the latest versions as AFAIK).

I'm trying to create a new project with a simple login and home page. But when I run my project from Eclipse I get the following build error:

Exception starting filter struts2    
java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter  
    at java.net.URLClassLoader$1.run(Unknown Source)  
    at java.security.AccessController.doPrivileged(Native Method)  
    at java.net.URLClassLoader.findClass(Unknown Source)  
    at java.lang.ClassLoader.loadClass(Unknown Source)  
    at java.lang.ClassLoader.loadClass(Unknown Source)  
    at org.jboss.web.tomcat.service.TomcatInjectionContainer.newInstance(TomcatInjectionContainer.java:262)  
    at org.jboss.web.tomcat.service.TomcatInjectionContainer.newInstance(TomcatInjectionContainer.java:256)  
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:220)  
    at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:332)  
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:90)  
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3783)  
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4413)  
    at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeployInternal(TomcatDeployment.java:310)  
    at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeploy(TomcatDeployment.java:142)  
    at org.jboss.web.deployers.AbstractWarDeployment.start(AbstractWarDeployment.java:461)  
    at org.jboss.web.deployers.WebModule.startModule(WebModule.java:118)  
    at org.jboss.web.deployers.WebModule.start(WebModule.java:97)  
    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.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157)  
    at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96)  
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)  
    at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)  
    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668)  
    at org.jboss.system.microcontainer.ServiceProxy.invoke(ServiceProxy.java:206)  
    at $Proxy38.start(Unknown Source)  
    at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:42)  
    at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:37)  
    at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62)  
    at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71)  
    at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51)  
    at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)  
    at org.jboss.system.microcontainer.ServiceControllerContext.install(ServiceControllerContext.java:286)  
    at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631)  
    at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)  
    at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)  
    at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)  
    at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)  
    at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)  
    at org.jboss.system.ServiceController.doChange(ServiceController.java:688)  
    at org.jboss.system.ServiceController.start(ServiceController.java:460)  
    at org.jboss.system.deployers.ServiceDeployer.start(ServiceDeployer.java:163)  
    at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:99) 
    at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:46)  
    at org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer.internalDeploy(AbstractSimpleRealDeployer.java:62)  
    at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:50)  
    at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:171)  
    at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1439)  
    at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1157)  
    at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1178)  
    at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1098)  
    at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)  
    at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631)  
    at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)  
    at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)  
    at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)  
    at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)  
    at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)  
    at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:781)  
    at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:702)  
    at org.jboss.system.server.profileservice.repository.MainDeployerAdapter.process(MainDeployerAdapter.java:117)  
    at org.jboss.system.server.profileservice.repository.ProfileDeployAction.install(ProfileDeployAction.java:70)  
    at org.jboss.system.server.profileservice.repository.AbstractProfileAction.install(AbstractProfileAction.java:53)  
    at org.jboss.system.server.profileservice.repository.AbstractProfileService.install(AbstractProfileService.java:361)  
    at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)  
    at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631)  
    at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)  
    at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)  
    at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)  
    at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)  
    at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)  
    at org.jboss.system.server.profileservice.repository.AbstractProfileService.activateProfile(AbstractProfileService.java:306)  
    at org.jboss.system.server.profileservice.ProfileServiceBootstrap.start(ProfileServiceBootstrap.java:271)  
    at org.jboss.bootstrap.AbstractServerImpl.start(AbstractServerImpl.java:461)  
    at org.jboss.Main.boot(Main.java:221)  
    at org.jboss.Main$1.run(Main.java:556)  
    at java.lang.Thread.run(Unknown Source)  

Here's my project structure:

  • /src/struts.xml
  • /src/struts2demo/login/action/Login.java
  • /WebContent/META-INF/MANIFEST.MF
  • /WebContent/WEB-INF/web.xml
  • /WebContent/home.jsp
  • /WebContent/login.jsp

Here's my config files: 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>struts2demo</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>login.jsp</welcome-file>  
    </welcome-file-list>  
</web-app>  

NOTE: I get a similar error when my filter-class is org.apache.struts2.dispatcher.FilterDispatcher.

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>  
    <package name="struts2demo" extends="struts-default">  
        <action name="Login"  
            class="struts2demo.login.action.Login">  
            <result>/home.jsp</result>  
            <result name="error">/login.jsp</result>  
        </action>  
    </package>  
</struts>  

.classpath:

Was it helpful?

Solution

Sounds like you may not have the Struts 2 JAR files in your classpath. Go to your project properties -> Java Build Path -> Libraries and make sure the necessary Struts 2 JAR files are all listed under Web App Libraries.

OTHER TIPS

Could you compare your web.xml and struts.xml files to this tutorial (although it uses apache-tomcat 6 Server and not JBoss)

Even if this error has been reported in the comment, the tutorial does work.


I do find your class in thisStruts-2.1.8.tgz (see docjar), if the relevant jar in struts download is referenced in Struts download, this should be ok.

WEB-INF
  lib
    struts-core2.1.8.jar

Ok....I was able to debug major errors with some simple stuff which kind of makes sense to me now. I am using tomcat plugin on Eclipse Helios with Tomcat 7. Sorry if this post is too obvious....i am new to this.

Errors and how I resolved them:- 1. SEVERE: Exception starting filter struts2 java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

Solution: I copied all the jars from struts2 showcase example app. Available here -> (had to remove as stackoverflow dint allow me to post more than one link) I copied all the jars in the web-inf/lib of that war to my web-inf/lib of eclipse project. Still got that error....on checking, I saw that the same server was being used by my previous versions which I removed by deleting that server and recreating in eclipse....made sure it did not reference my previous version's lib over my current lib by checking the runtime configuration for my project and created a new lib directory apart from my web-inf/lib and set it in the build path. Solved that particular error.

  1. Then, got some spring errors like SpringObjectFactory not found and stuff

Solution: Deleted all the spring jars from my lib like spring-beans, spring struts plugin etc. Solved that particular error.

  1. Then came the xwork2 errors -> com.opensymphony.xwork2.inject.DependencyException: and some java runtime exceptions

Solution: You need to mention your action classes package in web.xml. Thanks to a mail archive...i could resolve it. Link -> http://mail-archives.apache.org/mod_mbox/struts-user/200908.mbox/%3CBLU142-W31D8183CCB7D6CABA09BFDAE080@phx.gbl%3E You need to mention your action package like this in your web.xml:-

<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> <init-param> <param-name>actionPackages</param-name> <param-value>myapp.actions</param-value> </init-param>
</filter>

Thats it. Its working now.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top