【问题标题】:Apache wicket Tomcat Problem: java.lang.ClassNotFoundException: org.apache.wicket.protocol.http.WicketFilterApache wicket Tomcat 问题:java.lang.ClassNotFoundException: org.apache.wicket.protocol.http.WicketFilter
【发布时间】:2020-07-08 15:28:10
【问题描述】:

我是 Apache Wicket 的新手,我正在尝试在 Eclipse 中制作一个简单的程序,以便练习。我很难让它工作;可能是 Tomcat 或 Eclipse 中的某个选项的配置有问题。

HelloWorld.html:

<html>
<body>
    <h1 wicket:id="message">Hi, World!</h1>
</body>
</html>

HelloWorld.java

import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;

public class HelloWorld extends WebPage {
    public HelloWorld() {
        add(new Label("message", "Hello, World!"));
    }
}

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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>simple-wicket</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <filter>
        <filter-name>helloworld</filter-name>
        <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
        <init-param>
            <param-name>applicationClassName</param-name>
            <param-value>general.HelloWorld</param-value>
        </init-param>
    </filter>
    <filter-mapping>
    <filter-name>helloworld</filter-name>
        <url-pattern>/hello</url-pattern>
    </filter-mapping>
</web-app>

我已经下载了相应的 wicket jars(其中 org.apache.wicket.protocol.http.WicketFilter 作为 .class 包含在内),我已将此 Web 项目与 Tomcat 7 同步,当我尝试运行时收到以下错误:

SEVERE: Exception starting filter helloworld
java.lang.ClassNotFoundException: org.apache.wicket.protocol.http.WicketFilter
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1955)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1798)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:536)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:518)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:148)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:264)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:5037)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5739)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1707)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1697)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

有谁知道我该如何解决这个问题?我有 JDK 1.8,以防万一。

提前致谢!

编辑:这是项目的结构: Structure in eclipse

【问题讨论】:

  • 你是如何构建这个的?听起来 Wicket jar 未包含在您的 Web 应用程序中。
  • 在这个例子中,我没有使用任何构建工具,但在我之前的一次尝试中,我使用了 Maven,它帮助我下载了检票口罐子。在这个项目中,我通过项目属性中的 Build Path 选项添加了 jars(它在引用的库中)。我应该将它们移动到不同的位置吗? wicket-core jar 是具有过滤器类的罐子。我已经编辑了原始帖子以包含我的项目结构。

标签: eclipse tomcat filter wicket


【解决方案1】:

我建议你使用基于 Maven 的 QuickStart 项目:http://wicket.apache.org/start/quickstart.html

这样 Maven 将确保所有需要的依赖项都在类路径中。在 Eclipse 中,只需打开测试文件夹中的 Start.java 类,然后使用 main() 方法将其作为普通 Java 类运行/调试。 如果需要,您也可以使用 Eclipse Maven 集成。

【讨论】:

  • 感谢您的建议。我遵循了这些步骤,但我遇到了同样的例外。
  • 请在某处分享您的迷你项目,例如在 GitHub 上,所以我们可以看看。请在自述文件中添加您执行的步骤
【解决方案2】:

事实证明,在我拥有的 Apache Wicket 版本(7.5.0)中,Apache wicket 库没有加载到 Tomcat 中,我不得不在项目>属性>Web 部署程序集中手动添加它们。之后它工作得很好。 在我尝试过的其他 Apache Wicket 版本(例如 7.16.0)中,如果没有这种程序,网页可以正常工作。我不明白为什么 Eclipse 以不同的方式面对这两种情况,但我分享这些信息以防其他人面临类似问题。 感谢您的回复。

【讨论】:

    猜你喜欢
    • 2011-03-21
    • 2011-08-29
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 2011-07-04
    • 2018-12-27
    相关资源
    最近更新 更多