gpt4 book ai didi

jakarta-ee - WebAppContext.doStart 中用于 AnnotationConfiguration 的嵌入式 jetty 9 classNotFound

转载 作者:行者123 更新时间:2023-12-03 09:40:00 26 4
gpt4 key购买 nike

我正在尝试设置一个嵌入式 jetty 9 实例,它从 .war 文件中获取注释。

到目前为止,它成功运行了,例如GeoServer.war(通过将 ExtractWars 设置为 True),但在 AnnotationsConfiguration 类中获取包含带注释的 servlet 的 WebChat.war 时,我得到了一个 ClassNotFound

在示例 war 中,我将 'metadata-complete="false"' 添加到其 web.xml,同时我将下一位添加到 jetty 服务器

  ContextHandlerCollection mHandlers = new ContextHandlerCollection();

String mWebAppDir = ... ;
WebAppProvider mAppProvider = new WebAppProvider();
mAppProvider.setMonitoredDirName( mWebAppDir );
mAppProvider.setDefaultsDescriptor( null );
mAppProvider.setScanInterval(0);
mAppProvider.setExtractWars(true);
mAppProvider.setConfigurationClasses( new String[]{
AnnotationConfiguration.class.toString(),
WebInfConfiguration.class.toString(),
PlusConfiguration.class.toString(),
FragmentConfiguration.class.toString(),
});

DeploymentManager mDeployMgr = new DeploymentManager();
mDeployMgr.addAppProvider( mAppProvider );
mDeployMgr.setContexts( mHandlers );

/* Setup & Run server */
mServer.addBean(mDeployMgr);
mServer.setHandler(mHandlers);
mServer.start();

我添加了所有 Jetty9 jar (jetty-distribution-9.0.3.v20130506),包括 jar 'websocket-core-9.0.0.M2.jar' 到 jetty 服务器项目。 IDE 知道 AnnotationConfiguration 类,但是当 jetty 处理 war 文件时,它带有:

2013-07-16 14:05:36.731:INFO:oejs.Server:main: jetty-9.0.3.v20130506
2013-07-16 14:05:36.753:INFO:oejdp.ScanningAppProvider:main:
Deployment monitor [file:/C:/..../webapps/] at interval 0
2013-07-16 12:57:38.542:WARN:oejw.WebAppContext:main:
Failed startup of context o.e.j.w.WebAppContext@3ac8e6{/WebChat,null,null}
{C:\....\webapps\WebChat.war}

java.lang.ClassNotFoundException: class org.eclipse.jetty.annotations.AnnotationConfiguration
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at org.eclipse.jetty.util.Loader.loadClass(Loader.java:100)
at org.eclipse.jetty.util.Loader.loadClass(Loader.java:79)
at org.eclipse.jetty.webapp.WebAppContext.loadConfigurations(WebAppContext.java:919)
at org.eclipse.jetty.webapp.WebAppContext.preConfigure(WebAppContext.java:420)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:489)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69)
at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:39)
at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:186)
at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:495)
at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:146)
at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:175)
at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:64)
at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:605)

WebChat.war内容如下:

\chat.html
\css\style.css
\js\jquery-1.3.2.js
\META-INF\MANIFEST.MF
\WEB-INF\classes
\WEB-INF\lib
\WEB-INF\web.xml
\WEB-INF\classes\jettytest
\WEB-INF\classes\jettytest\Feature.class
\WEB-INF\classes\jettytest\FeatureWebSocket.class
\WEB-INF\classes\jettytest\FeatureWebSocketServlet.class
\WEB-INF\lib\websocket-api-9.0.3.v20130506.jar
\WEB-INF\lib\websocket-common-9.0.3.v20130506.jar
\WEB-INF\lib\websocket-core-9.0.0.M2.jar
\WEB-INF\lib\websocket-server-9.0.3.v20130506.jar
\WEB-INF\lib\websocket-servlet-9.0.3.v20130506.jar

希望得到解决类加载问题的线索..
提前致谢

最佳答案

感谢您查看我的问题。

我发现了问题;

我在端口 8443 上运行 jetty 服务器,而不是在 8080 上。但是 webchat.html 文件初始化使用

$(document).ready(
function() {
ws = new WebSocket("ws://localhost:8443/WebChat/map");

但它应该是 WSS 协议(protocol),因为它通过 8443 是安全的。即

$(document).ready(
function() {
ws = new WebSocket("wss://localhost:8443/WebChat/map");

事实证明它无需将 setConfigurationClasses 设置为

  mAppProvider.setConfigurationClasses( new String[]{
AnnotationConfiguration.class.toString(),
WebInfConfiguration.class.toString(),
PlusConfiguration.class.toString(),
FragmentConfiguration.class.toString(),
});

希望有人对此有所帮助。

关于jakarta-ee - WebAppContext.doStart 中用于 AnnotationConfiguration 的嵌入式 jetty 9 classNotFound,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17675409/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com