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

使用Jetty以编程方式部署servlet

须巴英
2023-03-14

我有一个servlet,我希望使用Jetty以编程方式部署它。servlet使用Spring,它web.xml指向您所期望的Spring上下文XML文件。

目前,我只是使用我自己的servlet尝试Jetty文档中的示例代码:

Server server = new Server(8080);

ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
server.setHandler(context);

context.addServlet(new ServletHolder(new BatchReceiver()),"/br/*");

server.start();
server.join();

这会导致以下异常:

2012-05-24 14:43:20.190:INFO:oejs.Server:jetty-8.1.3.v20120416
2012-05-24 14:43:20.266:WARN:/:unavailable
java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?
at org.springframework.web.context.support.WebApplicationContextUtils.getRequiredWebApplicationContext(WebApplicationContextUtils.java:84)
at com.spiffymap.sealog.server.servlet.BatchReceiver.init(BatchReceiver.java:126)
at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:492)
at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:312)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:778)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:258)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:699)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:90)
at org.eclipse.jetty.server.Server.doStart(Server.java:262)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at com.spiffymap.sealog.server.servlet.TestBatchReceiver.main(TestBatchReceiver.java:26)
2012-05-24 14:43:20.335:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080

我如何设置servlet,以便Jetty知道它在哪里。xml和Spring上下文是什么?

任何帮助都将不胜感激!

编辑

所以,显然我不需要web.xml但我确实需要将Jetty指向我的Spring上下文。我尝试了如下操作:

context.setInitParameter("contextConfigLocation", "classpath*:**/*Context.xml");

但是它不起作用(仍然会产生相同的异常)。我还尝试在ServletHolder上设置“contextConfigLocder”,但无济于事。

共有2个答案

澹台志诚
2023-03-14

如果要处理web.xml需要使用WebappContext,servlet上下文不知道web.xml

见:http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/OneWebApp.java

庄阿苏
2023-03-14

对于那些感兴趣的人,我的工作如下:

Server server = new Server(8090);

ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/batch");

// Setup Spring context
context.addEventListener(new ContextLoaderListener());
context.setInitParameter("contextConfigLocation", "classpath*:**/testContext.xml");

server.setHandler(context);

// Add servlets
context.addServlet(new ServletHolder(new BatchReceiver()), "/receiver/*");
context.addServlet(new ServletHolder(new BatchSender()), "/sender/*");       

server.start();
server.join();

我错过的关键一步是

context.addEventListener(new ContextLoaderListener());

加载Spring上下文。

 类似资料:
  • 使用deployVerticle方法部署verticles,指定verticles名,也可以把已经创建的verticles实例传递过来。 注意! 部署verticles实例只是 Java。 Verticle myVerticle = new MyVerticle(); vertx.deployVerticle(myVerticle); 您还可以通过指定verticles名称部署 verticles

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

  • 使用 lavas init 创建的模板项目中,在以下场景下都会以编程方式使用 Lavas: server.dev.js 开发环境下的 SPA/SSR 模式。 server.prod.js 生产环境下的 SSR 模式。 可见以编程方式使用 Lavas 的主要场景就是 SSR 模式,而在 SPA 模式下仅仅是供开发服务器使用。因此,如果开发者选择了 SSR 模式,阅读下面的内容将十分有帮助: 如何选择

  • 问题内容: 我将Wicket与Wicket Auth Project一起用于表示层,因此将其与Spring Security集成在一起。这是Wicket调用的身份验证方法: 我的Spring Security XML配置的内容(里面)是: 2.3.6节。参考文档的会话固定攻击防护说: 会话固定攻击是一种潜在的风险,恶意攻击者有可能通过访问站点来创建会话,然后诱使另一个用户以相同的会话登录(通过向他

  • 问题内容: 作为单元测试的一部分,我想调用限于错误信号部分的pylint检查器。因此我检查了pylint可执行脚本,进入了helper类,在那里我迷失了一个很长的函数,最后以调用。 有人尝试过并设法这样做吗? 梦想计划是这样的: 有什么提示吗?除了“复制方法并跳过”之外,我的意思是? 我并不 需要 通过运行测试,它也可能是或其他软件:随时提出替代方案。谢谢! 问题答案: 看一下,其中包含以编程方式

  • 是否有一种编程(基于属性)的方法在Spring引导(1.2.2)中禁用RabbitAutoConfiguration。 看起来像Spring。rabbitmq。dynamic=false仅禁用AmqpAdmin,而不禁用连接工厂等。 我们想要一个模型,其中应用程序属性可以来自Spring Cloud config(包括控制总线)或通过-D jvm args。这个决定是在部署时做出的。当属性来自-D