2013-07-23 76 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