我试图通过嵌入jetty开发Web服务器.所以对于jetty 7.3一切正常.昨天我将jetty库更新到最新版本8.0.3,现在我通过创建一个ServletContextHandler得到了一个Exception.
线程"main"中的异常java.lang.NoClassDefFoundError:org.eclipse.jetty.servlet.ServletContextHandler中的javax/servlet/FilterRegistration.(ServletContextHandler.java:126)org.eclipse.jetty.servlet.ServletContextHandler.(ServletContextHandler.java :106)在org.gemsjax.server.GemsJaxServer.main(GemsJaxServer.java:38)的org.eclipse.jetty.servlet.ServletContextHandler.(ServletContextHandler.java:94)
所以我做的是:
public static void main(String[] args) {
Server server = new Server(8080);
ServletContextHandler servletContext = new ServletContextHandler(ServletContextHandler.SESSIONS);
servletContext.setContextPath("/servlets");
servletContext.addServlet(new ServletHolder( new CollaborationWebSocketServlet()),"/collaboration");
// The ResourceHandler to handle static web content
ResourceHandler resourceHandler = new ResourceHandler();
resourceHandler.setDirectoriesListed(true);
resourceHandler.setWelcomeFiles(new String[]{ "index.html" });
resourceHandler.setResourceBase("./war/");
ContextHandler resourceContext = new ContextHandler();
resourceContext.setContextPath("/static");
resourceContext.setHandler(resourceHandler);
HandlerCollection handlers = new HandlerCollection();
handlers.addHandler(resourceContext);
handlers.addHandler(servletContext);
server.setHandler(handlers);
try {
server.start();
server.join();
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
抛出异常的行是:
ServletContextHandler servletContext = new ServletContextHandler(ServletContextHandler.SESSIONS);
Run Code Online (Sandbox Code Playgroud)
我使用ubuntu 11.04:
openjdk java版"1.6.0_22"OpenJDK运行时环境(IcedTea6 1.10.2)(6b22-1.10.2-0ubuntu1~11.04.1)OpenJDK 64位服务器VM(内置20.0-b11,混合模式)
有没有人有建议?
Bal*_*usC 10
该javax.servlet.FilterRegistration班是在Servlet的3.0推出.此异常表明您在运行时类路径中仍然存在较旧的Servlet API版本的库,这些库在类加载中具有优先权.例如,从Internet上随机选择您的webapp servlet-api.jar文件/WEB-INF/lib夹中的文件,或者可能在JRE的/lib文件夹中.您应该删除那些位于类路径中的其他位置的servletcontainer特定库,而不是目标运行时本身.
如果你这样做是为了避免编译问题,那么你应该在类路径中使用目标运行时库.在例如Eclipse中,您可以在项目属性的Target Runtime部分中执行此操作.另请参见如何在Eclipse项目中导入javax.servlet API?
| 归档时间: |
|
| 查看次数: |
19242 次 |
| 最近记录: |