没有web.xml的Wicket;纯java配置

没有web.xml的Wicket;纯java配置,java,wicket,config,web.xml,Java,Wicket,Config,Web.xml,我需要一种不用web.xml来配置Wicket的方法 我试过几篇博文,但还是有问题 例如: 及 找不到有效的解决方案 public class WicketApplicationInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletContext) throws ServletException { AnnotationCon

我需要一种不用web.xml来配置Wicket的方法

我试过几篇博文,但还是有问题

例如:

找不到有效的解决方案

public class WicketApplicationInitializer implements WebApplicationInitializer {

@Override
public void onStartup(ServletContext servletContext) throws ServletException {

    AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
    ctx.register(SpringConfig.class);

    servletContext.addListener(new ContextLoaderListener(ctx));

    WicketFilter filter = new WicketFilter(new WicketApplication());
    filter.setFilterPath("");

    servletContext.addFilter("wicketFilter", filter).addMappingForUrlPatterns(null, false, "/*");

    servletContext.addServlet("/*", DefaultServlet.class);

}
我创建了一个只有一个主页的简单项目,按照上面提到的链接中的步骤进行操作,但没有取得任何成功

我尝试了jetty,但得到了一个HTTP错误404。我可以向您展示类似web.xml的代码。这是一个基于spring的解决方案

public class WicketApplicationInitializer implements WebApplicationInitializer {

@Override
public void onStartup(ServletContext servletContext) throws ServletException {

    AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
    ctx.register(SpringConfig.class);

    servletContext.addListener(new ContextLoaderListener(ctx));

    WicketFilter filter = new WicketFilter(new WicketApplication());
    filter.setFilterPath("");

    servletContext.addFilter("wicketFilter", filter).addMappingForUrlPatterns(null, false, "/*");

    servletContext.addServlet("/*", DefaultServlet.class);

}
}

这应该可以做到,但服务器无法识别。它看起来很简单,就像普通web.xml中的步骤一样,但不起作用

主页上只有一个挂载:

mountPage("/testing", HomePage.class);
正在尝试访问:

https://localhost:8443/testing
结果是:

HTTP ERROR 404 Problem accessing /testing. Reason:  Not Found
有人能帮忙吗


也许有人有一个没有丑陋的web.xml的极简工作项目?或者只是一些建议。

我看到一些代码在没有web.xml的情况下启动jetty:

    import org.mortbay.jetty.Connector;
    import org.mortbay.jetty.Server;
    import org.mortbay.jetty.nio.SelectChannelConnector;
    import org.mortbay.jetty.webapp.WebAppContext;

    Server server = new Server();
    SelectChannelConnector connector = new SelectChannelConnector();
    connector.setPort(8000); //or any other port you need
    server.setConnectors(new Connector[]
    { connector });

    WebAppContext web = new WebAppContext();
    web.setContextPath("/"); //assuming you want / as a context like your sample
    web.setWar("src/webapp"); //check that it matches your webapp directory.
    server.addHandler(web);
    server.start();
    server.join();

这样,假设您使用Jetty,您可以根据需要在上下文中添加任意数量的战争。您可以向WebAppContext对象(web)添加更多内容来控制过滤器和其他映射。

我看到一些代码以这种方式启动jetty而不使用web.xml:

    import org.mortbay.jetty.Connector;
    import org.mortbay.jetty.Server;
    import org.mortbay.jetty.nio.SelectChannelConnector;
    import org.mortbay.jetty.webapp.WebAppContext;

    Server server = new Server();
    SelectChannelConnector connector = new SelectChannelConnector();
    connector.setPort(8000); //or any other port you need
    server.setConnectors(new Connector[]
    { connector });

    WebAppContext web = new WebAppContext();
    web.setContextPath("/"); //assuming you want / as a context like your sample
    web.setWar("src/webapp"); //check that it matches your webapp directory.
    server.addHandler(web);
    server.start();
    server.join();

这样,假设您使用Jetty,您可以根据需要在上下文中添加任意数量的战争。您可以向WebAppContext对象(web)添加更多内容,以控制过滤器和其他映射。

以下代码启动了一个jetty,它支持不带web.xml的wicket

import org.apache.wicket.protocol.http.WicketFilter;
import org.apache.wicket.protocol.http.WicketServlet;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.bio.SocketConnector;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.webapp.WebAppContext;


public class Main {
    public static void main(String[] args) {
        // Object that holds, and configures the WicketServlet.
        ServletHolder servletHolder =
                new ServletHolder(new WicketServlet());
        servletHolder.setInitParameter(
                "applicationClassName",
                "com.javaeenotes.ExampleWicketApplication");
        servletHolder.setInitParameter(
                WicketFilter.FILTER_MAPPING_PARAM, "/*");
        servletHolder.setInitOrder(1);

        // Web context configuration.
        WebAppContext context = new WebAppContext();
        context.addServlet(servletHolder, "/*");
        context.setResourceBase("."); // Web root directory.

        // The HTTP-server on port 8080.
        Server server = new Server();
        SocketConnector connector = new SocketConnector();
        connector.setPort(8080);
        server.setConnectors(new Connector[]{connector});
        server.setHandler(context);

        try {
            // Start HTTP-server.
            server.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
这是一个解决方案

正如我之前所说的,这现在不适合我,但适合这个主题:它是一个可以启动wicket应用程序的jetty,不需要web.xml配置


所以,我将这个答案标记为已接受,并可能开始另一个关于wicket处理的Spring方式的问题。。。无论如何,还是要感谢您

下面的代码启动了一个jetty,它支持没有web.xml的wicket

import org.apache.wicket.protocol.http.WicketFilter;
import org.apache.wicket.protocol.http.WicketServlet;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.bio.SocketConnector;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.webapp.WebAppContext;


public class Main {
    public static void main(String[] args) {
        // Object that holds, and configures the WicketServlet.
        ServletHolder servletHolder =
                new ServletHolder(new WicketServlet());
        servletHolder.setInitParameter(
                "applicationClassName",
                "com.javaeenotes.ExampleWicketApplication");
        servletHolder.setInitParameter(
                WicketFilter.FILTER_MAPPING_PARAM, "/*");
        servletHolder.setInitOrder(1);

        // Web context configuration.
        WebAppContext context = new WebAppContext();
        context.addServlet(servletHolder, "/*");
        context.setResourceBase("."); // Web root directory.

        // The HTTP-server on port 8080.
        Server server = new Server();
        SocketConnector connector = new SocketConnector();
        connector.setPort(8080);
        server.setConnectors(new Connector[]{connector});
        server.setHandler(context);

        try {
            // Start HTTP-server.
            server.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
这是一个解决方案

正如我之前所说的,这现在不适合我,但适合这个主题:它是一个可以启动wicket应用程序的jetty,不需要web.xml配置


所以,我将这个答案标记为已接受,并可能开始另一个关于wicket处理的Spring方式的问题。。。无论如何谢谢

欢迎来到Stack Overflow。除了问我们,你能给我们看看吗?没有看到我的链接吗?我试过这些方法。(创建了一个只有一个主页的新项目,按照说明操作,无法查看页面)当您尝试从链接中获取解决方案时,您遇到了什么问题?出于好奇:你为什么要放弃web.xml?请告诉我们你到底尝试了什么。同时告诉我们什么不适合你。另外请注意,本网站不鼓励有链接的问题(详细解释了原因)。我无法访问任何页面。我有一个404。我想去掉web.xml,因为它是我实际从事的项目的一项要求。我尝试将Wicket集成到这个项目中,并摆脱丑陋的jsp。欢迎使用堆栈溢出。除了问我们,你能给我们看看吗?没有看到我的链接吗?我试过这些方法。(创建了一个只有一个主页的新项目,按照说明操作,无法查看页面)当您尝试从链接中获取解决方案时,您遇到了什么问题?出于好奇:你为什么要放弃web.xml?请告诉我们你到底尝试了什么。同时告诉我们什么不适合你。另外请注意,本网站不鼓励有链接的问题(详细解释了原因)。我无法访问任何页面。我有一个404。我想去掉web.xml,因为它是我实际从事的项目的一项要求。我试图将Wicket集成到这个项目中,并摆脱丑陋的jsp。这是一个开始,是的!我发布了另一个答案,可以用于Wicket。这是一个开始,是的!我发布了另一个答案,可供Wicket使用。