我尝试从 Jetty 10.x 移植到 Jetty 12.x ee8。在我根据此列表更改依赖项后https://download.eclipse.org/tools/orbit/simrel/maven-jetty/release/12.0.6/。我在使用嵌入式 Jetty 时遇到一些编译器错误。
似乎没有我使用的 ee8
Server
类 org.eclipse.jetty.server.Server
。该类扩展自 org.eclipse.jetty.server.Handler.Wrapper
。
但是
jetty-ee8-nested
的处理程序从 org.eclipse.jetty.ee8.nested.HandlerWrapper
扩展,这是不兼容的。例如org.eclipse.jetty.ee8.nested.InetAccessHandler
。一个期待org.eclipse.jetty.server.Handler
另一个org.eclipse.jetty.ee8.nested.Handler
还有我监督的服务器的另一个实施者吗?我在哪里可以找到它?类名怎么样?
或者我必须修改我的代码吗?例如,我如何更改以下行?
InetAccessHandler ipaccess = new InetAccessHandler();
ipaccess.setHandler( getHandler() );
setHandler( ipaccess );
首先,有一个从 Jetty 11 到 Jetty 12 的移植指南: https://eclipse.dev/jetty/documentation/jetty-12/programming-guide/index.html#pg-migration-11-to-12
它显示了您所询问的许多事情。
忽略
org.eclipse.jetty.ee8.nested.*
包中的类,这些是ee8层的内部类。
使用
org.eclipse.jetty.server.handler.InetAccessHandler
。
您可以将其包装在任何处理程序周围,例如:
org.eclipse.jetty.server.Handler.Sequence
、org.eclipse.jetty.ee8.webappWebAppContext
等...
InetAccessHandler inetAccessHandler = new InetAccessHandler();
// allow only http clients from localhost IPv4 or IPv6
inetAccessHandler.include("127.0.0.1", "::1");
server.setHandler(inetAccessHandler);
Handler.Sequence handlers = new Handler.Sequence();
inetAccessHandler.setHandler(handlers);
WebAppContext webapp = new WebAppContext();
webapp.setContextPath("/");
webapp.setWar(warPath.toUri().toASCIIString());
handlers.addHandler(webapp);
此片段来自 https://github.com/jetty/jetty-examples/tree/12.0.x/embedded/ee8-webapp-context
解决方案是混合。对于与
Server
实例交互的所有内容(例如 InetAccessHandler
),我需要使用 jetty-server.jar 中的实例(包中没有 ee8)。
ServletContextHandler
来自jetty-ee9-servlet.jar。
添加到 ServletContextHandler 的所有处理程序(例如 ErrorHandler)必须来自 jetty-ee8-nested.jar。
如果您在同一个类中执行所有这些操作,那么您会遇到不同处理程序方法
Request
和 org.eclipse.jetty.server.Request
的签名中的 org.eclipse.jetty.ee8.nested.Request
的不同类的问题。我已导入第一个类,第二个类在方法签名中写入完全限定。