Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在提供的struts框架中找不到ClassNotFound_Java_Jsp_Tomcat_Struts - Fatal编程技术网

Java 在提供的struts框架中找不到ClassNotFound

Java 在提供的struts框架中找不到ClassNotFound,java,jsp,tomcat,struts,Java,Jsp,Tomcat,Struts,我在使用struts表单标记时遇到问题,该标记返回ClassNotFoundException: javax.servlet.jsp.JspException: Exception creating bean of class com.myproject.form.GenerationForm: java.lang.ClassNotFoundException: com.myproject.form.GenerationForm org.apache.struts.taglib.html.For

我在使用struts表单标记时遇到问题,该标记返回ClassNotFoundException:

javax.servlet.jsp.JspException: Exception creating bean of class com.myproject.form.GenerationForm: java.lang.ClassNotFoundException: com.myproject.form.GenerationForm
org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:568)
结构如下:

tomcat
|_____lib
|_____webapps
      |______myApp
             |____WEB_INF
我在Tomcat的lib文件夹中有struts JAR。我的类在webapps WEB\u INF文件夹中

我知道类已正确加载,因为使用基本JSP,我可以实例化它并正常使用它。ClassNotFoundException仅在struts尝试使用时抛出

在struts配置文件中,有一个定义为(struts config.xml)的表单bean:


[...]
表单定义为(page.jsp):


[...]
为了测试这个问题,我在tomcat的lib文件夹中生成了一个JAR文件,其中包含了我的应用程序的类,在这种情况下,Struts框架可以加载这个类,一切都按预期工作


既然类应该由应用程序的类加载器加载,为什么Struts不能“看到”我的webapp类?有没有办法指定从何处加载它们

我不是专家,但我要说的是,类加载器需要GenerationForm类的类路径是特定于项目的(您不应该)。最好的选择是将struts库放在您的项目文件夹中。就项目而言,大多数时候EAR/WAR文件应该独立于服务器(IMO)。在特定Webapp的上下文中,tomcat的lib-JAR的类加载器不应该也包含该Webapp WEB-INF文件夹中的类吗?例如,您可以使用项目类实例化Springbean,并将SpringJAR放在Web服务器的lib中?认为Tomcat在应用程序之前加载的是libs,而不添加类路径。您是否尝试过使用struts库的共享文件夹?Struts 1 JAR不应该在Tomcat的lib目录中。
<struts-config>
    <form-beans>
        <form-bean name="generation"
            type="com.myproject.form.GenerationForm" />
    </form-beans>
    [...]

    <action-mappings>
        <action path="/generator" type="com.myproject.action.Generator"
        input="/secure/confirm.jsp" name="generation" scope="request">
            <forward name="error" path="/page/error.page" />
            <forward name="close" path="/page/close.page" />
            <forward name="results" path="/results.action?id={0}" redirect="true" />
        </action>
    </action-mappings>

</struts-config>
<html:form styleId="confirmForm" styleClass="confirm" action="/generator.action" method="POST">
     [...]
</html:form>