我需要一种在不使用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的情况下有一个简约的工作项目?或者只是一些建议。
答案 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)添加更多内容以控制过滤器和其他映射。