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

时间:2013-07-23 08:12:38

标签: java wicket config web.xml

我需要一种在不使用web.xml的情况下配置Wicket的方法。

我曾尝试过多篇博文,但仍然遇到问题。

例如:

https://cwiki.apache.org/confluence/display/WICKET/Wicket+without+web.xml+%28embedded+Jetty%29

http://dev-loki.blogspot.de/2008/05/embedded-jetty-wicketfilter-webxml.html

无法找到有效的解决方案。

我创建了一个只有一个HomePage的简单项目,按照上面提到的链接中的步骤,无法取得任何成功。

我尝试了jetty并获得了HTTP ERROR 404.我可以向您展示应该像web.xml一样的代码。这是一个基于弹簧的解决方案。

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中的步骤一样,但不起作用。

HomePage只有一个安装:

mountPage("/testing", HomePage.class);

尝试访问:

https://localhost:8443/testing

导致:

HTTP ERROR 404 Problem accessing /testing. Reason:  Not Found

任何人都可以提供帮助?

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

2 个答案:

答案 0 :(得分:1)

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

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();
        }
    }
}

这是http://javaeenotes.blogspot.de/2011/12/running-wicket-on-jetty.html

的解决方案

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

所以,我将这个答案标记为已被接受,并且可能会为弹道处理检票口开始另一个问题......无论如何,谢谢

答案 1 :(得分:0)

我看到一些代码在没有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)添加更多内容以控制过滤器和其他映射。