当前位置: 首页 > 知识库问答 >
问题:

嵌入式jetty无法在maven程序集中发现web-fragment.xml

徐兴昌
2023-03-14

我的应用程序在嵌入式 Jetty 9.2.11 上运行良好,但是在使用 maven 汇编插件组装后,只提供在 web.xml 中声明的 servlet。

我的jar包含使用Servlet 3.0格式的WEB-INF/web.xml许多jar被放置在WEB-INF/lib中,每个jar都带有META-INF/web-fragment.xml。从 NetBeans 运行时,可以很好地发现这些内容。

QueuedThreadPool pool = new QueuedThreadPool(20);
Server server = new Server(pool);
server.setStopAtShutdown(true);
ServerConnector connector = new ServerConnector(server);
connector.setPort(8888);
server.addConnector(connector);
pool.start();
connector.start();

WebAppContext webapp = new WebAppContext();
webapp.setContextPath("/");
webapp.setDescriptor("WEB-INF/web.xml");
webapp.setDefaultsDescriptor("webdefault.xml");
webapp.setClassLoader(MyURIClassLoader);
webapp.setExtractWAR(false);
webapp.setCopyWebDir(false);
webapp.setConfigurationDiscovered(true);

List<String> configs = new ArrayList<>(5);
configs.add("org.eclipse.jetty.webapp.WebInfConfiguration");
configs.add("org.eclipse.jetty.webapp.WebXmlConfiguration");
configs.add("org.eclipse.jetty.webapp.MetaInfConfiguration");
configs.add("org.eclipse.jetty.webapp.FragmentConfiguration");
configs.add("org.eclipse.jetty.webapp.JettyWebXmlConfiguration");
webapp.setConfigurationClasses(configs);

ContextHandlerCollection container = new ContextHandlerCollection();
container.setHandlers(handlers.toArray(new Handler[handlers.size()]));
server.setHandler(new HTTPGlobalHandler(container));
server.start();

所有的< code>web.xml和< code>web-fragment.xml文件都非常标准。只有servlets和安全设置,包括CORS。

组件的结构如下:

/boot.jar (our in-house launcher with a custom URIClassLoader)
  |- /modules/ (a folder including our target jar with ALL dependencies provided)
    |- target.jar (containing the WEB-INF/lib folder with fragment-holding jars)

共有1个答案

祝花蜂
2023-03-14

让Servlet 3与Servlet容器(Jetty 9)兼容,您可以不使用<code>web。xml,并且在应用程序中只有Java配置。这是一个很好的起点。

 类似资料:
  • 我正在写java web应用程序的扩展。我用maven覆盖插件将这个应用程序添加到扩展中,并使用主应用程序中的web.xml文件和webapp文件夹。我还想用jetty嵌入式服务器为我的扩展编写集成测试平台。我试过了

  • 我制作了一个非常基本的web应用程序,它只有一个html页面。我把它当作战争输出。 现在我创建了一个嵌入式jetty服务器。 } 我为这个嵌入式服务器创建了一个jar。但是当我试图通过嵌入式服务器运行我的web应用程序时,我得到以下错误。 C:\users\user>Java-jar C:\users\user\desktop\jetty\webserver.jar null 我使用过jetty

  • 问题内容: 有什么方法可以向正在运行的嵌入式Jetty实例添加处理程序?我们已经将一个旧的基于Jetty 6的项目迁移到了Jetty 9,我们需要为我们的插件系统动态添加和删除处理程序… 请参阅下面的示例… 注意:是… 问题答案: 使用Jetty 9.1.0.v20131115,您可以在构造函数上使用标志… 在和调用期间,这将忽略对集合本身的测试。 此行为仅适用于自身,您可以添加单个处理程序,也可

  • 我定义了一个标准的Maven webapp结构,它使用Spring MVC。 我正在使用嵌入式 Jetty 服务器(java 类)来测试开发中的应用程序。 用于创建 Jetty 服务器的代码概述如下。如果我对任何 JSP 文件进行更改,则这些更改将立即在浏览器中可见。 然而,如果我更改了任何类文件,例如控制器,这些更改不会被热部署。 我该怎么做才能让它工作? 我已经搜索了这个,我认为我需要使用类组

  • 我有一个推送到GitHub的SpringBoot项目,其中我有一些半集成测试,其中我使用嵌入式mongo作为数据库。我的构建在本地是成功的,测试正在通过,但是在运行“MavenJava”GitHub操作时,它会失败,原因如下:

  • 目前我正在使用启用TLS 1.2的代码: 现在我正在使用TLS 1.1,并希望将其更改为TLS 1.2。