Apache wicket Tomcat 问题:java.lang.ClassNotFoundException:org.apache.wicket.protocol.http.WicketFilter

Apache wicket Tomcat Problem: java.lang.ClassNotFoundException: org.apache.wicket.protocol.http.WicketFilter

我是 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 jar(其中 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

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

这样 Maven 将确保所有需要的依赖项都在 class 路径中。在 Eclipse 中,只需在测试文件夹中打开 Start.java class 并使用 main() 方法 Run/Debug 正常 Java class 。 如果需要,您也可以使用 Eclipse Maven 集成。

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