【问题标题】:Attempting to run a Wicket application gets me a 404尝试运行 Wicket 应用程序让我收到 404
【发布时间】:2015-04-15 10:33:39
【问题描述】:

我的应用程序逻辑已全部排序。这只是“让应用程序运行”的部分,我遇到了问题。

我知道我需要(并且拥有)一个通过显示主页(在我的例子中称为“UserPage”)来启动应用程序的类。但是,即使正确填写了我的 web.xml,并实现了 WicketApplication 类,我仍然得到 404。

两者的代码如下。有人可以通过两种方式帮助我:

• 告诉我哪里出了问题(以及为什么)

• 两个文件的外观,以及更正的地方。

提前致谢。

WicketApplication.java

    package com.me.textboxformtutorial;

import com.me.textboxformtutorial.UserPage;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.protocol.http.WebApplication;

public class WicketApplication extends WebApplication {

    @Override
     public Class<UserPage> getHomePage()
    {
        return UserPage.class;
    }

}

web.xml

<web-app version="3.0"
  xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

<servlet>
    <servlet-name>WicketTextBoxExample</servlet-name>
    <servlet-class>UserPage</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>WicketTextBoxExample</servlet-name>
    <url-pattern>/textboxexample</url-pattern>
</servlet-mapping>

<filter>
        <filter-name>wicketFilter</filter-name>
        <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
        <init-param>
            <param-name>applicationClassName</param-name>
            <param-value>com.me.textboxformtutorial.WicketApplication</param-value>
        </init-param>
    </filter>
</web-app>

【问题讨论】:

    标签: jakarta-ee wicket


    【解决方案1】:

    这里的问题是 Wicket 页面不是 servlet。 Wicket 是一个框架,它添加了自己的抽象层来处理请求和呈现结果,因此您无需在 web.xml 中单独声明所有页面。

    设置 Wicket 的正确方法是将您定义的过滤器映射到所需的 url:

    <filter-mapping>
        <filter-name>wicketFilter</filter-name>
        <url-pattern>/*</url-pattern> <!-- or /textboxexample/* if you want your application to map to that url -->
    </filter-mapping>
    

    并删除这些条目:

    <servlet>
         <servlet-name>WicketTextBoxExample</servlet-name>
         <servlet-class>UserPage</servlet-class>
     </servlet>
    
     <servlet-mapping>
         <servlet-name>WicketTextBoxExample</servlet-name>
         <url-pattern>/textboxexample</url-pattern>
     </servlet-mapping>
    

    这会将给定 url 的所有请求提供给 Wicket 过滤器,该过滤器将处理和解析它们,并将它们传递到适当的页面。

    如果您使用 Maven,您可以从 Wicket Quickstart Archetype (archetypeGroupId=org.apache.wicket, archetypeArtifactId=wicket-archetype-quickstart 创建您的项目,这一切都会为您完成。

    【讨论】:

    • 哇!非常感谢 :) 世界上最小的过滤器,如果我见过的话。我认为是因为我的 Java 文件没有被提及,可以吗?如果事情解决了,我会通知你的。
    猜你喜欢
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多