我不明白我怎么能用Jetty 6重写这个用于码头9的代码:
import org.mortbay.jetty.*;
import org.mortbay.jetty.nio.SelectChannelConnector;
import org.mortbay.jetty.webapp.WebAppContext;
public class ApplLauncher {
public static void main(String[] args) {
Server server = new Server();
Connector connector = new SelectChannelConnector();
connector.setPort(8080);
server.addConnector(connector);
WebAppContext root = new WebAppContext("C:\\Users\\OZKA\\IdeaProjects\\projectname\\projectname\\web", "/");
root.setWelcomeFiles(new String[]{"index.html"});
//root.addServlet(new ServletHolder(new TestServlet()), "/test");
server.setHandlers(new Handler[]{root});
try {
server.start();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
上面的代码工作正常,并响应web.xml中映射的web文件夹和servlet中的静态内容。这是我尝试使用embeded jetty 9:
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.Handler;
public class ApplLauncher {
public static void main(String[] args) {
System.out.println("Hello from ScalaSbt Web Project");
Server server = new Server(8080);
WebAppContext webapp = new WebAppContext("D:\\Dev\\Scala\\ScalaTestProject\\web\\", "/");
ResourceHandler resource_handler = new ResourceHandler();
resource_handler.setWelcomeFiles(new String[]{ "index.html" });
HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[] { resource_handler, webapp});
server.setHandler(handlers);
try {
server.start();
server.join();
}
catch(Exception ex) {
ex.printStackTrace();
}
}
}
服务器正在启动,但index.html请求抛出错误:
"java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.isAsyncStarted()Z"
我试图在谷歌找到一个有效的例子,但没有发现任何有用的东西。官方样本和文档非常令人困惑,我不明白我如何使用embeded jetty版本9。
答案 0 :(得分:9)
错误消息清楚地表明您的类路径中有错误版本的Servlet API。
检查你的依赖项,你可能在某处有3.0之前的Servlet API,它应该被删除。
答案 1 :(得分:0)
添加@axtavt所说的内容:如果您使用maven,请添加以下依赖项:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0-alpha-1</version>
<scope>provided</scope>
</dependency>
同时执行mvn dependency:tree |grep servlet
并仔细检查您是否没有servlet-api:2.x导入。
答案 2 :(得分:0)
如果您正在使用Gradle执行
gradle dependencies
分析依赖树并排除&#39; servlet-api&#39;版本低于3.0的依赖项。您可以执行以下操作以排除
compile ('javax.servlet:jsp-api:2.0'){
exclude module : 'servlet-api'
}
可以有多个依赖项,其中还包括servlet-api-2.x。排除所有这些