2013-07-23 48 views
1

我需要一种方法来配置Wicket而不使用web.xml。Wicket without web.xml;纯java配置

我已经尝试了几个博客文章,但仍然有问题。

例如:

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

无法找到一个可行的解决方案。

我创建了一个简单的项目只有一个首页,然后在上述环节的步骤,并不能得到任何成功。

我试图码头,并得到了HTTP错误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中的步骤,但不起作用。

只有一个安装到主页:

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

试图访问:

https://localhost:8443/testing 

导致的:

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

任何人都可以帮助吗?

也许有人有没有丑陋的web.xml简约的工作计划?或者只是一些建议。

+3

欢迎。除了问我们,你能向我们展示[你尝试过的](http://mattgemmell.com/2008/12/08/what-have-you-tried/)吗? –

+0

没有看到我的链接?我尝试了这些方法。 (仅使用一个主页创建了一个新项目,按照说明操作,无法查看页面) – DaUser

+0

当您尝试链接解决方案时,您遇到了什么问题?出于好奇:为什么你想摆脱web.xml? – bert

回答

1

以下代码启动支持wicket的jetty,而不使用web.xml。

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

的解决方案正如我以前说过的,这不适合我的权利,但符合题目:这是可以开始检票应用,而不需要一个一个码头web.xml配置。

所以,我纪念这个答案所接受,也许开始检票处理的春路的另一个问题...感谢反正到堆栈溢出

0

我已经看到了一些代码,启动码头没有一个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(); 

这种方式,您可以根据需要对上下文添加尽可能多的战争,假设你使用的码头。你可以添加更多的东西到WebAppContext对象(网络)来控制你的过滤器和其他映射。

+0

这是一种开始的方式,是的!我发布了另一个准备用于Wicket的答案。 – DaUser